Updated: 28 September 2026 · Applies to: btrfs-progs 6.x on Ubuntu 24.04 and 26.04, Debian 13, Fedora and AlmaLinux 10; not supported on RHEL, Rocky Linux or AlmaLinux 9
Btrfs can grow and shrink while it is mounted, and it can span several disks, so resizing is usually a single command. Which Linux you run matters: Btrfs is the default on Fedora Workstation and openSUSE, and supported on Ubuntu and Debian. Red Hat removed Btrfs from RHEL, so RHEL, Rocky Linux and AlmaLinux 9 kernels cannot mount it; AlmaLinux 10 added it back to its kernel. We tested the commands below with btrfs-progs 6.12.
Before you start
- Install the tools if needed:
apt install btrfs-progs,dnf install btrfs-progs(Fedora), or from EPEL on AlmaLinux 10. - Take a backup, and check the current size:
btrfs filesystem usage /data.
Grow Btrfs after the disk or partition got bigger
- Grow the partition first if there is one, for example with
growpart /dev/vda 2orparted. - Grow the file system to fill it:
btrfs filesystem resize max /data
- Check:
btrfs filesystem usage /data(the "Device size" line).
Grow by adding another disk
btrfs device add /dev/sdc /data btrfs balance start -dusage=50 /data
The new disk joins the file system at once. The balance spreads existing data across both disks; -dusage=50 only moves half-empty chunks, which is quicker. For mirrored data (RAID1), convert with btrfs balance start -dconvert=raid1 -mconvert=raid1 /data.
Shrink Btrfs
btrfs filesystem resize -20G /data
Shrinking also works while mounted, as long as the data fits. After shrinking the file system, you can shrink the partition to the new size, never below it.
Multi-disk file systems
With several disks, resize one device by its ID: find the ID with btrfs filesystem show /data, then run btrfs filesystem resize 2:max /data. To take a disk out, run btrfs device remove /dev/sdc /data; the data is moved to the other disks first.
Common problems
- "No space left" although df shows free space: Btrfs allocates space in chunks. Run
btrfs balance start -dusage=10 /datato free unused chunks. - "unknown filesystem type 'btrfs'" on RHEL, Rocky Linux or AlmaLinux 9: the kernel has no Btrfs support. Use XFS (see how to grow an XFS file system) or ext4 there.
Official documentation: btrfs filesystem and btrfs device.