Getting started with BTRFS

HP storage server macro

BTRFS is a file system with logical volumes capabilities and data integrity features that is getting a lot of attention in the Linux world. Learn how to get started today!

Before you begin

BTRFS strays a lot from normal file system concepts. If you haven’t got a solid grip on this topic I suggest you read this post beforehand. After that you need a reasonably up to date kernel (the more up to date, the better), keep in mind many older versions can cause problems and upgrading to a newer version might not be a simple operation. The only package needed to start is btrfs-tools for debian-based and btrfs-progs  redhat-based distros.

Getting started with BTRFS

To initialize a partition you can simply do:

mkfs.btrfs /dev/sdX /dev/sdY

Where X and Y are the actual letters for your devices. No, it’s not a typo, with BTRFS you usually want to use the entire disk instead of partitioning it and creating the file system on top of the partitions. The precedent command actually created a file system that span across the selected devices (RAID0). Be careful: not all operating system can boot from BTRFS directly.

Another interesting feature you can take advantage of is the ext3/4 conversion. Be aware that as of Linux 4.0 kernel this feature has been neglected and not well-tested. Without further ado the commands to do so is:

fsck /dev/sdX           # Always run check before converting
btrfs-convert /dev/sdX  # This is how the conversion is done

This will create a BTRFS subvolume named ext2_saved. This subvolume is crucial to restore the former state of the converted file system, don’t delete it until you’re sure everything is right.

Managing devices

In a BTRFS system you will most likely have multiple devices that enable you to take advantage of built-in RAID configurations. In the precedent example a single BTRFS pool has been created on top of multiple devices, but adding/removing devices is quite simple. Keep in mind that to do so you need to mount the pool beforehand!

# btrfs device add /dev/sdX /mnt
# btrfs device delete /dev/sdX /mnt

To list pools (and their devices) you can issue:

# btrfs filesystem show
Label: none  uuid: bd807f40-773b-4ac1-9e25-a4658f7d51b7
	Total devices 3 FS bytes used 112.00KiB
	devid    1 size 1.00GiB used 275.94MiB path /dev/loop1
	devid    2 size 1.00GiB used 110.38MiB path /dev/loop2
	devid    3 size 1.00GiB used 263.94MiB path /dev/loop3


One of the most interesting capabilities of BTRFS is subvolumes. Subvolumes are like folder to the operating system, however they’re different entities and are almost treated as block devices (but they are not). To create a subvolume simply do (assuming the pool is mounted on /mnt ):

# btrfs subvolume create /mnt/subvolume1
Create subvolume '/mnt/subvolume1'

To verify you actually created a subvolume:

# btrfs subvolume list /mnt
ID 258 gen 6 top level 5 path subvlume1

If you ever need to delete a subvolume the opeartion is pretty simple:

# btrfs subvolume delete /mnt/subvolume1
Delete subvolume '/mnt/subvolume1'


In this tutorial you learnt the basics to operate a BTRFS system. Adding/removing devices, creating new pools and managing subvolumes. In the next tutorial you will learn how to perform advanced operations like setting up RAID levels, snapshots and managing quotas.


Image thanks to Martin Abegglen.

Image courtesy of Martin Abegglen

You may also like...

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.