Linux Professional Institute LPIC-1 Exam 101

Devices Linux Filesystems Filesystem Hierarchy Standard

Create Partitions and Filesystems btrfs

In this comprehensive guide, you’ll learn how to build, manage, and optimize Btrfs (B-tree file system) volumes on Linux. We cover everything from one-device setups to multi-disk RAID configurations, subvolumes, snapshots, and transparent compression.

Btrfs Overview

Btrfs is a modern copy-on-write (COW) filesystem designed for Linux environments with large storage needs, multiple disks, or advanced snapshot requirements. Its core capabilities include:

FeatureDescription
Multi-device supportRAID-like layouts: single, dup, raid0, raid1, raid5, raid6, raid10
Transparent compressionZLIB, LZO, ZSTD algorithms for on-the-fly data reduction
SSD optimizationsTRIM support, reduced fragmentation
Snapshots & incremental backupCreate point-in-time subvolume copies for quick rollback and backup
Online defragmentationDefragment without unmounting
Subvolumes with quotasIsolate datasets, enforce per-subvolume space limits
DeduplicationPost-process or realtime block dedupe

What Is Copy-On-Write?

When modifying data, COW filesystems write new data to free space, update metadata, then discard the old blocks. This preserves data integrity across crashes.

The image explains the difference between traditional filesystems and copy-on-write filesystems, highlighting how new data is written and managed. Traditional filesystems overwrite old data directly, while copy-on-write filesystems write new data to free space and update metadata before removing old data.

1. Creating a Btrfs Filesystem

1.1 Single-Device Setup

Initialize a simple Btrfs volume on /dev/sdb1:

sudo mkfs.btrfs /dev/sdb1

Add a human-readable label:

sudo mkfs.btrfs -L "New Disk" /dev/sdb1

Warning

Changing labels on a mounted filesystem can cause mount failures. Always unmount before relabeling.

1.2 Multi-Device & RAID Profiles

Expand a Btrfs pool across /dev/sdb and /dev/sdc:

sudo mkfs.btrfs \
  -d raid1 \
  -m raid1 \
  -L "MirrorPool" \
  /dev/sdb /dev/sdc
ProfileData LayoutUse Case
singleNo redundancyTests, single-disk volumes
dupMetadata onlyProtect metadata on single device
raid0StripingMax performance, no redundancy
raid1MirroringRedundancy, small pools
raid5/6ParityLarge pools, high capacity
raid10Stripe+MirrorPerformance + redundancy

2. Subvolumes

Subvolumes are independent namespaces within a Btrfs filesystem—each with its own snapshots and quotas.

  1. Mount the main volume:

    sudo mount /dev/sdb1 /mnt/disk
    
  2. Create a subvolume named BKP:

    sudo btrfs subvolume create /mnt/disk/BKP
    
  3. Verify the listing:

    ls -lh /mnt/disk/
    # drwxr-xr-x 1 root root   0 Jul 13 17:35 BKP
    # drwxrwxr-x 1 carol carol 988 Jul 13 17:30 Images
    
  4. Inspect subvolume metadata:

    sudo btrfs subvolume show /mnt/disk/BKP
    # Name:               BKP
    # UUID:               e90a14fe-69fa-da4f-9764-3384f66fa32e
    # Subvolume ID:       260
    # Creation time:      2019-07-13 17:35:40 -0300
    

3. Mounting a Specific Subvolume

To mount BKP directly:

sudo mount -t btrfs \
  -o subvol=BKP \
  /dev/sdb1 /mnt/BKP

4. Snapshots

Snapshots capture a subvolume’s state at a specific point in time. They are instant, space-efficient, and independent from ongoing changes.

4.1 Create a Read-Write Snapshot

sudo btrfs subvolume snapshot /mnt/disk /mnt/disk/snap

4.2 Verify & Test

Remove some files from the live subvolume:

rm /mnt/disk/LG-G8S-ThinQ-*

Original data remains intact in the snapshot:

ls -lh /mnt/disk/snap/
# -rw-rw-r-- 1 carol carol 118K Jul 11 16:36 Twitter_Down_20190711.jpg
# -rw-rw-r-- 1 carol carol 324K Jul  2 15:22 Xiaomi_Mimoji.png

4.3 Read-Only Snapshots

Immutable snapshots prevent accidental writes:

sudo btrfs subvolume snapshot -r /mnt/disk /mnt/disk/snap-ro

5. Transparent Compression

Enable compression at mount time to reduce disk usage without manual compression commands.

sudo mount -o compression=zstd /dev/sdb1 /mnt/disk
AlgorithmSpeedCompression Ratio
zlibModerateGood (default)
lzoFastLower
zstdFastestSimilar to zlib

The image lists three compression algorithms: ZLIB (default), LZO (faster but lower compression ratio), and ZSTD (faster with a similar compression ratio to ZLIB).

Additional Resources

Watch Video

Watch video content

Previous
Create Partitions and Filesystems Use various mkfs commands to create various filesystems