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