How To Build and Install the Latest Version of btrfs-tools on Linux

Since Linux kernel version 2.6.29-rc1, Btrfs has been included in the mainline kernel. How do I download and build/compile the latest version of Btrfs on Linux?

Btrfs has two parts as follows:[donotprint]
Tutorial details
Difficulty Easy (rss)
Root privileges Yes
Requirements Btrfs+Linux only
Time 15m
  1. btrfs.ko – Kernel module (driver) for Linux. Usually located at /lib/modules/4.2.0/kernel/fs/btrfs/btrfs.ko and must be supported by Linux kernel.
  2. brtfs-tools – The sources of the userspace utilities.

The main Btrfs features

Btrfs (“Better FS”) is a new filesystem with powerful features similar to Sun/Oracle’s excellent ZFS. These include snapshots, multi-disk striping and mirroring (software RAID), checksums, incremental backup, and on-the-fly compression that can give a significant performance boost as well as save space. Btrfs appears to be the future of Linux filesystems. For more information see the official page here.

In this tutorial you will learn how to build and install the latest version of userspace utilities (brtfs-tools) on a Debian or Ubuntu Linux based server.

Use latest kernel with btrfs

Since Linux kernel v2.6.29-rc1, Btrfs has been included in the mainline kernel. I recommend that you use latest Linux kernel version to get most out of Btrfs. See how to compile the latest version of the Linux kernel on a Linux operating systems for more info.

Install required software

Type the following apt-get command to install build tools:
$ sudo apt-get install git install asciidoc xmlto --no-install-recommends
$ sudo apt-get install uuid-dev libattr1-dev zlib1g-dev libacl1-dev e2fslibs-dev libblkid-dev liblzo2-dev

Download the latest stable version of brtfs-tools

Type the following git command (no need to root till you compile and build brtfs-tools):
$ git clone git://
Sample outputs:

Fig.01: btrfs-progs git repository

Build brtfs-tools

Type the following command for preparing a build for compilation and verifying functionality:
$ cd btrfs-progs
$ ./

Sample outputs:

Fig.02: buildconf in action

Next type ‘./configure‘ and ‘make‘ to compile.
$ ./configure && make
Sample outputs:
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
config.status: creating Documentation/Makefile
config.status: creating version.h
config.status: creating config.h
	btrfs-progs v4.2
	prefix:            /usr
	exec prefix:       ${prefix}
	bindir:            ${exec_prefix}/bin
	libdir:            ${exec_prefix}/lib
	includedir:        ${prefix}/include
	compiler:          gcc
	cflags:            -g -O1 -Wall -D_FORTIFY_SOURCE=2
	documentation:     yes
	backtrace support: yes
	btrfs-convert:     yes
	Type 'make' to compile.
    [CC]     ctree.o
    [CC]     disk-io.o
    [CC]     radix-tree.o
    [ASCII]  btrfs-property.xml
    [XMLTO]  btrfs-property.8
    [GZ]     btrfs-property.8.gz
rm btrfs-quota.8 btrfs-balance.xml btrfs-restore.xml btrfs-scrub.8 mkfs.btrfs.8 btrfs-check.8 btrfs-map-logical.8 btrfs-select-super.xml btrfs-scrub.xml mkfs.btrfs.xml btrfs-map-logical.xml btrfs-inspect-internal.8 btrfs-debug-tree.8 btrfs-inspect-internal.xml btrfs-debug-tree.xml btrfs-filesystem.8 fsck.btrfs.8 btrfs-filesystem.xml btrfs-convert.xml btrfs-replace.8 btrfstune.xml fsck.btrfs.xml btrfs-show-super.8 btrfs-replace.xml btrfs-show-super.xml btrfs-quota.xml btrfs-send.xml btrfs.xml btrfs-device.8 btrfs-image.8 btrfs-convert.8 btrfs-device.xml btrfs-image.xml btrfs-mount.5 btrfs-select-super.8 btrfs-rescue.8 btrfs-check.xml btrfs.8 btrfs-qgroup.8 btrfs-rescue.xml btrfs-mount.xml btrfs-qgroup.xml btrfs-property.8 btrfs-subvolume.8 btrfs-property.xml btrfs-restore.8 btrfstune.8 btrfs-receive.8 btrfs-subvolume.xml btrfs-receive.xml btrfs-find-root.8 btrfs-send.8 btrfs-find-root.xml btrfs-balance.8


First, make sure older version is removed from your system:
$ sudo apt-get --purge remove btrfs-tools
Sample outputs:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-compiler-gcc-4.8-x86 linux-headers-3.16.0-4-amd64 linux-headers-3.16.0-4-common linux-kbuild-3.16
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 3,099 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 154332 files and directories currently installed.)
Removing btrfs-tools (3.17-1.1) ...
update-initramfs: deferring update (trigger activated)
Purging configuration files for btrfs-tools (3.17-1.1) ...
Processing triggers for man-db ( ...
Processing triggers for initramfs-tools (0.120) ...
update-initramfs: Generating /boot/initrd.img-4.2.0
Processing triggers for libc-bin (2.19-18+deb8u1) ...

Finally, install the latest version, enter:
$ sudo make install
Sample outputs:

Making install in Documentation
/usr/bin/install -c -d -m 755 /usr/share/man/man5
/usr/bin/install -c -d -m 755 /usr/share/man/man8
/usr/bin/install -c -m 644 btrfs-mount.5.gz /usr/share/man/man5
# the source file name of btrfs.5 clashes with section 8 page, but we
# want to keep the code generic
/bin/mv /usr/share/man/man5/btrfs-mount.5.gz /usr/share/man/man5/btrfs.5.gz
/usr/bin/install -c -m 644 btrfs.8.gz btrfs-convert.8.gz btrfs-debug-tree.8.gz btrfs-find-root.8.gz btrfs-image.8.gz btrfs-map-logical.8.gz btrfs-show-super.8.gz btrfs-select-super.8.gz btrfstune.8.gz fsck.btrfs.8.gz mkfs.btrfs.8.gz btrfs-subvolume.8.gz btrfs-filesystem.8.gz btrfs-balance.8.gz btrfs-device.8.gz btrfs-scrub.8.gz btrfs-check.8.gz btrfs-rescue.8.gz btrfs-inspect-internal.8.gz btrfs-send.8.gz btrfs-receive.8.gz btrfs-quota.8.gz btrfs-qgroup.8.gz btrfs-replace.8.gz btrfs-restore.8.gz btrfs-property.8.gz /usr/share/man/man8
ln -s -f btrfs-check.8.gz /usr/share/man/man8/btrfsck.8.gz
ln -s -f btrfs-rescue.8.gz /usr/share/man/man8/btrfs-zero-log.8.gz
/usr/bin/install -c -m755 -d /usr/bin
/usr/bin/install -c btrfs mkfs.btrfs btrfs-debug-tree btrfs-map-logical btrfs-image btrfs-zero-log btrfs-find-root btrfstune btrfs-show-super btrfs-select-super btrfs-convert /usr/bin
/usr/bin/install -c fsck.btrfs /usr/bin
# btrfsck is a link to btrfs in the src tree, make it so for installed file as well
ln -s -f btrfs /usr/bin/btrfsck
/usr/bin/install -c -m755 -d /usr/lib
/usr/bin/install -c libbtrfs.a /usr/lib
cp -a /usr/lib
/usr/bin/install -c -m755 -d /usr/include/btrfs
/usr/bin/install -c -m644 send-stream.h send-utils.h send.h rbtree.h btrfs-list.h crc32c.h list.h kerncompat.h radix-tree.h extent-cache.h extent_io.h ioctl.h ctree.h btrfsck.h version.h /usr/include/btrfs


To see version info, enter:
$ btrfs version
Sample outputs:

btrfs-progs v4.2

Here is my Linux kernel version:
$ uname -mrs
Sample outputs:

Linux 4.2.0 x86_64

What next?

See how to create btrfs device and use it on Linux based system.

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 4 comments so far... add one

CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
4 comments… add one
  • Philippe Petrinko Sep 14, 2015 @ 6:33

    Thanks for this overview, Vivek.

    BTW, I am surprised to see that such a basic system function has to be manually installed.
    I wonder why Debian, for instance, has no standard package for btrfs.

    Do you happen to know why?


    • 🐧 Vivek Gite Sep 14, 2015 @ 9:49


      Debian has pretty old package called btrfs-tools v3.19 (or may be older version). There is no support for Debian v7.x. Same with Ubuntu LTS. Btrfs is pretty much stable with 4.x series kernel and btrfs-tools v4.x. Upcoming Debian 9.x/CentOS 8.x will have stable updated 4.x kernel and BTRFS tools.


  • Michal Feb 21, 2017 @ 12:55

    Is It possible to leave package btrfs-tools? or install on it.. ?

    by accident I install once again btrfs-tools with openmediavoult on previously installed btrfs-tools from surceases but btrfs version still reports v4.9.1

    apt-get is hard to force to install another packages (openmediavoult) without btrfs-tools…

  • Cerem Cem ASLAN May 24, 2017 @ 10:20

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre> for code samples. Problem posting comment? Email me @