ZFS-SEND(8) | System Manager's Manual | ZFS-SEND(8) |
zfs-send
—
generate backup stream of ZFS dataset
zfs |
send [-DLPVbcehnpsvw ]
[-R [-X
dataset[,dataset]…]]
[[-I |-i ]
snapshot] snapshot |
zfs |
send [-DLPVcensvw ]
[-i
snapshot|bookmark]
filesystem|volume|snapshot |
zfs |
send --redact
redaction_bookmark
[-DLPVcenpv ] [-i
snapshot|bookmark]
snapshot |
zfs |
send [-PVenv ]
-t receive_resume_token |
zfs |
send [-PVnv ]
-S filesystem |
zfs |
redact snapshot
redaction_bookmark
redaction_snapshot… |
zfs
send
[-DLPVbcehnpsvw
] [-R
[-X
dataset[,dataset]…]]
[[-I
|-i
]
snapshot] snapshot-D
,
--dedup
-I
snapshot-I
@a fs@d
is similar to -i
@a
fs@b;
-i
@b
fs@c;
-i
@c
fs@d. The incremental source may be specified as
with the -i
option.-L
,
--large-block
-P
,
--parsable
-R
,
--replicate
If the -i
or
-I
flags are used in conjunction with the
-R
flag, an incremental replication stream
is generated. The current values of properties, and current snapshot
and file system names are set when the stream is received. If the
-F
flag is specified when this stream is
received, snapshots and file systems that do not exist on the
sending side are destroyed. If the -R
flag
is used to send encrypted datasets, then -w
must also be specified.
-V
,
--proctitle
-X
,
--exclude
dataset[,dataset]…-R
, -X
specifies
a set of datasets (and, hence, their descendants), to be excluded from
the send stream. The root dataset may not be excluded.
-X
a
-X
b is equivalent to
-X
a,b.-e
,
--embed
-b
,
--backup
zfs
receive
to restore received properties backed
up on the sent dataset and to avoid sending local settings that may
have nothing to do with the source dataset, but only with how the data
is backed up.-c
,
--compressed
-L
option is not
supplied in conjunction with -c
, then the data
will be decompressed before sending so it can be split into smaller
block sizes. Streams sent with -c
will not
have their data recompressed on the receiver side using
-o
compress=
value. The data will stay compressed as it was
from the sender. The new compression property will be set for future
data. Note that uncompressed data from the sender will still attempt
to compress on the receiver, unless you specify
-o
compress=
off.-w
,
--raw
-Lec
. Note that if you do not use this flag
for sending encrypted datasets, data will be sent unencrypted and may
be re-encrypted with a different encryption key on the receiving
system, which will disable the ability to do a raw send to that system
for incrementals.-h
,
--holds
zfs
hold
command), and indicating to zfs
receive
that the holds be applied to the
dataset on the receiving system.-i
snapshotIf the destination is a clone, the source may be the origin snapshot, which must be fully specified (for example, pool/fs@origin, not just @origin).
-n
,
--dryrun
-v
or -P
flags to
determine what data will be sent. In this case, the verbose output
will be written to standard output (contrast with a non-dry-run, where
the stream is written to standard output and the verbose output goes
to standard error).-p
,
--props
-R
is specified. The receiving system
must also support this feature. Sends of encrypted datasets must use
-w
when using this flag.-s
,
--skip-missing
-R
.-v
,
--verbose
SIGINFO
or SIGUSR1
,
regardless of -v
.
The format of the stream is committed. You will be able to receive your streams on future versions of ZFS.
zfs
send
[-DLPVcenvw
] [-i
snapshot|bookmark]
filesystem|volume|snapshot-D
,
--dedup
-L
,
--large-block
-P
,
--parsable
-c
,
--compressed
-L
option is not
supplied in conjunction with -c
, then the data
will be decompressed before sending so it can be split into smaller
block sizes.-w
,
--raw
-Lec
. Note that if you do not use this flag
for sending encrypted datasets, data will be sent unencrypted and may
be re-encrypted with a different encryption key on the receiving
system, which will disable the ability to do a raw send to that system
for incrementals.-e
,
--embed
-i
snapshot|bookmarkIf the incremental target is a clone, the incremental source can be the origin snapshot, or an earlier snapshot in the origin's filesystem, or the origin's origin, etc.
-n
,
--dryrun
-v
or -P
flags to
determine what data will be sent. In this case, the verbose output
will be written to standard output (contrast with a non-dry-run, where
the stream is written to standard output and the verbose output goes
to standard error).-v
,
--verbose
SIGINFO
or SIGUSR1
,
regardless of -v
.zfs
send
--redact
redaction_bookmark
[-DLPVcenpv
] [-i
snapshot|bookmark]
snapshot--redact
(or -d
) flag. The
resulting send stream is said to be redacted with respect to the snapshots
the bookmark specified by the --redact
flag was created with. The bookmark must have been
created by running zfs
redact
on the snapshot being sent.
This feature can be used to allow clones of a filesystem to be made available on a remote system, in the case where their parent need not (or needs to not) be usable. For example, if a filesystem contains sensitive data, and it has clones where that sensitive data has been secured or replaced with dummy data, redacted sends can be used to replicate the secured data without replicating the original sensitive data, while still sharing all possible blocks. A snapshot that has been redacted with respect to a set of snapshots will contain all blocks referenced by at least one snapshot in the set, but will contain none of the blocks referenced by none of the snapshots in the set. In other words, if all snapshots in the set have modified a given block in the parent, that block will not be sent; but if one or more snapshots have not modified a block in the parent, they will still reference the parent's block, so that block will be sent. Note that only user data will be redacted.
When the redacted send stream is received, we will generate a redacted snapshot. Due to the nature of redaction, a redacted dataset can only be used in the following ways:
These restrictions are detected and enforced by
zfs
receive
; a redacted
send stream will contain the list of snapshots that the stream is
redacted with respect to. These are stored with the redacted snapshot,
and are used to detect and correctly handle the cases above. Note that
for technical reasons, raw sends and redacted sends cannot be combined
at this time.
zfs
send
[-PVenv
] -t
receive_resume_tokenzfs
receive
-s
for more
details.zfs
send
[-PVnv
] [-i
snapshot|bookmark]
-S
filesystem-S
,
--saved
zfs
redact
snapshot redaction_bookmark
redaction_snapshot…zfs
send
for
more information on the purpose of this operation. If a redact operation
fails partway through (due to an error or a system failure), the redaction
can be resumed by rerunning the same command.ZFS has support for a limited version of data subsetting, in the
form of redaction. Using the zfs
redact
command, a
redaction
bookmark can be created that stores a list of blocks containing
sensitive information. When provided to zfs
send
, this causes a redacted send
to occur. Redacted sends omit the blocks containing sensitive information,
replacing them with REDACT records. When these send streams are received, a
redacted dataset is created. A redacted dataset cannot be
mounted by default, since it is incomplete. It can be used to receive other
send streams. In this way datasets can be used for data backup and
replication, with all the benefits that zfs send and receive have to offer,
while protecting sensitive information from being stored on less-trusted
machines or services.
For the purposes of redaction, there are two steps to the process.
A redact step, and a send/receive step. First, a redaction bookmark is
created. This is done by providing the zfs
redact
command with a parent snapshot, a bookmark to
be created, and a number of redaction snapshots. These redaction snapshots
must be descendants of the parent snapshot, and they should modify data that
is considered sensitive in some way. Any blocks of data modified by all of
the redaction snapshots will be listed in the redaction bookmark, because it
represents the truly sensitive information. When it comes to the send step,
the send process will not send the blocks listed in the redaction bookmark,
instead replacing them with REDACT records. When received on the target
system, this will create a redacted dataset, missing the data that
corresponds to the blocks in the redaction bookmark on the sending system.
The incremental send streams from the original parent to the redaction
snapshots can then also be received on the target system, and this will
produce a complete snapshot that can be used normally. Incrementals from one
snapshot on the parent filesystem and another can also be done by sending
from the redaction bookmark, rather than the snapshots themselves.
In order to make the purpose of the feature more clear, an example is provided. Consider a zfs filesystem containing four files. These files represent information for an online shopping service. One file contains a list of usernames and passwords, another contains purchase histories, a third contains click tracking data, and a fourth contains user preferences. The owner of this data wants to make it available for their development teams to test against, and their market research teams to do analysis on. The development teams need information about user preferences and the click tracking data, while the market research teams need information about purchase histories and user preferences. Neither needs access to the usernames and passwords. However, because all of this data is stored in one ZFS filesystem, it must all be sent and received together. In addition, the owner of the data wants to take advantage of features like compression, checksumming, and snapshots, so they do want to continue to use ZFS to store and transmit their data. Redaction can help them do so. First, they would make two clones of a snapshot of the data on the source. In one clone, they create the setup they want their market research team to see; they delete the usernames and passwords file, and overwrite the click tracking data with dummy information. In another, they create the setup they want the development teams to see, by replacing the passwords with fake information and replacing the purchase histories with randomly generated ones. They would then create a redaction bookmark on the parent snapshot, using snapshots on the two clones as redaction snapshots. The parent can then be sent, redacted, to the target server where the research and development teams have access. Finally, incremental sends from the parent snapshot to each of the clones can be sent to and received on the target server; these snapshots are identical to the ones on the source, and are ready to be used, while the parent snapshot on the target contains none of the username and password data present on the source, because it was removed by the redacted send operation.
See -v
.
The following commands send a full stream and then an incremental stream to a remote machine, restoring them into poolB/received/fs@a and poolB/received/fs@b, respectively. poolB must contain the file system poolB/received, and must not initially contain poolB/received/fs.
#zfs
send
pool/fs@a |ssh
hostzfs
receive
poolB/received/fs@a #zfs
send
-i
a pool/fs@b |ssh
hostzfs
receive
poolB/received/fs
zfs
receive
-d
OptionThe following command sends a full stream of poolA/fsA/fsB@snap to a remote machine, receiving it into poolB/received/fsA/fsB@snap. The fsA/fsB@snap portion of the received snapshot's name is determined from the name of the sent snapshot. poolB must contain the file system poolB/received. If poolB/received/fsA does not exist, it is created as an empty file system.
#zfs
send
poolA/fsA/fsB@snap |ssh
hostzfs
receive
-d
poolB/received
zfs-bookmark(8), zfs-receive(8), zfs-redact(8), zfs-snapshot(8)
July 27, 2023 | OpenZFS |