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