btrfs filesystem <subcommand> <args>


btrfs filesystem is used to do the filesystem level control jobs, including all the regular filesystem operations like setting/getting label, resizing, defragment.


df [options] <path>

Show space usage information for a mount point.



raw numbers in bytes, without the B suffix


print human friendly numbers, base 1024, this is the default


print human friendly numbers, base 1000


select the 1024 base for the following options, according to the IEC standard


select the 1000 base for the following options, according to the SI standard


show sizes in KiB, or kB with --si


show sizes in MiB, or mB with --si


show sizes in GiB, or gB with --si


show sizes in TiB, or tB with --si

If conflicting options are passed, the last one takes precedence.

show [--mounted|--all-devices|<path>|<uuid>|<device>|<label>]

Show the btrfs filesystem with some additional info.

If no option nor <path>|<uuid>|<device>|<label> is passed, btrfs shows information of all the btrfs filesystem both mounted and unmounted. If --mounted is passed, it would probe btrfs kernel to list mounted btrfs filesystem(s); If --all-devices is passed, all the devices under /dev are scanned; otherwise the devices list is extracted from the /proc/partitions file.

sync <path>

Force a sync for the filesystem identified by <path>.

defragment [options] <file>|<dir> [<file>|<dir>...]

Defragment file data and/or directory metadata online.

If -r is passed, files in dir will be defragmented recursively. The start position and the number of bytes to defragment can be specified by start and len using -s and -l options below. Any extent bigger than threshold given by -t option, will be considered already defragged. Use 0 to take the kernel default. You can also turn on compression in defragment operations.



be verbose


compress file contents while defragmenting


defragment files recursively


flush filesystem after defragmenting

-s <start>

defragment only from byte <start> onward

-l <len>

defragment only up to <len> bytes

-t <size>

defragment only files at least <size> bytes big

For <start>, <len>, <size> it is possible to append a suffix like k for 1 KBytes, m for 1 MBytes...


defragmenting with kernels up to 2.6.37 will unlink COW-ed copies of data, don\(cqt use it if you use snapshots, have de-duplicated your data or made copies with cp --reflink.

resize [<devid>:]<size>[gkm]|[<devid>:]max <path>

Resize a filesystem identified by <path> for the underlying device devid online.

The devid can be found with btrfs filesystem show and defaults to 1 if not specified. The <size> parameter specifies the new size of the filesystem. If the prefix + or - is present the size is increased or decreased by the quantity <size>. If no units are specified, the unit of the <size> parameter defaults to bytes. Optionally, the size parameter may be suffixed by one of the following units designators: 'K', 'M', or 'G', kilobytes, megabytes, or gigabytes, respectively.

If 'max' is passed, the filesystem will occupy all available space on the device devid.

The resize command does not manipulate the size of underlying partition. If you wish to enlarge/reduce a filesystem, you must make sure you can expand the partition before enlarging the filesystem and shrink the partition after reducing the size of the filesystem. This can done using fdisk(8) or parted(8) to delete the existing partition and recreate it with the new desired size. When recreating the partition make sure to use the same starting disk cylinder as before.

label [<dev>|<mountpoint>] [<newlabel>]

Show or update the label of a filesystem.

[<device>|<mountpoint>] is used to identify the filesystem. If a newlabel optional argument is passed, the label is changed. NOTE: the maximum allowable length shall be less than 256 chars


btrfs filesystem returns a zero exit status if it succeeds. Non zero is returned in case of failure.


btrfs is part of btrfs-progs. Please refer to the btrfs wiki \m[blue]\m[] for further details.

RELATED TO btrfs-filesystem…