summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man8/btrfs-device.8
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/archlinux/man8/btrfs-device.8')
-rw-r--r--upstream/archlinux/man8/btrfs-device.8484
1 files changed, 484 insertions, 0 deletions
diff --git a/upstream/archlinux/man8/btrfs-device.8 b/upstream/archlinux/man8/btrfs-device.8
new file mode 100644
index 00000000..5789f4fa
--- /dev/null
+++ b/upstream/archlinux/man8/btrfs-device.8
@@ -0,0 +1,484 @@
+.\" Man page generated from reStructuredText.
+.
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.TH "BTRFS-DEVICE" "8" "Feb 14, 2024" "6.7.1" "BTRFS"
+.SH NAME
+btrfs-device \- manage devices of btrfs filesystems
+.SH SYNOPSIS
+.sp
+\fBbtrfs device\fP <subcommand> <args>
+.SH DESCRIPTION
+.sp
+The \fBbtrfs device\fP command group is used to manage devices of the btrfs filesystems.
+.SH DEVICE MANAGEMENT
+.sp
+BTRFS filesystem can be created on top of single or multiple block devices.
+Devices can be then added, removed or replaced on demand. Data and metadata are
+organized in allocation profiles with various redundancy policies. There\(aqs some
+similarity with traditional RAID levels, but this could be confusing to users
+familiar with the traditional meaning. Due to the similarity, the RAID
+terminology is widely used in the documentation. See \fI\%mkfs.btrfs(8)\fP for more
+details and the exact profile capabilities and constraints.
+.sp
+The device management works on a mounted filesystem. Devices can be added,
+removed or replaced, by commands provided by \fBbtrfs device\fP and \fBbtrfs replace\fP\&.
+.sp
+The profiles can be also changed, provided there\(aqs enough workspace to do the
+conversion, using the \fBbtrfs balance\fP command and namely the filter \fIconvert\fP\&.
+.INDENT 0.0
+.TP
+.B Type
+The block group profile type is the main distinction of the information stored
+on the block device. User data are called \fIData\fP, the internal data structures
+managed by filesystem are \fIMetadata\fP and \fISystem\fP\&.
+.TP
+.B Profile
+A profile describes an allocation policy based on the redundancy/replication
+constraints in connection with the number of devices. The profile applies to
+data and metadata block groups separately. E.g. \fIsingle\fP, \fIRAID1\fP\&.
+.TP
+.B RAID level
+Where applicable, the level refers to a profile that matches constraints of the
+standard RAID levels. At the moment the supported ones are: RAID0, RAID1,
+RAID10, RAID5 and RAID6.
+.UNINDENT
+.SH TYPICAL USE CASES
+.SS Starting with a single\-device filesystem
+.sp
+Assume we\(aqve created a filesystem on a block device \fB/dev/sda\fP with profile
+\fIsingle/single\fP (data/metadata), the device size is 50GiB and we\(aqve used the
+whole device for the filesystem. The mount point is \fB/mnt\fP\&.
+.sp
+The amount of data stored is 16GiB, metadata have allocated 2GiB.
+.SS Add new device
+.sp
+We want to increase the total size of the filesystem and keep the profiles. The
+size of the new device \fB/dev/sdb\fP is 100GiB.
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+$ btrfs device add /dev/sdb /mnt
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+The amount of free data space increases by less than 100GiB, some space is
+allocated for metadata.
+.SS Convert to RAID1
+.sp
+Now we want to increase the redundancy level of both data and metadata, but
+we\(aqll do that in steps. Note, that the device sizes are not equal and we\(aqll use
+that to show the capabilities of split data/metadata and independent profiles.
+.sp
+The constraint for RAID1 gives us at most 50GiB of usable space and exactly 2
+copies will be stored on the devices.
+.sp
+First we\(aqll convert the metadata. As the metadata occupy less than 50GiB and
+there\(aqs enough workspace for the conversion process, we can do:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+$ btrfs balance start \-mconvert=raid1 /mnt
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+This operation can take a while, because all metadata have to be moved and all
+block pointers updated. Depending on the physical locations of the old and new
+blocks, the disk seeking is the key factor affecting performance.
+.sp
+You\(aqll note that the system block group has been also converted to RAID1, this
+normally happens as the system block group also holds metadata (the physical to
+logical mappings).
+.sp
+What changed:
+.INDENT 0.0
+.IP \(bu 2
+available data space decreased by 3GiB, usable roughly (50 \- 3) + (100 \- 3) = 144 GiB
+.IP \(bu 2
+metadata redundancy increased
+.UNINDENT
+.sp
+IOW, the unequal device sizes allow for combined space for data yet improved
+redundancy for metadata. If we decide to increase redundancy of data as well,
+we\(aqre going to lose 50GiB of the second device for obvious reasons.
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+$ btrfs balance start \-dconvert=raid1 /mnt
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+The balance process needs some workspace (i.e. a free device space without any
+data or metadata block groups) so the command could fail if there\(aqs too much
+data or the block groups occupy the whole first device.
+.sp
+The device size of \fB/dev/sdb\fP as seen by the filesystem remains unchanged, but
+the logical space from 50\-100GiB will be unused.
+.SS Remove device
+.sp
+Device removal must satisfy the profile constraints, otherwise the command
+fails. For example:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+$ btrfs device remove /dev/sda /mnt
+ERROR: error removing device \(aq/dev/sda\(aq: unable to go below two devices on raid1
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+In order to remove a device, you need to convert the profile in this case:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+$ btrfs balance start \-mconvert=dup \-dconvert=single /mnt
+$ btrfs device remove /dev/sda /mnt
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.SH SUBCOMMAND
+.INDENT 0.0
+.TP
+.B add [\-Kf] <device> [<device>...] <path>
+Add device(s) to the filesystem identified by \fIpath\fP\&.
+.sp
+If applicable, a whole device discard (TRIM) operation is performed prior to
+adding the device. A device with existing filesystem detected by \fBblkid(8)\fP
+will prevent device addition and has to be forced. Alternatively the filesystem
+can be wiped from the device using e.g. the \fBwipefs(8)\fP tool.
+.sp
+The operation is instant and does not affect existing data. The operation merely
+adds the device to the filesystem structures and creates some block groups
+headers.
+.sp
+\fBOptions\fP
+.INDENT 7.0
+.TP
+.B \-K|\-\-nodiscard
+do not perform discard (TRIM) by default
+.TP
+.B \-f|\-\-force
+force overwrite of existing filesystem on the given disk(s)
+.UNINDENT
+.INDENT 7.0
+.TP
+.B \-\-enqueue
+wait if there\(aqs another exclusive operation running, otherwise continue
+.UNINDENT
+.TP
+.B remove [options] <device>|<devid> [<device>|<devid>...] <path>
+Remove device(s) from a filesystem identified by <path>
+.sp
+Device removal must satisfy the profile constraints, otherwise the command
+fails and cannot be enforced. The filesystem must be converted to
+profile(s) that would allow the removal. This can for example happen when
+going down from 2 devices to 1 and using the RAID1 profile. See the
+section \fI\%Typical use cases\fP\&.
+.sp
+The operation can take long as it needs to move all data from the device.
+.sp
+\fBNOTE:\fP
+.INDENT 7.0
+.INDENT 3.5
+It\(aqs possible to specify more than one device on the command
+line but the devices will be removed one by one, not at once.
+This means that the remaining devices to be deleted can be
+still used for writes. In that case there\(aqs a warning and safety
+timeout as this can be confusing and unexpected. The timeout can
+be overridden by option \fI\-\-force\fP\&.
+.UNINDENT
+.UNINDENT
+.sp
+It is possible to delete the device that was used to mount the filesystem. The
+device entry in the mount table (\fB/proc/self/mounts\fP) will be
+replaced by another device name with the lowest device id.
+.sp
+If the filesystem is mounted in degraded mode (\fI\-o degraded\fP), special term
+\fImissing\fP can be used for \fIdevice\fP\&. In that case, the first device that is
+described by the filesystem metadata, but not present at the mount time will be
+removed.
+.sp
+\fBNOTE:\fP
+.INDENT 7.0
+.INDENT 3.5
+In most cases, there is only one missing device in degraded mode,
+otherwise mount fails. If there are two or more devices missing (e.g. possible
+in RAID6), you need specify \fImissing\fP as many times as the number of missing
+devices to remove all of them.
+.UNINDENT
+.UNINDENT
+.sp
+\fBOptions\fP
+.INDENT 7.0
+.TP
+.B \-\-enqueue
+wait if there\(aqs another exclusive operation running, otherwise continue
+.TP
+.B \-\-force
+skip the safety timeout when there are multiple devices for removal, this
+does not force removing devices that would break the profile constraints
+.UNINDENT
+.TP
+.B delete <device>|<devid> [<device>|<devid>...] <path>
+Alias of remove kept for backward compatibility
+.TP
+.B replace <command> [options] <path>
+Alias of whole command group \fIbtrfs replace\fP for convenience. See
+\fI\%btrfs\-replace(8)\fP\&.
+.TP
+.B ready <device>
+Wait until all devices of a multiple\-device filesystem are scanned and
+registered within the kernel module. This is to provide a way for automatic
+filesystem mounting tools to wait before the mount can start. The device scan
+is only one of the preconditions and the mount can fail for other reasons.
+Normal users usually do not need this command and may safely ignore it.
+.TP
+.B scan [options] [<device> [<device>...]]
+Scan devices for a btrfs filesystem and register them with the kernel module.
+This allows mounting multiple\-device filesystem by specifying just one from the
+whole group.
+.sp
+If no devices are passed, all block devices that blkid reports to contain btrfs
+are scanned.
+.sp
+The options \fI\-\-all\-devices\fP or \fI\-d\fP can be used as a fallback in case blkid is
+not available. If used, behavior is the same as if no devices are passed.
+.sp
+The command can be run repeatedly. Devices that have been already registered
+remain as such. Reloading the kernel module will drop this information. There\(aqs
+an alternative way of mounting multiple\-device filesystem without the need for
+prior scanning. See the mount option
+\fI\%device (in btrfs\-man5)\fP\&.
+.sp
+\fBOptions\fP
+.INDENT 7.0
+.TP
+.B \-d|\-\-all\-devices
+Enumerate and register all devices, use as a fallback in case blkid is not
+available.
+.TP
+.B \-u|\-\-forget
+Unregister a given device or all stale devices if no path is given, the device
+must be unmounted otherwise it\(aqs an error.
+.UNINDENT
+.TP
+.B stats [options] <path>|<device>
+Read and print the device IO error statistics for all devices of the given
+filesystem identified by \fIpath\fP or for a single \fIdevice\fP\&. The filesystem must
+be mounted. See section \fI\%DEVICE STATS\fP
+for more information about the reported statistics and the meaning.
+.sp
+\fBOptions\fP
+.INDENT 7.0
+.TP
+.B \-z|\-\-reset
+Print the stats and reset the values to zero afterwards.
+.TP
+.B \-c|\-\-check
+Check if the stats are all zeros and return 0 if it is so. Set bit 6 of the
+return code if any of the statistics is no\-zero. The error values is 65 if
+reading stats from at least one device failed, otherwise it\(aqs 64.
+.UNINDENT
+.INDENT 7.0
+.TP
+.B \-T
+Print stats in a tabular form, devices as rows and stats as columns
+.UNINDENT
+.TP
+.B usage [options] <path> [<path>...]::
+Show detailed information about internal allocations on devices.
+.sp
+The level of detail can differ if the command is run under a regular or the
+root user (due to use of restricted ioctls). The first example below is for
+normal user (warning included) and the next one with root on the same
+filesystem:
+.INDENT 7.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+WARNING: cannot read detailed chunk info, per\-device usage will not be shown, run as root
+/dev/sdc1, ID: 1
+ Device size: 931.51GiB
+ Device slack: 0.00B
+ Unallocated: 931.51GiB
+
+/dev/sdc1, ID: 1
+ Device size: 931.51GiB
+ Device slack: 0.00B
+ Data,single: 641.00GiB
+ Data,RAID0/3: 1.00GiB
+ Metadata,single: 19.00GiB
+ System,single: 32.00MiB
+ Unallocated: 271.48GiB
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.INDENT 7.0
+.IP \(bu 2
+\fIDevice size\fP \-\- size of the device as seen by the filesystem (may be
+different than actual device size)
+.IP \(bu 2
+\fIDevice slack\fP \-\- portion of device not used by the filesystem but
+still available in the physical space provided by the device, e.g.
+after a device shrink
+.IP \(bu 2
+\fIData,single\fP, \fIMetadata,single\fP, \fISystem,single\fP \-\- in general, list
+of block group type (Data, Metadata, System) and profile (single,
+RAID1, ...) allocated on the device
+.IP \(bu 2
+\fIData,RAID0/3\fP \-\- in particular, striped profiles
+RAID0/RAID10/RAID5/RAID6 with the number of devices on which the
+stripes are allocated, multiple occurrences of the same profile can
+appear in case a new device has been added and all new available
+stripes have been used for writes
+.IP \(bu 2
+\fIUnallocated\fP \-\- remaining space that the filesystem can still use
+for new block groups
+.UNINDENT
+.sp
+\fBOptions\fP
+.INDENT 7.0
+.TP
+.B \-b|\-\-raw
+raw numbers in bytes, without the \fIB\fP suffix
+.TP
+.B \-h|\-\-human\-readable
+print human friendly numbers, base 1024, this is the default
+.UNINDENT
+.INDENT 7.0
+.TP
+.B \-H
+print human friendly numbers, base 1000
+.TP
+.B \-\-iec
+select the 1024 base for the following options, according to the IEC standard
+.TP
+.B \-\-si
+select the 1000 base for the following options, according to the SI standard
+.UNINDENT
+.INDENT 7.0
+.TP
+.B \-k|\-\-kbytes
+show sizes in KiB, or kB with \-\-si
+.TP
+.B \-m|\-\-mbytes
+show sizes in MiB, or MB with \-\-si
+.TP
+.B \-g|\-\-gbytes
+show sizes in GiB, or GB with \-\-si
+.TP
+.B \-t|\-\-tbytes
+show sizes in TiB, or TB with \-\-si
+.UNINDENT
+.sp
+If conflicting options are passed, the last one takes precedence.
+.UNINDENT
+.SH DEVICE STATS
+.sp
+The device stats keep persistent record of several error classes related to
+doing IO. The current values are printed at mount time and updated during
+filesystem lifetime or from a scrub run.
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+$ btrfs device stats /dev/sda3
+[/dev/sda3].write_io_errs 0
+[/dev/sda3].read_io_errs 0
+[/dev/sda3].flush_io_errs 0
+[/dev/sda3].corruption_errs 0
+[/dev/sda3].generation_errs 0
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B write_io_errs
+Failed writes to the block devices, means that the layers beneath the
+filesystem were not able to satisfy the write request.
+.TP
+.B read_io_errors
+Read request analogy to write_io_errs.
+.TP
+.B flush_io_errs
+Number of failed writes with the \fIFLUSH\fP flag set. The flushing is a method of
+forcing a particular order between write requests and is crucial for
+implementing crash consistency. In case of btrfs, all the metadata blocks must
+be permanently stored on the block device before the superblock is written.
+.TP
+.B corruption_errs
+A block checksum mismatched or a corrupted metadata header was found.
+.TP
+.B generation_errs
+The block generation does not match the expected value (e.g. stored in the
+parent node).
+.UNINDENT
+.sp
+Since kernel 5.14 the device stats are also available in textual form in
+\fB/sys/fs/btrfs/FSID/devinfo/DEVID/error_stats\fP\&.
+.SH EXIT STATUS
+.sp
+\fBbtrfs device\fP returns a zero exit status if it succeeds. Non zero is
+returned in case of failure.
+.sp
+If the \fI\-c\fP option is used, \fIbtrfs device stats\fP will add 64 to the
+exit status if any of the error counters is non\-zero.
+.SH AVAILABILITY
+.sp
+\fBbtrfs\fP is part of btrfs\-progs. Please refer to the documentation at
+\fI\%https://btrfs.readthedocs.io\fP\&.
+.SH SEE ALSO
+.sp
+\fI\%btrfs\-balance(8)\fP
+\fI\%btrfs\-device(8)\fP,
+\fI\%btrfs\-replace(8)\fP,
+\fI\%mkfs.btrfs(8)\fP
+.\" Generated by docutils manpage writer.
+.