$linuxjunkies
>

zfs-send(8)

Send ZFS dataset snapshots or incremental changes to stdout for backup, replication, or transfer to another system.

UbuntuDebianFedoraArch

Synopsis

zfs send [-DRceLnPpvV] [-e epoch] [-t token] [--saved] SNAPSHOT [SNAPSHOT|BOOKMARK]

Description

The zfs send command serializes a ZFS snapshot or incremental dataset changes into a stream that can be written to a file, piped to zfs receive on another system, or stored for backup purposes. It enables efficient replication, disaster recovery, and data migration.

By default, zfs send SNAPSHOT outputs the full snapshot contents. Use zfs send -i BASE SNAPSHOT to send only the incremental changes between two snapshots, which is much faster and smaller for frequent backups.

The stream can be encrypted, compressed, or piped directly to zfs receive for real-time replication across network connections or to local pools.

Common options

FlagWhat it does
-i snapshotsend incremental changes from snapshot to next snapshot; much smaller than full send
-Rsend all snapshots and child datasets recursively
-eestimate send size without actually sending; useful for capacity planning
-Lsend all snapshots since snapshot with label; use with -R for resumable streams
-cuse LZ4 compression on the stream; reduces bandwidth usage
-Pshow progress; print percentage and bytes processed during send
-vverbose output; print each snapshot name as it is sent
-ndry-run; perform all checks but do not actually send data
--savedsend data saved by zfs save since the last successful send
-Duse dedup statistics for estimating stream size

Examples

Full backup of a snapshot to a file; creates a complete copy of dataset state at snapshot time

zfs send pool/dataset@snapshot > backup.zfs

Incremental replication; sends only changes between snap1 and snap2 to another pool in real-time

zfs send -i pool/dataset@snap1 pool/dataset@snap2 | zfs receive backup/dataset

Compressed recursive send over SSH; backs up entire dataset hierarchy to remote server with compression

zfs send -R -c [email protected] | ssh backup-server zfs receive -F archive/datasets

Estimate size; shows how many bytes the incremental stream would require without sending

zfs send -e pool/dataset@snap1 pool/dataset@snap2

Show progress while sending; combine with <code>pv</code> for detailed bandwidth monitoring

zfs send -P -i pool/[email protected] pool/[email protected] | pv > weekly-backup.zfs

Full recursive backup with gzip compression; useful for archival to external storage

zfs send -R pool@full-backup | gzip > full-backup-$(date +%Y%m%d).gz

Dry-run; verify incremental send works before actually executing it

zfs send -n -i pool/db@snap1 pool/db@snap2

Resumable send; can be restarted if interrupted, useful for large datasets over unreliable networks

zfs send -L label pool/dataset | zfs receive -F replica/dataset

Related commands