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