Skip Navigation

Why use BTRFS over ext4 | BTRFS for dummies

BTRFS is a copy on write filesystem (COW)

Unlike journaling file systems like ext4, BTRFS does not overwrite the data when it is modified, instead it writes the data to a new block and changes metadata to point to the latest version of the file. This provides better protection against power failures.

Snapshots

BTRFS offers fast incremental snapshot creation and tools to backup and restore.

Creating the file system and btrfs partition

 shell
    
parted /dev/nvmexxx
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart primary btrfs 4MiB 100%
(parted) print
(parted) quit

  

after the partition is created, create the btrfs file system on it by running

 shell
    
sudo mkfs.btrfs /dev/sdxy

  

Mounting the partition

Temporary mount with

 shell
    
sudo mount /dev/sdxy /mountpoint

  

Show info about the btrfs

To see the UUID, size, usage of all btrfs disks.

 shell
    
sudo btrfs filesystem show

  

See detailed disk usage

 shell
    
sudo btrfs filesystem usage /Subvol

  

Creating the subvolumes

To create a subvolume called data

 shell
    
sudo btrfs subvolume create /mountpoint/data


  

List all the subvolumes

To create a subvolume called data

 shell
    
sudo btrfs subvolume list /mountpoint/data

  

Mounting the subvolumes

to make the mount permanent, edit the '/etc/fstab' file

 ini
    
UUID=DISKUUUD /MOUNTPOINT   btrfs   defaults,noatime,commit=120,compress=zstd:1 0 0


  

{: .nolineno file="/etc/fstab" } These are mount options for the root subvol

  • noatime : Do not modify metadata on file read. Reduces disk writes.
  • commit=120: Time interval for writing changes to disk. Default is 30. Reduces disk writes.
  • compress=zstd:1 : Filesystem level compression. Reduces disk writes.

Create a readonly snapshot of a subvolume

 shell
    
sudo btrfs subvolume snapshot -r /data /data/.snapshots/name

  

Copying snapshots to other drives using send, receive

Send and receive is faster than rsync. The destination must be also btrfs.

 shell
    
sudo btrfs send /data/.snapshots/name | sudo btrfs receive  /mnt/backupDISK/backup


  

Restoring from a snapshot and make the snapshot writable

Copy the snapshot to the target folder.

 shell
    
sudo btrfs property set -tsf /data/snapshot ro false

  

Creating backups of your snapshot on a remote machine

 shell
    
btrfs send -p /data/ /data/.snapshots/new_snaphot | ssh root@ip "btrfs receive /mnt/backups"

  
10 comments
10 comments