Incremental replication

After your first full send, keep your conduit in sync by transferring only what changed between two snapshots.

ZFS can compute the exact difference between two snapshots and send only those blocks. Use -i to send the change between one snapshot and the next, or -I to send every intermediate snapshot in the range. Incremental sends are typically a tiny fraction of the full dataset.
Take a fresh snapshot, then send the change since your last replicated snapshot. Replace the snapshot names and connection details with your own.
$ zfs snapshot tank/data@2026-01-02
$ zfs send -i tank/data@2026-01-01 tank/data@2026-01-02 \
| ssh [email protected] -p 2201 zfs recv conduits/sub_abc123/data
The receiving side must still have the base snapshot (@2026-01-01) from your previous send — ZFS uses it as the starting point.
If you take snapshots more often than you replicate, use -I to send every snapshot between the base and the latest in one stream, preserving the full history:
$ zfs send -RwI tank/data@2026-01-01 tank/data@2026-01-07 | ssh … zfs recv …
-R includes child datasets, -w sends encrypted datasets raw (keys stay with you), and -I includes all intermediate snapshots.
  • Use a consistent snapshot naming scheme (dates or sequential counters) so you always know your base.
  • Add -v to watch progress; the first incremental after a long gap can still be large.
  • Bookmarks (zfs bookmark) let you free the local base snapshot while keeping an incremental source.
  • Keep an eye on your snapshot count — each plan has a snapshot limit.