mirror of
https://github.com/kdave/btrfs-progs
synced 2024-12-16 19:35:38 +00:00
c11e36a29e
When creating small Btrfs filesystem instances (i.e. filesystem size <= 1GiB), mkfs.btrfs fails if both sectorsize and nodesize are specified on the command line and sectorsize != nodesize, since mixed block groups involves both data and metadata blocks sharing the same block group. This is an incorrect behavior when '-M' option isn't specified on the command line. This commit makes optional the creation of mixed block groups i.e. Mixed block groups are created only when -M option is specified on the command line. Since we now allow small filesystem instances with sectorsize != nodesize to be created, we can end up in the following situation, [root@localhost ~]# mkfs.btrfs -f -n 65536 /dev/loop0 btrfs-progs v3.19-rc2-405-g976307c See http://btrfs.wiki.kernel.org for more information. Performing full device TRIM (512.00MiB) ... Label: (null) UUID: 49fab72e-0c8b-466b-a3ca-d1bfe56475f0 Node size: 65536 Sector size: 4096 Filesystem size: 512.00MiB Block group profiles: Data: single 8.00MiB Metadata: DUP 40.00MiB System: DUP 12.00MiB SSD detected: no Incompat features: extref, skinny-metadata Number of devices: 1 Devices: ID SIZE PATH 1 512.00MiB /dev/loop0 [root@localhost ~]# mount /dev/loop0 /mnt/ mount: mount /dev/loop0 on /mnt failed: No space left on device The ENOSPC occurs during the creation of the UUID tree. This is because of things like large metadata block size, DUP mode used for metadata and global reservation consuming space. Also, large nodesize does not make sense on small filesystems, hence this should not be an issue. Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com> Signed-off-by: David Sterba <dsterba@suse.com>
178 lines
5.4 KiB
Plaintext
178 lines
5.4 KiB
Plaintext
mkfs.btrfs(8)
|
|
=============
|
|
|
|
NAME
|
|
----
|
|
mkfs.btrfs - create a btrfs filesystem
|
|
|
|
SYNOPSIS
|
|
--------
|
|
*mkfs.btrfs*
|
|
$$[-A|--alloc-start <alloc-start>]$$
|
|
$$[-b|--byte-count <byte-count>]$$
|
|
$$[-d|--data <data-profile>]$$
|
|
$$[-f|--force]$$
|
|
$$[-n|--nodesize <nodesize>]$$
|
|
$$[-l|--leafsize <leafsize>]$$
|
|
$$[-L|--label <label>]$$
|
|
$$[-m|--metadata <metadata profile>]$$
|
|
$$[-M|--mixed]$$
|
|
$$[-q|--quiet]$$
|
|
$$[-s|--sectorsize <sectorsize>]$$
|
|
$$[-r|--rootdir <rootdir>]$$
|
|
$$[-K|--nodiscard]$$
|
|
$$[-O|--features <feature1>[,<feature2>...]]$$
|
|
$$[-U|--uuid <UUID>]$$
|
|
$$[-h]$$
|
|
$$[-V|--version]$$
|
|
$$<device> [<device>...]$$
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
*mkfs.btrfs*
|
|
is used to create a btrfs filesystem (usually in a disk partition, or an array
|
|
of disk partitions).
|
|
|
|
<device>
|
|
is the special file corresponding to the device (e.g /dev/sdXX ).
|
|
If multiple devices are specified, btrfs is created
|
|
spanning across the specified devices.
|
|
|
|
OPTIONS
|
|
-------
|
|
-A|--alloc-start <offset>::
|
|
Specify the offset from the start of the device at which to start allocations
|
|
in this btrfs filesystem. The default value is zero, or the start of the
|
|
device. This option is intended only for debugging filesystem resize
|
|
operations.
|
|
|
|
-b|--byte-count <size>::
|
|
Specify the size of the resultant filesystem. If this option is not used,
|
|
mkfs.btrfs uses all the available storage for the filesystem.
|
|
|
|
-d|--data <type>::
|
|
Specify how the data must be spanned across the devices specified. Valid
|
|
values are 'raid0', 'raid1', 'raid5', 'raid6', 'raid10' or 'single'.
|
|
|
|
-f|--force::
|
|
Force overwrite when an existing filesystem is detected on the device.
|
|
By default, mkfs.btrfs will not write to the device if it suspects that
|
|
there is a filesystem or partition table on the device already.
|
|
|
|
-l|--leafsize <size>::
|
|
Alias for --nodesize. Deprecated.
|
|
|
|
-n|--nodesize <size>::
|
|
Specify the nodesize, the tree block size in which btrfs stores
|
|
data. The default value is 16KB (16384) or the page size, whichever is
|
|
bigger. Must be a multiple of the sectorsize, but not larger than 65536.
|
|
Leafsize always equals nodesize and the options are aliases.
|
|
|
|
-L|--label <name>::
|
|
Specify a label for the filesystem.
|
|
+
|
|
NOTE: <name> should be less than 256 characters.
|
|
|
|
-m|--metadata <profile>::
|
|
Specify how metadata must be spanned across the devices specified. Valid
|
|
values are 'raid0', 'raid1', 'raid5', 'raid6', 'raid10', 'single' or 'dup'.
|
|
+
|
|
Single device
|
|
will have dup set by default except in the case of SSDs which will default to
|
|
single. This is because SSDs can remap blocks internally so duplicate blocks
|
|
could end up in the same erase block which negates the benefits of doing
|
|
metadata duplication.
|
|
|
|
-M|--mixed::
|
|
Mix data and metadata chunks together for more efficient space
|
|
utilization. This feature incurs a performance penalty in
|
|
larger filesystems. It is recommended for use with filesystems
|
|
of 1 GiB or smaller.
|
|
|
|
-q|--quiet::
|
|
Print only error or warning messages. Options --features or --help are unaffected.
|
|
|
|
-s|--sectorsize <size>::
|
|
Specify the sectorsize, the minimum data block allocation unit.
|
|
+
|
|
The default
|
|
value is the page size. If the sectorsize differs from the page size, the
|
|
created filesystem may not be mountable by current kernel. Therefore it is not
|
|
recommended to use this option unless you are going to mount it on a system
|
|
with the appropriate page size.
|
|
|
|
-r|--rootdir <rootdir>::
|
|
Specify a directory to copy into the newly created btrfs filesystem.
|
|
+
|
|
NOTE: '-r' option is done completely in userland, and don't need root
|
|
privilege to mount the filesystem.
|
|
|
|
-K|--nodiscard::
|
|
Do not perform whole device TRIM operation by default.
|
|
|
|
-O|--features <feature1>[,<feature2>...]::
|
|
A list of filesystem features turned on at mkfs time. Not all features are
|
|
supported by old kernels. To disable a feature, prefix it with '^'.
|
|
+
|
|
To see all features run:
|
|
+
|
|
+mkfs.btrfs -O list-all+
|
|
|
|
-U|--uuid <UUID>::
|
|
Create the filesystem with the specified UUID, which must not already exist on
|
|
the system.
|
|
|
|
-V|--version::
|
|
Print the *mkfs.btrfs* version and exit.
|
|
|
|
-h::
|
|
Print help.
|
|
|
|
UNIT
|
|
----
|
|
As default the unit is the byte, however it is possible to append a suffix
|
|
to the arguments like 'k' for KBytes, 'm' for MBytes...
|
|
|
|
NOTES
|
|
-----
|
|
Since mixed block group creation is optional, we allow small
|
|
filesystem instances with differing values for sectorsize and nodesize
|
|
to be created and could end up in the following situation,
|
|
|
|
[root@localhost ~]# mkfs.btrfs -f -n 65536 /dev/loop0
|
|
btrfs-progs v3.19-rc2-405-g976307c
|
|
See http://btrfs.wiki.kernel.org for more information.
|
|
|
|
Performing full device TRIM (512.00MiB) ...
|
|
Label: (null)
|
|
UUID: 49fab72e-0c8b-466b-a3ca-d1bfe56475f0
|
|
Node size: 65536
|
|
Sector size: 4096
|
|
Filesystem size: 512.00MiB
|
|
Block group profiles:
|
|
Data: single 8.00MiB
|
|
Metadata: DUP 40.00MiB
|
|
System: DUP 12.00MiB
|
|
SSD detected: no
|
|
Incompat features: extref, skinny-metadata
|
|
Number of devices: 1
|
|
Devices:
|
|
ID SIZE PATH
|
|
1 512.00MiB /dev/loop0
|
|
[root@localhost ~]# mount /dev/loop0 /mnt/
|
|
mount: mount /dev/loop0 on /mnt failed: No space left on device
|
|
|
|
The ENOSPC occurs during the creation of the UUID tree. This is
|
|
because of things like large metadata block size, DUP mode used for
|
|
metadata and global reservation consuming space.
|
|
|
|
AVAILABILITY
|
|
------------
|
|
*mkfs.btrfs* is part of btrfs-progs.
|
|
Please refer to the btrfs wiki http://btrfs.wiki.kernel.org for
|
|
further details.
|
|
|
|
SEE ALSO
|
|
--------
|
|
`btrfs`(8)
|