xref: /freebsd/sys/contrib/openzfs/man/man8/zfs-send.8 (revision c07d6445eb89d9dd3950361b065b7bd110e3a043)
1.\"
2.\" CDDL HEADER START
3.\"
4.\" The contents of this file are subject to the terms of the
5.\" Common Development and Distribution License (the "License").
6.\" You may not use this file except in compliance with the License.
7.\"
8.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9.\" or https://opensource.org/licenses/CDDL-1.0.
10.\" See the License for the specific language governing permissions
11.\" and limitations under the License.
12.\"
13.\" When distributing Covered Code, include this CDDL HEADER in each
14.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15.\" If applicable, add the following below this CDDL HEADER, with the
16.\" fields enclosed by brackets "[]" replaced with your own identifying
17.\" information: Portions Copyright [yyyy] [name of copyright owner]
18.\"
19.\" CDDL HEADER END
20.\"
21.\" Copyright (c) 2009 Sun Microsystems, Inc. All Rights Reserved.
22.\" Copyright 2011 Joshua M. Clulow <josh@sysmgr.org>
23.\" Copyright (c) 2011, 2019 by Delphix. All rights reserved.
24.\" Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
25.\" Copyright (c) 2014, Joyent, Inc. All rights reserved.
26.\" Copyright (c) 2014 by Adam Stevko. All rights reserved.
27.\" Copyright (c) 2014 Integros [integros.com]
28.\" Copyright 2019 Richard Laager. All rights reserved.
29.\" Copyright 2018 Nexenta Systems, Inc.
30.\" Copyright 2019 Joyent, Inc.
31.\"
32.Dd March 16, 2022
33.Dt ZFS-SEND 8
34.Os
35.
36.Sh NAME
37.Nm zfs-send
38.Nd generate backup stream of ZFS dataset
39.Sh SYNOPSIS
40.Nm zfs
41.Cm send
42.Op Fl DLPbcehnpsvw
43.Op Fl R Op Fl X Ar dataset Ns Oo , Ns Ar dataset Oc Ns …
44.Op Oo Fl I Ns | Ns Fl i Oc Ar snapshot
45.Ar snapshot
46.Nm zfs
47.Cm send
48.Op Fl DLPcensvw
49.Op Fl i Ar snapshot Ns | Ns Ar bookmark
50.Ar filesystem Ns | Ns Ar volume Ns | Ns Ar snapshot
51.Nm zfs
52.Cm send
53.Fl -redact Ar redaction_bookmark
54.Op Fl DLPcenpv
55.Op Fl i Ar snapshot Ns | Ns Ar bookmark
56.Ar snapshot
57.Nm zfs
58.Cm send
59.Op Fl Penv
60.Fl t
61.Ar receive_resume_token
62.Nm zfs
63.Cm send
64.Op Fl Pnv
65.Fl S Ar filesystem
66.Nm zfs
67.Cm redact
68.Ar snapshot redaction_bookmark
69.Ar redaction_snapshot Ns …
70.
71.Sh DESCRIPTION
72.Bl -tag -width ""
73.It Xo
74.Nm zfs
75.Cm send
76.Op Fl DLPbcehnpsvw
77.Op Fl R Op Fl X Ar dataset Ns Oo , Ns Ar dataset Oc Ns …
78.Op Oo Fl I Ns | Ns Fl i Oc Ar snapshot
79.Ar snapshot
80.Xc
81Creates a stream representation of the second
82.Ar snapshot ,
83which is written to standard output.
84The output can be redirected to a file or to a different system
85.Po for example, using
86.Xr ssh 1
87.Pc .
88By default, a full stream is generated.
89.Bl -tag -width "-D"
90.It Fl D , -dedup
91Deduplicated send is no longer supported.
92This flag is accepted for backwards compatibility, but a regular,
93non-deduplicated stream will be generated.
94.It Fl I Ar snapshot
95Generate a stream package that sends all intermediary snapshots from the first
96snapshot to the second snapshot.
97For example,
98.Fl I Em @a Em fs@d
99is similar to
100.Fl i Em @a Em fs@b Ns \&; Fl i Em @b Em fs@c Ns \&; Fl i Em @c Em fs@d .
101The incremental source may be specified as with the
102.Fl i
103option.
104.It Fl L , -large-block
105Generate a stream which may contain blocks larger than 128 KiB.
106This flag has no effect if the
107.Sy large_blocks
108pool feature is disabled, or if the
109.Sy recordsize
110property of this filesystem has never been set above 128 KiB.
111The receiving system must have the
112.Sy large_blocks
113pool feature enabled as well.
114See
115.Xr zpool-features 7
116for details on ZFS feature flags and the
117.Sy large_blocks
118feature.
119.It Fl P , -parsable
120Print machine-parsable verbose information about the stream package generated.
121.It Fl R , -replicate
122Generate a replication stream package, which will replicate the specified
123file system, and all descendent file systems, up to the named snapshot.
124When received, all properties, snapshots, descendent file systems, and clones
125are preserved.
126.Pp
127If the
128.Fl i
129or
130.Fl I
131flags are used in conjunction with the
132.Fl R
133flag, an incremental replication stream is generated.
134The current values of properties, and current snapshot and file system names are
135set when the stream is received.
136If the
137.Fl F
138flag is specified when this stream is received, snapshots and file systems that
139do not exist on the sending side are destroyed.
140If the
141.Fl R
142flag is used to send encrypted datasets, then
143.Fl w
144must also be specified.
145.It Fl X , -exclude Ar dataset Ns Oo , Ns Ar dataset Oc Ns …
146With
147.Fl R ,
148.Fl X
149specifies a set of datasets (and, hence, their descendants),
150to be excluded from the send stream.
151The root dataset may not be excluded.
152.Fl X Ar a Fl X Ar b
153is equivalent to
154.Fl X Ar a , Ns Ar b .
155.It Fl e , -embed
156Generate a more compact stream by using
157.Sy WRITE_EMBEDDED
158records for blocks which are stored more compactly on disk by the
159.Sy embedded_data
160pool feature.
161This flag has no effect if the
162.Sy embedded_data
163feature is disabled.
164The receiving system must have the
165.Sy embedded_data
166feature enabled.
167If the
168.Sy lz4_compress
169feature is active on the sending system, then the receiving system must have
170that feature enabled as well.
171Datasets that are sent with this flag may not be
172received as an encrypted dataset, since encrypted datasets cannot use the
173.Sy embedded_data
174feature.
175See
176.Xr zpool-features 7
177for details on ZFS feature flags and the
178.Sy embedded_data
179feature.
180.It Fl b , -backup
181Sends only received property values whether or not they are overridden by local
182settings, but only if the dataset has ever been received.
183Use this option when you want
184.Nm zfs Cm receive
185to restore received properties backed up on the sent dataset and to avoid
186sending local settings that may have nothing to do with the source dataset,
187but only with how the data is backed up.
188.It Fl c , -compressed
189Generate a more compact stream by using compressed WRITE records for blocks
190which are compressed on disk and in memory
191.Po see the
192.Sy compression
193property for details
194.Pc .
195If the
196.Sy lz4_compress
197feature is active on the sending system, then the receiving system must have
198that feature enabled as well.
199If the
200.Sy large_blocks
201feature is enabled on the sending system but the
202.Fl L
203option is not supplied in conjunction with
204.Fl c ,
205then the data will be decompressed before sending so it can be split into
206smaller block sizes.
207Streams sent with
208.Fl c
209will not have their data recompressed on the receiver side using
210.Fl o Sy compress Ns = Ar value .
211The data will stay compressed as it was from the sender.
212The new compression property will be set for future data.
213Note that uncompressed data from the sender will still attempt to
214compress on the receiver, unless you specify
215.Fl o Sy compress Ns = Em off .
216.It Fl w , -raw
217For encrypted datasets, send data exactly as it exists on disk.
218This allows backups to be taken even if encryption keys are not currently
219loaded.
220The backup may then be received on an untrusted machine since that machine will
221not have the encryption keys to read the protected data or alter it without
222being detected.
223Upon being received, the dataset will have the same encryption
224keys as it did on the send side, although the
225.Sy keylocation
226property will be defaulted to
227.Sy prompt
228if not otherwise provided.
229For unencrypted datasets, this flag will be equivalent to
230.Fl Lec .
231Note that if you do not use this flag for sending encrypted datasets, data will
232be sent unencrypted and may be re-encrypted with a different encryption key on
233the receiving system, which will disable the ability to do a raw send to that
234system for incrementals.
235.It Fl h , -holds
236Generate a stream package that includes any snapshot holds (created with the
237.Nm zfs Cm hold
238command), and indicating to
239.Nm zfs Cm receive
240that the holds be applied to the dataset on the receiving system.
241.It Fl i Ar snapshot
242Generate an incremental stream from the first
243.Ar snapshot
244.Pq the incremental source
245to the second
246.Ar snapshot
247.Pq the incremental target .
248The incremental source can be specified as the last component of the snapshot
249name
250.Po the
251.Sy @
252character and following
253.Pc
254and it is assumed to be from the same file system as the incremental target.
255.Pp
256If the destination is a clone, the source may be the origin snapshot, which must
257be fully specified
258.Po for example,
259.Em pool/fs@origin ,
260not just
261.Em @origin
262.Pc .
263.It Fl n , -dryrun
264Do a dry-run
265.Pq Qq No-op
266send.
267Do not generate any actual send data.
268This is useful in conjunction with the
269.Fl v
270or
271.Fl P
272flags to determine what data will be sent.
273In this case, the verbose output will be written to standard output
274.Po contrast with a non-dry-run, where the stream is written to standard output
275and the verbose output goes to standard error
276.Pc .
277.It Fl p , -props
278Include the dataset's properties in the stream.
279This flag is implicit when
280.Fl R
281is specified.
282The receiving system must also support this feature.
283Sends of encrypted datasets must use
284.Fl w
285when using this flag.
286.It Fl s , -skip-missing
287Allows sending a replication stream even when there are snapshots missing in the
288hierarchy.
289When a snapshot is missing, instead of throwing an error and aborting the send,
290a warning is printed to the standard error stream and the dataset to which it
291belongs
292and its descendents are skipped.
293This flag can only be used in conjunction with
294.Fl R .
295.It Fl v , -verbose
296Print verbose information about the stream package generated.
297This information includes a per-second report of how much data has been sent.
298.Pp
299The format of the stream is committed.
300You will be able to receive your streams on future versions of ZFS.
301.El
302.It Xo
303.Nm zfs
304.Cm send
305.Op Fl DLPcenvw
306.Op Fl i Ar snapshot Ns | Ns Ar bookmark
307.Ar filesystem Ns | Ns Ar volume Ns | Ns Ar snapshot
308.Xc
309Generate a send stream, which may be of a filesystem, and may be incremental
310from a bookmark.
311If the destination is a filesystem or volume, the pool must be read-only, or the
312filesystem must not be mounted.
313When the stream generated from a filesystem or volume is received, the default
314snapshot name will be
315.Qq --head-- .
316.Bl -tag -width "-D"
317.It Fl D , -dedup
318Deduplicated send is no longer supported.
319This flag is accepted for backwards compatibility, but a regular,
320non-deduplicated stream will be generated.
321.It Fl L , -large-block
322Generate a stream which may contain blocks larger than 128 KiB.
323This flag has no effect if the
324.Sy large_blocks
325pool feature is disabled, or if the
326.Sy recordsize
327property of this filesystem has never been set above 128 KiB.
328The receiving system must have the
329.Sy large_blocks
330pool feature enabled as well.
331See
332.Xr zpool-features 7
333for details on ZFS feature flags and the
334.Sy large_blocks
335feature.
336.It Fl P , -parsable
337Print machine-parsable verbose information about the stream package generated.
338.It Fl c , -compressed
339Generate a more compact stream by using compressed WRITE records for blocks
340which are compressed on disk and in memory
341.Po see the
342.Sy compression
343property for details
344.Pc .
345If the
346.Sy lz4_compress
347feature is active on the sending system, then the receiving system must have
348that feature enabled as well.
349If the
350.Sy large_blocks
351feature is enabled on the sending system but the
352.Fl L
353option is not supplied in conjunction with
354.Fl c ,
355then the data will be decompressed before sending so it can be split into
356smaller block sizes.
357.It Fl w , -raw
358For encrypted datasets, send data exactly as it exists on disk.
359This allows backups to be taken even if encryption keys are not currently
360loaded.
361The backup may then be received on an untrusted machine since that machine will
362not have the encryption keys to read the protected data or alter it without
363being detected.
364Upon being received, the dataset will have the same encryption
365keys as it did on the send side, although the
366.Sy keylocation
367property will be defaulted to
368.Sy prompt
369if not otherwise provided.
370For unencrypted datasets, this flag will be equivalent to
371.Fl Lec .
372Note that if you do not use this flag for sending encrypted datasets, data will
373be sent unencrypted and may be re-encrypted with a different encryption key on
374the receiving system, which will disable the ability to do a raw send to that
375system for incrementals.
376.It Fl e , -embed
377Generate a more compact stream by using
378.Sy WRITE_EMBEDDED
379records for blocks which are stored more compactly on disk by the
380.Sy embedded_data
381pool feature.
382This flag has no effect if the
383.Sy embedded_data
384feature is disabled.
385The receiving system must have the
386.Sy embedded_data
387feature enabled.
388If the
389.Sy lz4_compress
390feature is active on the sending system, then the receiving system must have
391that feature enabled as well.
392Datasets that are sent with this flag may not be received as an encrypted
393dataset,
394since encrypted datasets cannot use the
395.Sy embedded_data
396feature.
397See
398.Xr zpool-features 7
399for details on ZFS feature flags and the
400.Sy embedded_data
401feature.
402.It Fl i Ar snapshot Ns | Ns Ar bookmark
403Generate an incremental send stream.
404The incremental source must be an earlier snapshot in the destination's history.
405It will commonly be an earlier snapshot in the destination's file system, in
406which case it can be specified as the last component of the name
407.Po the
408.Sy #
409or
410.Sy @
411character and following
412.Pc .
413.Pp
414If the incremental target is a clone, the incremental source can be the origin
415snapshot, or an earlier snapshot in the origin's filesystem, or the origin's
416origin, etc.
417.It Fl n , -dryrun
418Do a dry-run
419.Pq Qq No-op
420send.
421Do not generate any actual send data.
422This is useful in conjunction with the
423.Fl v
424or
425.Fl P
426flags to determine what data will be sent.
427In this case, the verbose output will be written to standard output
428.Po contrast with a non-dry-run, where the stream is written to standard output
429and the verbose output goes to standard error
430.Pc .
431.It Fl v , -verbose
432Print verbose information about the stream package generated.
433This information includes a per-second report of how much data has been sent.
434.El
435.It Xo
436.Nm zfs
437.Cm send
438.Fl -redact Ar redaction_bookmark
439.Op Fl DLPcenpv
440.Op Fl i Ar snapshot Ns | Ns Ar bookmark
441.Ar snapshot
442.Xc
443Generate a redacted send stream.
444This send stream contains all blocks from the snapshot being sent that aren't
445included in the redaction list contained in the bookmark specified by the
446.Fl -redact
447(or
448.Fl d )
449flag.
450The resulting send stream is said to be redacted with respect to the snapshots
451the bookmark specified by the
452.Fl -redact No flag was created with .
453The bookmark must have been created by running
454.Nm zfs Cm redact
455on the snapshot being sent.
456.Pp
457This feature can be used to allow clones of a filesystem to be made available on
458a remote system, in the case where their parent need not (or needs to not) be
459usable.
460For example, if a filesystem contains sensitive data, and it has clones where
461that sensitive data has been secured or replaced with dummy data, redacted sends
462can be used to replicate the secured data without replicating the original
463sensitive data, while still sharing all possible blocks.
464A snapshot that has been redacted with respect to a set of snapshots will
465contain all blocks referenced by at least one snapshot in the set, but will
466contain none of the blocks referenced by none of the snapshots in the set.
467In other words, if all snapshots in the set have modified a given block in the
468parent, that block will not be sent; but if one or more snapshots have not
469modified a block in the parent, they will still reference the parent's block, so
470that block will be sent.
471Note that only user data will be redacted.
472.Pp
473When the redacted send stream is received, we will generate a redacted
474snapshot.
475Due to the nature of redaction, a redacted dataset can only be used in the
476following ways:
477.Bl -enum -width "a."
478.It
479To receive, as a clone, an incremental send from the original snapshot to one
480of the snapshots it was redacted with respect to.
481In this case, the stream will produce a valid dataset when received because all
482blocks that were redacted in the parent are guaranteed to be present in the
483child's send stream.
484This use case will produce a normal snapshot, which can be used just like other
485snapshots.
486.
487.It
488To receive an incremental send from the original snapshot to something
489redacted with respect to a subset of the set of snapshots the initial snapshot
490was redacted with respect to.
491In this case, each block that was redacted in the original is still redacted
492(redacting with respect to additional snapshots causes less data to be redacted
493(because the snapshots define what is permitted, and everything else is
494redacted)).
495This use case will produce a new redacted snapshot.
496.It
497To receive an incremental send from a redaction bookmark of the original
498snapshot that was created when redacting with respect to a subset of the set of
499snapshots the initial snapshot was created with respect to
500anything else.
501A send stream from such a redaction bookmark will contain all of the blocks
502necessary to fill in any redacted data, should it be needed, because the sending
503system is aware of what blocks were originally redacted.
504This will either produce a normal snapshot or a redacted one, depending on
505whether the new send stream is redacted.
506.It
507To receive an incremental send from a redacted version of the initial
508snapshot that is redacted with respect to a subject of the set of snapshots the
509initial snapshot was created with respect to.
510A send stream from a compatible redacted dataset will contain all of the blocks
511necessary to fill in any redacted data.
512This will either produce a normal snapshot or a redacted one, depending on
513whether the new send stream is redacted.
514.It
515To receive a full send as a clone of the redacted snapshot.
516Since the stream is a full send, it definitionally contains all the data needed
517to create a new dataset.
518This use case will either produce a normal snapshot or a redacted one, depending
519on whether the full send stream was redacted.
520.El
521.Pp
522These restrictions are detected and enforced by
523.Nm zfs Cm receive ;
524a redacted send stream will contain the list of snapshots that the stream is
525redacted with respect to.
526These are stored with the redacted snapshot, and are used to detect and
527correctly handle the cases above.
528Note that for technical reasons,
529raw sends and redacted sends cannot be combined at this time.
530.It Xo
531.Nm zfs
532.Cm send
533.Op Fl Penv
534.Fl t
535.Ar receive_resume_token
536.Xc
537Creates a send stream which resumes an interrupted receive.
538The
539.Ar receive_resume_token
540is the value of this property on the filesystem or volume that was being
541received into.
542See the documentation for
543.Nm zfs Cm receive Fl s
544for more details.
545.It Xo
546.Nm zfs
547.Cm send
548.Op Fl Pnv
549.Op Fl i Ar snapshot Ns | Ns Ar bookmark
550.Fl S
551.Ar filesystem
552.Xc
553Generate a send stream from a dataset that has been partially received.
554.Bl -tag -width "-L"
555.It Fl S , -saved
556This flag requires that the specified filesystem previously received a resumable
557send that did not finish and was interrupted.
558In such scenarios this flag
559enables the user to send this partially received state.
560Using this flag will always use the last fully received snapshot
561as the incremental source if it exists.
562.El
563.It Xo
564.Nm zfs
565.Cm redact
566.Ar snapshot redaction_bookmark
567.Ar redaction_snapshot Ns …
568.Xc
569Generate a new redaction bookmark.
570In addition to the typical bookmark information, a redaction bookmark contains
571the list of redacted blocks and the list of redaction snapshots specified.
572The redacted blocks are blocks in the snapshot which are not referenced by any
573of the redaction snapshots.
574These blocks are found by iterating over the metadata in each redaction snapshot
575to determine what has been changed since the target snapshot.
576Redaction is designed to support redacted zfs sends; see the entry for
577.Nm zfs Cm send
578for more information on the purpose of this operation.
579If a redact operation fails partway through (due to an error or a system
580failure), the redaction can be resumed by rerunning the same command.
581.El
582.Ss Redaction
583ZFS has support for a limited version of data subsetting, in the form of
584redaction.
585Using the
586.Nm zfs Cm redact
587command, a
588.Sy redaction bookmark
589can be created that stores a list of blocks containing sensitive information.
590When provided to
591.Nm zfs Cm send ,
592this causes a
593.Sy redacted send
594to occur.
595Redacted sends omit the blocks containing sensitive information,
596replacing them with REDACT records.
597When these send streams are received, a
598.Sy redacted dataset
599is created.
600A redacted dataset cannot be mounted by default, since it is incomplete.
601It can be used to receive other send streams.
602In this way datasets can be used for data backup and replication,
603with all the benefits that zfs send and receive have to offer,
604while protecting sensitive information from being
605stored on less-trusted machines or services.
606.Pp
607For the purposes of redaction, there are two steps to the process.
608A redact step, and a send/receive step.
609First, a redaction bookmark is created.
610This is done by providing the
611.Nm zfs Cm redact
612command with a parent snapshot, a bookmark to be created, and a number of
613redaction snapshots.
614These redaction snapshots must be descendants of the parent snapshot,
615and they should modify data that is considered sensitive in some way.
616Any blocks of data modified by all of the redaction snapshots will
617be listed in the redaction bookmark, because it represents the truly sensitive
618information.
619When it comes to the send step, the send process will not send
620the blocks listed in the redaction bookmark, instead replacing them with
621REDACT records.
622When received on the target system, this will create a
623redacted dataset, missing the data that corresponds to the blocks in the
624redaction bookmark on the sending system.
625The incremental send streams from
626the original parent to the redaction snapshots can then also be received on
627the target system, and this will produce a complete snapshot that can be used
628normally.
629Incrementals from one snapshot on the parent filesystem and another
630can also be done by sending from the redaction bookmark, rather than the
631snapshots themselves.
632.Pp
633In order to make the purpose of the feature more clear, an example is provided.
634Consider a zfs filesystem containing four files.
635These files represent information for an online shopping service.
636One file contains a list of usernames and passwords, another contains purchase
637histories,
638a third contains click tracking data, and a fourth contains user preferences.
639The owner of this data wants to make it available for their development teams to
640test against, and their market research teams to do analysis on.
641The development teams need information about user preferences and the click
642tracking data, while the market research teams need information about purchase
643histories and user preferences.
644Neither needs access to the usernames and passwords.
645However, because all of this data is stored in one ZFS filesystem,
646it must all be sent and received together.
647In addition, the owner of the data
648wants to take advantage of features like compression, checksumming, and
649snapshots, so they do want to continue to use ZFS to store and transmit their
650data.
651Redaction can help them do so.
652First, they would make two clones of a snapshot of the data on the source.
653In one clone, they create the setup they want their market research team to see;
654they delete the usernames and passwords file,
655and overwrite the click tracking data with dummy information.
656In another, they create the setup they want the development teams
657to see, by replacing the passwords with fake information and replacing the
658purchase histories with randomly generated ones.
659They would then create a redaction bookmark on the parent snapshot,
660using snapshots on the two clones as redaction snapshots.
661The parent can then be sent, redacted, to the target
662server where the research and development teams have access.
663Finally, incremental sends from the parent snapshot to each of the clones can be
664sent
665to and received on the target server; these snapshots are identical to the
666ones on the source, and are ready to be used, while the parent snapshot on the
667target contains none of the username and password data present on the source,
668because it was removed by the redacted send operation.
669.
670.Sh EXAMPLES
671.\" These are, respectively, examples 12, 13 from zfs.8
672.\" Make sure to update them bidirectionally
673.Ss Example 1 : No Remotely Replicating ZFS Data
674The following commands send a full stream and then an incremental stream to a
675remote machine, restoring them into
676.Em poolB/received/fs@a
677and
678.Em poolB/received/fs@b ,
679respectively.
680.Em poolB
681must contain the file system
682.Em poolB/received ,
683and must not initially contain
684.Em poolB/received/fs .
685.Bd -literal -compact -offset Ds
686.No # Nm zfs Cm send Ar pool/fs@a |
687.No "   " Nm ssh Ar host Nm zfs Cm receive Ar poolB/received/fs Ns @ Ns Ar a
688.No # Nm zfs Cm send Fl i Ar a pool/fs@b |
689.No "   " Nm ssh Ar host Nm zfs Cm receive Ar poolB/received/fs
690.Ed
691.
692.Ss Example 2 : No Using the Nm zfs Cm receive Fl d No Option
693The following command sends a full stream of
694.Ar poolA/fsA/fsB@snap
695to a remote machine, receiving it into
696.Ar poolB/received/fsA/fsB@snap .
697The
698.Ar fsA/fsB@snap
699portion of the received snapshot's name is determined from the name of the sent
700snapshot.
701.Ar poolB
702must contain the file system
703.Ar poolB/received .
704If
705.Ar poolB/received/fsA
706does not exist, it is created as an empty file system.
707.Bd -literal -compact -offset Ds
708.No # Nm zfs Cm send Ar poolA/fsA/fsB@snap |
709.No "   " Nm ssh Ar host Nm zfs Cm receive Fl d Ar poolB/received
710.Ed
711.
712.Sh SEE ALSO
713.Xr zfs-bookmark 8 ,
714.Xr zfs-receive 8 ,
715.Xr zfs-redact 8 ,
716.Xr zfs-snapshot 8
717