2014-04-02 08:29:13 +00:00
|
|
|
btrfs-subvolume(8)
|
|
|
|
==================
|
|
|
|
|
|
|
|
NAME
|
|
|
|
----
|
2016-07-12 15:47:23 +00:00
|
|
|
btrfs-subvolume - manage btrfs subvolumes
|
2014-04-02 08:29:13 +00:00
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
--------
|
2014-05-19 15:49:35 +00:00
|
|
|
*btrfs subvolume* <subcommand> [<args>]
|
2014-04-02 08:29:13 +00:00
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
-----------
|
2016-07-12 15:47:23 +00:00
|
|
|
*btrfs subvolume* is used to create/delete/list/show btrfs subvolumes and
|
|
|
|
snapshots.
|
2014-04-02 08:29:13 +00:00
|
|
|
|
|
|
|
SUBVOLUME AND SNAPSHOT
|
|
|
|
----------------------
|
|
|
|
|
2017-12-07 20:26:09 +00:00
|
|
|
A subvolume is a part of filesystem with its own independent
|
2016-07-12 15:47:23 +00:00
|
|
|
file/directory hierarchy. Subvolumes can share file extents. A snapshot is
|
|
|
|
also subvolume, but with a given initial content of the original subvolume.
|
2014-04-02 08:29:13 +00:00
|
|
|
|
2016-07-12 15:47:23 +00:00
|
|
|
NOTE: A subvolume in btrfs is not like an LVM logical volume, which is
|
|
|
|
block-level snapshot while btrfs subvolumes are file extent-based.
|
2014-04-02 08:29:13 +00:00
|
|
|
|
2016-07-12 15:47:23 +00:00
|
|
|
A subvolume looks like a normal directory, with some additional operations
|
|
|
|
described below. Subvolumes can be renamed or moved, nesting subvolumes is not
|
|
|
|
restricted but has some implications regarding snapshotting.
|
2014-04-02 08:29:13 +00:00
|
|
|
|
2016-07-12 15:47:23 +00:00
|
|
|
A subvolume in btrfs can be accessed in two ways:
|
2014-04-02 08:29:13 +00:00
|
|
|
|
2016-07-12 15:47:23 +00:00
|
|
|
* like any other directory that is accessible to the user
|
|
|
|
* like a separately mounted filesystem (options 'subvol' or 'subvolid')
|
2014-04-02 08:29:13 +00:00
|
|
|
|
2016-07-12 15:47:23 +00:00
|
|
|
In the latter case the parent directory is not visible and accessible. This is
|
|
|
|
similar to a bind mount, and in fact the subvolume mount does exactly that.
|
|
|
|
|
|
|
|
A freshly created filesystem is also a subvolume, called 'top-level',
|
|
|
|
internally has an id 5. This subvolume cannot be removed or replaced by another
|
|
|
|
subvolume. This is also the subvolume that will be mounted by default, unless
|
|
|
|
the default subvolume has been changed (see subcommand 'set-default').
|
|
|
|
|
|
|
|
A snapshot is a subvolume like any other, with given initial content. By
|
|
|
|
default, snapshots are created read-write. File modifications in a snapshot
|
|
|
|
do not affect the files in the original subvolume.
|
2014-04-02 08:29:13 +00:00
|
|
|
|
|
|
|
SUBCOMMAND
|
|
|
|
-----------
|
2016-09-17 08:34:38 +00:00
|
|
|
*create* [-i <qgroupid>] [<dest>/]<name>::
|
2014-04-02 08:29:13 +00:00
|
|
|
Create a subvolume <name> in <dest>.
|
|
|
|
+
|
2016-05-19 14:17:24 +00:00
|
|
|
If <dest> is not given, subvolume <name> will be created in the current
|
2014-04-02 08:29:13 +00:00
|
|
|
directory.
|
|
|
|
+
|
|
|
|
`Options`
|
|
|
|
+
|
|
|
|
-i <qgroupid>::::
|
|
|
|
Add the newly created subvolume to a qgroup. This option can be given multiple
|
|
|
|
times.
|
|
|
|
|
2014-05-19 15:49:35 +00:00
|
|
|
*delete* [options] <subvolume> [<subvolume>...]::
|
2014-04-02 08:29:13 +00:00
|
|
|
Delete the subvolume(s) from the filesystem.
|
|
|
|
+
|
|
|
|
If <subvolume> is not a subvolume, btrfs returns an error but continues if
|
|
|
|
there are more arguments to process.
|
|
|
|
+
|
|
|
|
The corresponding directory is removed instantly but the data blocks are
|
2017-12-07 20:26:09 +00:00
|
|
|
removed later in the background. The command returns immediately. See `btrfs
|
2017-07-19 19:01:30 +00:00
|
|
|
subvolume sync` how to wait until the subvolume gets completely removed.
|
|
|
|
+
|
|
|
|
The deletion does not involve full transaction commit by default due to
|
|
|
|
performance reasons. As a consequence, the subvolume may appear again after a
|
|
|
|
crash. Use one of the '--commit' options to wait until the operation is
|
|
|
|
safely stored on the device.
|
2014-04-02 08:29:13 +00:00
|
|
|
+
|
|
|
|
`Options`
|
|
|
|
+
|
|
|
|
-c|--commit-after::::
|
|
|
|
wait for transaction commit at the end of the operation
|
|
|
|
+
|
|
|
|
-C|--commit-each::::
|
2016-03-14 13:10:16 +00:00
|
|
|
wait for transaction commit after deleting each subvolume
|
2014-04-02 08:29:13 +00:00
|
|
|
|
2015-01-03 01:27:41 +00:00
|
|
|
*find-new* <subvolume> <last_gen>::
|
|
|
|
List the recently modified files in a subvolume, after <last_gen> ID.
|
|
|
|
|
|
|
|
*get-default* <path>::
|
|
|
|
Get the default subvolume of the filesystem <path>.
|
|
|
|
+
|
|
|
|
The output format is similar to *subvolume list* command.
|
|
|
|
|
2014-05-19 15:49:35 +00:00
|
|
|
*list* [options] [-G [\+|-]<value>] [-C [+|-]<value>] [--sort=rootid,gen,ogen,path] <path>::
|
2014-04-02 08:29:13 +00:00
|
|
|
List the subvolumes present in the filesystem <path>.
|
|
|
|
+
|
|
|
|
For every subvolume the following information is shown by default. +
|
|
|
|
ID <ID> top level <ID> path <path> +
|
|
|
|
where path is the relative path of the subvolume to the top level subvolume.
|
|
|
|
The subvolume's ID may be used by the subvolume set-default command,
|
|
|
|
or at mount time via the subvolid= option.
|
|
|
|
If `-p` is given, then parent <ID> is added to the output between ID
|
|
|
|
and top level. The parent's ID may be used at mount time via the
|
|
|
|
`subvolrootid=` option.
|
|
|
|
+
|
|
|
|
`Options`
|
|
|
|
+
|
|
|
|
-p::::
|
|
|
|
print parent ID.
|
|
|
|
-a::::
|
|
|
|
print all the subvolumes in the filesystem and distinguish between
|
|
|
|
absolute and relative path with respect to the given <path>.
|
|
|
|
-c::::
|
|
|
|
print the ogeneration of the subvolume, aliases: ogen or origin generation.
|
|
|
|
-g::::
|
|
|
|
print the generation of the subvolume.
|
|
|
|
-o::::
|
2014-04-16 17:34:50 +00:00
|
|
|
print only subvolumes below specified <path>.
|
2014-04-02 08:29:13 +00:00
|
|
|
-u::::
|
|
|
|
print the UUID of the subvolume.
|
|
|
|
-q::::
|
|
|
|
print the parent uuid of subvolumes (and snapshots).
|
2014-08-13 21:18:17 +00:00
|
|
|
-R::::
|
|
|
|
print the UUID of the sent subvolume, where the subvolume is the result of a receive operation
|
2014-04-02 08:29:13 +00:00
|
|
|
-t::::
|
|
|
|
print the result as a table.
|
|
|
|
-s::::
|
|
|
|
only snapshot subvolumes in the filesystem will be listed.
|
|
|
|
-r::::
|
|
|
|
only readonly subvolumes in the filesystem will be listed.
|
2014-05-19 15:08:56 +00:00
|
|
|
-G [+|-]<value>::::
|
2014-04-02 08:29:13 +00:00
|
|
|
list subvolumes in the filesystem that its generation is
|
|
|
|
>=, \<= or = value. \'\+' means >= value, \'-' means \<= value, If there is
|
|
|
|
neither \'+' nor \'-', it means = value.
|
2014-05-19 15:08:56 +00:00
|
|
|
-C [+|-]<value>::::
|
2014-04-02 08:29:13 +00:00
|
|
|
list subvolumes in the filesystem that its ogeneration is
|
2016-09-17 08:34:38 +00:00
|
|
|
>=, \<= or = value. The usage is the same to '-G' option.
|
2014-04-02 08:29:13 +00:00
|
|
|
--sort=rootid,gen,ogen,path::::
|
|
|
|
list subvolumes in order by specified items.
|
|
|
|
you can add \'\+' or \'-' in front of each items, \'+' means ascending,
|
|
|
|
\'-' means descending. The default is ascending.
|
|
|
|
+
|
|
|
|
for --sort you can combine some items together by \',', just like
|
2016-09-17 08:34:38 +00:00
|
|
|
--sort=+ogen,-gen,path,rootid.
|
2014-04-02 08:29:13 +00:00
|
|
|
|
2017-10-06 01:05:08 +00:00
|
|
|
*set-default* [<subvolume>|<id> <path>]::
|
2017-12-07 20:26:09 +00:00
|
|
|
Set the default subvolume for the (mounted) filesystem.
|
|
|
|
|
|
|
|
Set the default subvolume for the (mounted) filesystem at <path>. This will hide
|
|
|
|
the top-level subvolume (ie. the one mounted with 'subvol=/' or 'subvolid=5').
|
|
|
|
Takes action on next mount.
|
2014-04-02 08:29:13 +00:00
|
|
|
+
|
2017-10-06 01:05:08 +00:00
|
|
|
There are two ways how to specify the subvolume, by <id> or by the <subvolume>
|
|
|
|
path.
|
|
|
|
The id can be obtained from *btrfs subvolume list*, *btrfs subvolume show* or
|
|
|
|
*btrfs inspect-internal rootid*.
|
2014-04-02 08:29:13 +00:00
|
|
|
|
2014-05-19 15:49:35 +00:00
|
|
|
*show* <path>::
|
2014-04-02 08:29:13 +00:00
|
|
|
Show information of a given subvolume in the <path>.
|
|
|
|
|
2015-01-03 01:27:41 +00:00
|
|
|
*snapshot* [-r] <source> <dest>|[<dest>/]<name>::
|
2017-11-26 05:51:43 +00:00
|
|
|
Create a snapshot of the subvolume <source> with the
|
2015-01-03 01:27:41 +00:00
|
|
|
name <name> in the <dest> directory.
|
|
|
|
+
|
|
|
|
If only <dest> is given, the subvolume will be named the basename of <source>.
|
|
|
|
If <source> is not a subvolume, btrfs returns an error.
|
2017-11-26 05:51:43 +00:00
|
|
|
+
|
|
|
|
`Options`
|
|
|
|
+
|
|
|
|
-r::::
|
|
|
|
Make the new snapshot read only.
|
2015-01-03 01:27:41 +00:00
|
|
|
|
2014-07-23 20:56:13 +00:00
|
|
|
*sync* <path> [subvolid...]::
|
2017-12-07 20:26:09 +00:00
|
|
|
Wait until given subvolume(s) are completely removed from the filesystem after
|
|
|
|
deletion. If no subvolume id is given, wait until all current deletion requests
|
|
|
|
are completed, but do not wait for subvolumes deleted in the meantime.
|
2014-07-23 20:56:13 +00:00
|
|
|
+
|
|
|
|
`Options`
|
|
|
|
+
|
|
|
|
-s <N>::::
|
|
|
|
sleep N seconds between checks (default: 1)
|
|
|
|
|
2014-04-02 08:29:13 +00:00
|
|
|
EXIT STATUS
|
|
|
|
-----------
|
2014-11-30 13:42:46 +00:00
|
|
|
*btrfs subvolume* returns a zero exit status if it succeeds. A non-zero value is
|
2014-04-02 08:29:13 +00:00
|
|
|
returned in case of failure.
|
|
|
|
|
|
|
|
AVAILABILITY
|
|
|
|
------------
|
2014-05-19 16:04:26 +00:00
|
|
|
*btrfs* is part of btrfs-progs.
|
2014-04-02 08:29:13 +00:00
|
|
|
Please refer to the btrfs wiki http://btrfs.wiki.kernel.org for
|
|
|
|
further details.
|
|
|
|
|
|
|
|
SEE ALSO
|
|
|
|
--------
|
|
|
|
`mkfs.btrfs`(8),
|
2016-07-12 15:47:23 +00:00
|
|
|
`mount`(8),
|
2014-04-02 08:29:13 +00:00
|
|
|
`btrfs-quota`(8),
|
|
|
|
`btrfs-qgroup`(8),
|