Btrfs
2 min read
Btrfs is a modern copy on write (CoW) filesystem for Linux aimed at implementing advanced features while also focusing on fault tolerance, repair and easy administration. Btrfs is licensed under the GPL and open for contribution from anyone.

Create the filesystem
Single Device:
shell
mkfs.btrfs -L _mylabel_ /dev/partition
Multiple Devices (similiar to RAID):
shell
mkfs.btrfs -d single -m raid1 /dev/part1 /dev/part2 ...

Subvolumes
Subvolumes are their own seperated namespaces and work like ZFS Datasets. They can be mounted seperately. Each Btrfs file system has a top-level subvolume with ID 5.

Create a subvolume:
shell
btrfs subvolume create /path/to/subvolume

List suvolumes:
shell
btrfs subvolume list -p path

Delete subvolume:
shell
btrfs subvolume delete /path/to/subvolume

Using Swapfiles
Swapfiles can be used by disabling CoW:
shell
chattr +C /path/to/swapsubvolume

Use swapfile:
shell
touch /swapfile
chattr +C /swapfile
fallocate -l 8G /swapfile
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile

Filesystem Usage
See Usage:
shell
btrfs filesystem usage /

Available Space:
shell
btrfs filesystem df /

Scrub
Btrfs can self heal itself or check for errors with scrubbing. Start:
shell
btrfs scrub start /

See Status:
shell
btrfs scrub status /

Balance
Rebalance the filesystem.
shell
btrfs balance start --bg /
btrfs balance status /

Snapshots
Btrfs can use snapshots
shell
btrfs subvolume snapshot source [dest/]name

Resizing
Btrfs can be resized.

To extend the file system size to the maximum available size of the device:
shell
btrfs filesystem resize max /

To extend the file system to a specific size:
shell
btrfs filesystem resize size /

Add or remove size
shell
btrfs filesystem resize +size /
btrfs filesystem resize -size /