mirror of
https://github.com/kdave/btrfs-progs
synced 2025-01-13 17:21:05 +00:00
0ee5b22345
First, add a --proto option to allow specifying the desired send protocol version. It defaults to one, the original version. In a couple of releases once people are aware that protocol revisions are happening, we can change it to default to zero, which means the latest version supported by the kernel. This is based on Dave Sterba's patch. Also add a --compressed-data flag to instruct the kernel to use encoded_write commands for compressed extents. This requires an explicit opt in separate from the protocol version because: 1. The user may not want compression on the receiving side, or may want a different compression algorithm/level on the receiving side. 2. It has a soft requirement for kernel support on the receiving side (btrfs-progs can fall back to decompressing and writing if the kernel doesn't support BTRFS_IOC_ENCODED_WRITE, but the user may not be prepared to pay that CPU cost). Going forward, since it's easier to update progs than the kernel, I think we'll want to make new send features that require kernel support opt-in, whereas anything that only requires a progs update can happen automatically. Signed-off-by: Boris Burkov <boris@bur.io> Signed-off-by: Omar Sandoval <osandov@fb.com> Signed-off-by: David Sterba <dsterba@suse.com>
118 lines
3.7 KiB
ReStructuredText
118 lines
3.7 KiB
ReStructuredText
btrfs-send(8)
|
|
=============
|
|
|
|
SYNOPSIS
|
|
--------
|
|
|
|
**btrfs send** [-ve] [-p <parent>] [-c <clone-src>] [-f <outfile>] <subvol> [<subvol>...]
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
|
|
This command will generate a stream of instructions that describe changes
|
|
between two subvolume snapshots. The stream can be consumed by the **btrfs
|
|
receive** command to replicate the sent snapshot on a different filesystem.
|
|
The command operates in two modes: full and incremental.
|
|
|
|
All snapshots involved in one send command must be read-only, and this status
|
|
cannot be changed as long as there's a running send operation that uses the
|
|
snapshot.
|
|
|
|
In the full mode, the entire snapshot data and metadata will end up in the
|
|
stream.
|
|
|
|
In the incremental mode (options *-p* and *-c*), previously sent snapshots that
|
|
are available on both the sending and receiving side can be used to reduce the
|
|
amount of information that has to be sent to reconstruct the sent snapshot on a
|
|
different filesystem.
|
|
|
|
The *-p <parent>* option can be omitted when *-c <clone-src>* options are
|
|
given, in which case **btrfs send** will determine a suitable parent from among
|
|
the clone sources.
|
|
|
|
You must not specify clone sources unless you guarantee that these snapshots
|
|
are exactly in the same state on both sides--both for the sender and the
|
|
receiver. For implications of changed read-write status of a received snapshot
|
|
please see section *SUBVOLUME FLAGS* in ``btrfs-subvolume(8)``.
|
|
|
|
``Options``
|
|
|
|
-e
|
|
if sending multiple subvolumes at once, use the new format and omit the
|
|
'end cmd' marker in the stream separating the subvolumes
|
|
|
|
-p <parent>
|
|
send an incremental stream from *parent* to *subvol*
|
|
|
|
-c <clone-src>
|
|
use this snapshot as a clone source for an incremental send (multiple
|
|
allowed)
|
|
|
|
-f <outfile>
|
|
output is normally written to standard output so it can be, for
|
|
example, piped to btrfs receive. Use this option to write it to a file
|
|
instead.
|
|
|
|
--no-data::
|
|
send in *NO_FILE_DATA* mode
|
|
|
|
The output stream does not contain any file data and thus cannot be
|
|
used to transfer changes. This mode is faster and is useful to show the
|
|
differences in metadata.
|
|
|
|
--proto <N>
|
|
use send protocol version N
|
|
|
|
The default is 1, which was the original protocol version. Version 2
|
|
encodes file data slightly more efficiently; it is also required for
|
|
sending compressed data directly (see *--compressed-data*). Version 2
|
|
requires at least btrfs-progs 5.18 on both the sender and receiver and
|
|
at least Linux 5.18 on the sender. Passing 0 means to use the highest
|
|
version supported by the running kernel.
|
|
|
|
--compressed-data
|
|
send data that is compressed on the filesystem directly without
|
|
decompressing it
|
|
|
|
If the receiver supports the *BTRFS_IOC_ENCODED_WRITE* ioctl (added in
|
|
Linux 5.18), it can also write it directly without decompressing it.
|
|
Otherwise, the receiver will fall back to decompressing it and writing
|
|
it normally.
|
|
|
|
This requires protocol version 2 or higher. If *--proto* was not used,
|
|
then *--compressed-data* implies *--proto 2*.
|
|
|
|
-q|--quiet
|
|
(deprecated) alias for global *-q* option
|
|
|
|
-v|--verbose
|
|
(deprecated) alias for global *-v* option
|
|
|
|
``Global options``
|
|
|
|
-q|--quiet
|
|
suppress all messages except errors
|
|
|
|
-v|--verbose
|
|
increase output verbosity, print generated commands in a readable form
|
|
|
|
EXIT STATUS
|
|
-----------
|
|
|
|
**btrfs send** 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 btrfs wiki http://btrfs.wiki.kernel.org for
|
|
further details.
|
|
|
|
SEE ALSO
|
|
--------
|
|
|
|
``mkfs.btrfs(8)``,
|
|
``btrfs-receive(8)``,
|
|
``btrfs-subvolume(8)``
|