Skip to content

Usage

Pushing with syncoid by hand

syncoid --no-privilege-elevation --no-sync-snap --sendoptions=w --compress=none \
  --recursive --delete-target-snapshots \
  tank/offsite joe@bas-nas:tank/friends/joe/offsite
  • --no-privilege-elevation: the gate refuses sudo.
  • --sendoptions=w: raw sends, so the host never sees plaintext. The gate fails any push that arrives unencrypted.
  • --no-sync-snap: send sanoid's snapshots instead of creating syncoid's own, so the sending user needs only send and hold.
  • --compress=none: raw encrypted data does not compress. The gate reports that lzop and mbuffer are missing on its side anyway, so syncoid skips them.
  • --delete-target-snapshots: mirror your sanoid retention on the host.

The receive always runs with -u, and keeps -F when the caller asks for it, as syncoid does by default. After missed pushes, sender retention can delete the newest snapshot both sides share; -F lets ZFS roll the destination back to an older common snapshot, discarding newer destination snapshots, so the incremental can continue. It applies only strictly below the tenant root and needs no rights beyond the existing delegation. The destination therefore follows the sender: keep snapshots you want to preserve on the sender, and if no common snapshot remains, send a new full backup. Run syncoid as a non-root user with zfs allow -u <user> send,hold <dataset> on the sending side.

Restoring

Pull a snapshot back through the same key and unlock it at home:

ssh joe@bas-nas zfs send -w tank/friends/joe/offsite/photos@autosnap_2026-09-25_00:00:01_daily \
  | zfs receive -u tank/restored/photos
zfs load-key tank/restored/photos
zfs mount tank/restored/photos

If the transfer breaks, resume it with the token your side kept:

token=$(zfs get -H -o value receive_resume_token tank/restored/photos)
ssh joe@bas-nas zfs send -t "$token" | zfs receive -s -u tank/restored/photos

List what the host keeps for you with ssh joe@bas-nas zfs list -r -t all -o name,used,creation.

Removing datasets

Everything below your root is yours to remove:

ssh joe@bas-nas zfs destroy -r tank/friends/joe/old
ssh joe@bas-nas zfs destroy tank/friends/joe/offsite@autosnap_2026-01-01_00:00:01_daily