dwww Home | Manual pages | Find package

BTRFS-FILESYSTEM(8)                  BTRFS                 BTRFS-FILESYSTEM(8)

NAME
       btrfs-filesystem  - command group that primarily does work on the whole
       filesystems

SYNOPSIS
       btrfs filesystem <subcommand> <args>

DESCRIPTION
       btrfs filesystem is used to  perform  several  whole  filesystem  level
       tasks,  including  all the regular filesystem operations like resizing,
       space stats, label  setting/getting,  and  defragmentation.  There  are
       other  whole filesystem tasks like scrub or balance that are grouped in
       separate commands.

SUBCOMMAND
       df [options] <path>
              Show a terse summary information about allocation of block group
              types of a given mount point. The original purpose of this  com-
              mand  was a debugging helper. The output needs to be further in-
              terpreted and is not suitable for quick overview.

              An example with description:

              • device size: 1.9TiB, one device, no RAID

              • filesystem size: 1.9TiB

              • created with: mkfs.btrfs -d single -m single

                 $ btrfs filesystem df /path
                 Data, single: total=1.15TiB, used=1.13TiB
                 System, single: total=32.00MiB, used=144.00KiB
                 Metadata, single: total=12.00GiB, used=6.45GiB
                 GlobalReserve, single: total=512.00MiB, used=0.00B

              • Data, System and Metadata  are  separate  block  group  types.
                GlobalReserve  is  an artificial and internal emergency space,
                see below.

              • single -- the allocation profile, defined at mkfs time

              • total -- sum of space reserved for all allocation profiles  of
                the given type, i.e. all Data/single. Note that it's not total
                size of filesystem.

              • used  --  sum  of  used space of the above, i.e. file extents,
                metadata blocks

              GlobalReserve is an artificial and internal emergency space.  It
              is used e.g.  when the filesystem is full. Its total size is dy-
              namic  based  on  the  filesystem  size, usually not larger than
              512MiB, used may fluctuate.

              The GlobalReserve is a portion of Metadata. In case the filesys-
              tem metadata is exhausted, GlobalReserve/total + Metadata/used =
              Metadata/total. Otherwise there appears to be some unused  space
              of Metadata.

              Options

              -b|--raw
                     raw numbers in bytes, without the B suffix

              -h|--human-readable
                     print  human friendly numbers, base 1024, this is the de-
                     fault

              -H     print human friendly numbers, base 1000

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

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

              -k|--kbytes
                     show sizes in KiB, or kB with --si

              -m|--mbytes
                     show sizes in MiB, or MB with --si

              -g|--gbytes
                     show sizes in GiB, or GB with --si

              -t|--tbytes
                     show sizes in TiB, or TB with --si

              If conflicting options are passed, the  last  one  takes  prece-
              dence.

       defragment [options] <file>|<dir> [<file>|<dir>...]
              Defragment  file  data  on a mounted filesystem. Requires kernel
              2.6.33 and newer.

              If -r is passed, files in dir will be  defragmented  recursively
              (not  descending  to subvolumes, mount points and directory sym-
              links).  The start position and the number of bytes  to  defrag-
              ment  can  be  specified by start and length using -s and -l op-
              tions below.  Extents bigger than value  given  by  -t  will  be
              skipped,  otherwise  this value is used as a target extent size,
              but is only advisory and may not be reached if the free space is
              too fragmented.  Use 0 to take  the  kernel  default,  which  is
              256KiB  but may change in the future.  You can also turn on com-
              pression in defragment operations.

              WARNING:
                 Defragmenting with Linux kernel versions < 3.9 or ≥  3.14-rc2
                 as  well  as  with  Linux stable kernel versions ≥ 3.10.31, ≥
                 3.12.12 or ≥ 3.13.4 will break up the reflinks  of  COW  data
                 (for  example  files  copied  with cp --reflink, snapshots or
                 de-duplicated data).  This may cause considerable increase of
                 space usage depending on the broken up reflinks.

              NOTE:
                 Directory arguments without -r do not defragment files recur-
                 sively but will defragment  certain  internal  trees  (extent
                 tree  and  the  subvolume  tree). This has been confusing and
                 could be removed in the future.

              For start, len, size it is possible to append units  designator:
              K, M, G, T, P, or E, which represent KiB, MiB, GiB, TiB, PiB, or
              EiB, respectively (case does not matter).

              Options

              -c[<algo>]
                     compress  file contents while defragmenting. Optional ar-
                     gument selects the compression algorithm, zlib (default),
                     lzo or zstd. Currently it's not  possible  to  select  no
                     compression. See also section EXAMPLES.

              -r     defragment  files  recursively in given directories, does
                     not descend to subvolumes or mount points

              -f     flush data for each file before going to the next file.

                     This will limit the amount of dirty data to current file,
                     otherwise the amount accumulates from several  files  and
                     will  increase  system load. This can also lead to ENOSPC
                     if there's too much dirty data to write and it's not pos-
                     sible to make the reservations for the new data (i.e. how
                     the COW design works).

              -s <start>[kKmMgGtTpPeE]
                     defragmentation will start from the given offset, default
                     is beginning of a file

              -l <len>[kKmMgGtTpPeE]
                     defragment only up to len bytes, default is the file size

              -t <size>[kKmMgGtTpPeE]
                     target extent size, do  not  touch  extents  bigger  than
                     size, default: 32MiB

                     The  value is only advisory and the final size of the ex-
                     tents may differ, depending on  the  state  of  the  free
                     space  and fragmentation or other internal logic. Reason-
                     able values are from tens to hundreds of megabytes.

              --step SIZE
                     Perform defragmention in the  range  in  SIZE  steps  and
                     flush  (-f)  after  each  one.  The range is default (the
                     whole file) or given by -s and -l, split into  the  steps
                     or  done  in  one go if the step is larger. Minimum range
                     size is 256KiB.

              -v     (deprecated) alias for global -v option

       du [options] <path> [<path>..]
              Calculate disk usage of the target files using FIEMAP. For indi-
              vidual files, it will report a count of total bytes, and  exclu-
              sive  (not shared) bytes. We also calculate a 'set shared' value
              which is described below.

              Each argument to btrfs filesystem du  will  have  a  set  shared
              value calculated for it. We define each set as those files found
              by a recursive search of an argument (recursion descends to sub-
              volumes  but  not  mount points). The set shared value then is a
              sum of all shared space referenced by the set.

              set shared takes into account overlapping shared extents,  hence
              it isn't as simple as adding up shared extents.

              Options

              -s|--summarize
                     display only a total for each argument

              --raw  raw numbers in bytes, without the B suffix.

              --human-readable
                     print  human friendly numbers, base 1024, this is the de-
                     fault

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

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

              --kbytes
                     show sizes in KiB, or kB with --si.

              --mbytes
                     show sizes in MiB, or MB with --si.

              --gbytes
                     show sizes in GiB, or GB with --si.

              --tbytes
                     show sizes in TiB, or TB with --si.

       label [<device>|<mountpoint>] [<newlabel>]
              Show or update the label  of  a  filesystem.  This  works  on  a
              mounted filesystem or a filesystem image.

              The  newlabel  argument is optional. Current label is printed if
              the argument is omitted.

              NOTE:
                 The maximum allowable length shall be less than 256 chars and
                 must not contain a newline. The trailing newline is  stripped
                 automatically.

       mkswapfile [-s size] file
              Create  a  new file that's suitable and formatted as a swapfile.
              Default size is 2GiB, fixed page  size  4KiB,  minimum  size  is
              40KiB.

              A swapfile must be created in a specific way: NOCOW and preallo-
              cated.   Subvolume  containing  a swapfile cannot be snapshotted
              and blocks of an activated swapfile cannot be balanced.

              Swapfile creation can be achieved by  standalone  commands  too.
              Activation  needs to be done by command swapon(8). See also com-
              mand btrfs inspect-internal map-swapfile and the  Swapfile  fea-
              ture description.

              NOTE:
                 The  command is a simplified version of 'mkswap', if you want
                 to set label, page size, or other parameters please use  'mk-
                 swap' proper.

              Options

              -s|--size SIZE
                     Create swapfile of a given size SIZE (accepting k/m/g/e/p
                     suffix).

              -U|--uuid UUID
                     specify  UUID  to use, or a special value: clear (all ze-
                     ros), random, time (time-based random)

       resize [options] [<devid>:][+/-]<size>[kKmMgGtTpPeE]|[<devid>:]max
       <path>
              Resize a mounted filesystem identified by path. A particular de-
              vice can be resized by specifying a devid.

              WARNING:
                 If path is a file containing a BTRFS image then  resize  does
                 not  work  as  expected  and  does not resize the image. This
                 would resize the underlying filesystem instead.

              The devid can be found in the output of  btrfs  filesystem  show
              and  defaults  to 1 if not specified.  The size parameter speci-
              fies 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, bytes are assumed for size.  Option-
              ally, the size parameter may be suffixed by one of the following
              unit designators: K, M, G, T, P, or E, which represent KiB, MiB,
              GiB, TiB, PiB, or EiB, respectively (case does not matter).

              If max is passed, the filesystem will occupy all available space
              on the device respecting devid (remember, devid 1 by default).

              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  de-
              sired  size.  When recreating the partition make sure to use the
              same starting partition offset as before.

              Growing is usually instant as it only updates the size. However,
              shrinking could take a long time if there are data in the device
              area that's beyond the new end. Relocation  of  the  data  takes
              time.

              See also section EXAMPLES.

              Options

              --enqueue
                     wait if there's another exclusive operation running, oth-
                     erwise continue

       show [options] [<path>|<uuid>|<device>|<label>]
              Show  the  btrfs  filesystem with some additional info about de-
              vices and space allocation.

              If no option none of path/uuid/device/label is passed,  informa-
              tion  about all the BTRFS filesystems is shown, both mounted and
              unmounted.

              Options

              -m|--mounted
                     probe kernel for mounted BTRFS filesystems

              -d|--all-devices
                     scan all devices under /dev, otherwise the  devices  list
                     is  extracted  from  the /proc/partitions file. This is a
                     fallback option if there's no device node  manager  (like
                     udev) available in the system.

              --raw  raw numbers in bytes, without the B suffix

              --human-readable
                     print  human friendly numbers, base 1024, this is the de-
                     fault

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

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

              --kbytes
                     show sizes in KiB, or kB with --si

              --mbytes
                     show sizes in MiB, or MB with --si

              --gbytes
                     show sizes in GiB, or GB with --si

              --tbytes
                     show sizes in TiB, or TB with --si

       sync <path>
              Force a sync of the filesystem at path, similar to  the  sync(1)
              command.  In addition, it starts cleaning of deleted subvolumes.
              To wait for the subvolume deletion to  complete  use  the  btrfs
              subvolume sync command.

       usage [options] <path> [<path>...]
              Show  detailed information about internal filesystem usage. This
              is supposed to replace the btrfs filesystem df  command  in  the
              long run.

              The  level  of  detail  can differ if the command is run under a
              regular or the root user (due to use of restricted  ioctl).  For
              both  there's a summary section with information about space us-
              age:

                 $ btrfs filesystem usage /path
                 WARNING: cannot read detailed chunk info, RAID5/6 numbers will be incorrect, run as root
                 Overall:
                     Device size:                   1.82TiB
                     Device allocated:              1.17TiB
                     Device unallocated:          669.99GiB
                     Device missing:                  0.00B
                     Device slack:                  1.00GiB
                     Used:                          1.14TiB
                     Free (estimated):            692.57GiB      (min: 692.57GiB)
                     Free (statfs, df)            692.57GiB
                     Data ratio:                       1.00
                     Metadata ratio:                   1.00
                     Global reserve:              512.00MiB      (used: 0.00B)
                     Multiple profiles:                  no

              • Device size -- sum of raw device  capacity  available  to  the
                filesystem,  note  that  this may not be the same as the total
                device size (the difference is accounted as slack)

              • Device  allocated  --  sum  of  total  space   allocated   for
                data/metadata/system  profiles,  this  also accounts space re-
                served but not yet used for extents

              • Device unallocated -- the remaining unallocated space for  fu-
                ture allocations (difference of the above two numbers)

              • Device missing -- sum of capacity of all missing devices

              • Device  slack -- sum of slack space on all devices (difference
                between entire device size and the space occupied by  filesys-
                tem)

              • Used  --  sum  of  the used space of data/metadata/system pro-
                files, not including the reserved space

              • Free (estimated) -- approximate size  of  the  remaining  free
                space usable for data, including currently allocated space and
                estimating  the  usage  of  the unallocated space based on the
                block group profiles, the min is the lower bound of the  esti-
                mate in case multiple profiles are present

              • Free (statfs, df) -- the amount of space available for data as
                reported by the statfs/statvfs syscall, also returned as Avail
                in  the  output  of df. The value is calculated in a different
                way and may not match the estimate in some cases (e.g.  multi-
                ple profiles).

              • Data ratio -- ratio of total space for data  including  redun-
                dancy  or  parity  to  the effectively usable data space, e.g.
                single is 1.0, RAID1 is 2.0 and for RAID5/6 it depends on  the
                number of devices

              • Metadata ratio -- ditto, for metadata

              • Global  reserve  --  portion  of  metadata  currently used for
                global block reserve, used for emergency purposes (like  dele-
                tion on a full filesystem)

              • Multiple  profiles  -- what block group types (data, metadata)
                have more than one profile (single, raid1, ...), see  btrfs(5)
                section FILESYSTEMS WITH MULTIPLE PROFILES.

              And on a zoned filesystem there are two more lines in the Device
              section:

                 Device zone unusable:          5.13GiB
                 Device zone size:            256.00MiB

              • Device  zone  unusable  -- sum of of space that's been used in
                the past but now is not due to COW and not referenced anymore,
                the chunks have to be reclaimed and zones reset to make it us-
                able again

              • Device zone size -- the reported zone size of the host-managed
                device, same for all devices

              The root user will also see stats broken  down  by  block  group
              types:

                 Data,single: Size:1.15TiB, Used:1.13TiB (98.26%)
                    /dev/sdb        1.15TiB

                 Metadata,single: Size:12.00GiB, Used:6.45GiB (53.75%)
                    /dev/sdb       12.00GiB

                 System,single: Size:32.00MiB, Used:144.00KiB (0.44%)
                    /dev/sdb       32.00MiB

                 Unallocated:
                    /dev/sdb      669.99GiB

              Data is block group type, single is block group profile, Size is
              total  size  occupied  by  this  type, Used is the actually used
              space, the percent is ratio of Used/Size. The Unallocated is re-
              maining space.

              Options

              -b|--raw
                     raw numbers in bytes, without the B suffix

              -h|--human-readable
                     print human friendly numbers, base 1024, this is the  de-
                     fault

              -H     print human friendly numbers, base 1000

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

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

              -k|--kbytes
                     show sizes in KiB, or kB with --si

              -m|--mbytes
                     show sizes in MiB, or MB with --si

              -g|--gbytes
                     show sizes in GiB, or GB with --si

              -t|--tbytes
                     show sizes in TiB, or TB with --si

              -T     show data in tabular format

              If  conflicting  options  are  passed, the last one takes prece-
              dence.

EXAMPLES
       $ btrfs filesystem defrag -v -r dir/

       Recursively defragment files  under  dir/,  print  files  as  they  are
       processed.   The  file  names will be printed in batches, similarly the
       amount of data triggered by defragmentation  will  be  proportional  to
       last N printed files. The system dirty memory throttling will slow down
       the  defragmentation  but  there  can still be a lot of IO load and the
       system may stall for a moment.

       $ btrfs filesystem defrag -v -r -f dir/

       Recursively defragment files under dir/, be verbose and wait until  all
       blocks  are  flushed  before  processing next file. You can note slower
       progress of the output and lower IO load (proportional to currently de-
       fragmented file).

       $ btrfs filesystem defrag -v -r -f -clzo dir/

       Recursively defragment files under dir/, be  verbose,  wait  until  all
       blocks are flushed and force file compression.

       $ btrfs filesystem defrag -v -r -t 64M dir/

       Recursively  defragment  files  under dir/, be verbose and try to merge
       extents to be about 64MiB. As stated above, the success rate depends on
       actual free space fragmentation and the final result is not  guaranteed
       to meet the target even if run repeatedly.

       $ btrfs filesystem resize -1G /path

       $ btrfs filesystem resize 1:-1G /path

       Shrink  size  of the filesystem's device id 1 by 1GiB. The first syntax
       expects a device with id 1 to exist, otherwise  fails.  The  second  is
       equivalent and more explicit. For a single-device filesystem it's typi-
       cally not necessary to specify the devid though.

       $ btrfs filesystem resize max /path

       $ btrfs filesystem resize 1:max /path

       Let's assume that devid 1 exists and the filesystem does not occupy the
       whole  block  device, e.g. it has been enlarged and we want to grow the
       filesystem. By simply using max as size we will achieve that.

       NOTE:
          There are two ways to minimize the filesystem on a given device. The
          btrfs inspect-internal min-dev-size command, or  iteratively  shrink
          in steps.

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

AVAILABILITY
       btrfs  is  part  of  btrfs-progs.  Please refer to the documentation at
       https://btrfs.readthedocs.io.

SEE ALSO
       btrfs-subvolume(8), mkfs.btrfs(8)

6.6.3                            Mar 31, 2024              BTRFS-FILESYSTEM(8)

Generated by dwww version 1.16 on Tue Dec 16 14:02:45 CET 2025.