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

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

sudo mkfs.btrfs /dev/sdxy

Mounting the partition

Temporary mount with

sudo mount /dev/sdxy /mountpoint

Show info about the btrfs

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

sudo btrfs filesystem show

See detailed disk usage

sudo btrfs filesystem usage /Subvol

Creating the subvolumes

To create a subvolume called data

sudo btrfs subvolume create /mountpoint/data

List all the subvolumes

To create a subvolume called data

sudo btrfs subvolume list /mountpoint/data

Mounting the subvolumes

to make the mount permanent, edit the ‘/etc/fstab’ file

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

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.

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.

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

Creating backups of your snapshot on a remote machine

btrfs send -p /data/ /data/.snapshots/new_snaphot | ssh root@ip "btrfs receive /mnt/backups"
  • DioTheSuperiorWaifu@kerala.party
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    11 months ago

    Cool. Thank you, A10aa.

    OpenSuse had recommended btrfs, but I chose ext4 as its more familiar/popular. Also, I was installing Leap in an HDD.
    Will try it when I install linux again(athinini ethra kollam aavumoo aavo?)

    Unrelated, but does anyone know to improve booting time in linux. I’ve looked up the archwiki n followed some of the points there.

  • 4dpuzzle@beehaw.org
    link
    fedilink
    arrow-up
    2
    ·
    11 months ago

    If you haven’t migrated to btrfs already (like me), it may be worth waiting a few more kernel release cycles. There is a good chance that bcachefs will get added to the kernel in the meantime. Bcachefs is everything that btrfs promised to be. It even supports native encryption unlike btrfs (btrfs can only be installed inside a partition encrypted with something like dmcrypt).

    • A10@kerala.party@kerala.party
      cake
      OPM
      link
      fedilink
      arrow-up
      1
      ·
      11 months ago

      Good to know, I mainly use BTRFS for the snapshot feature and super easy RAID0 setups. Bcachefs looks promising, I will give it a try once it is in the kernel and widely tested.

  • Yuki@kutsuya.dev
    link
    fedilink
    arrow-up
    1
    ·
    11 months ago

    So, I have a 14TB ext hdd formatted as ext4 for a while now. I only have about 700gb left while I type this message. I do notice ext4 being slow sometimes. When the disk was emptier it would reach speeds of 140mb/s while now it often only goes to 50mb/s.

    Do you think btrfs would give me better performance?

    The disk is mainly used as AI storage or big games.