Context
I'm setting up ZFS autobackup on my home server for offsite backups. All commands printed below are run as non-root.
Problem
A 'permission denied' error arises originating from the target machine when the following command is issued:
(zfs send --large-block --embed --raw --verbose --parsable --props \ -i @previous_snap localpool/mydataset@newest_snap) | \(ssh ostsite 'zfs recv -u -o canmount=noauto -v -s \remotepool/myserver/localpool/mydataset')
Full command output:
incremental localpool/mydataset@previous_snap localpool/mydataset@newest_snap 624size 624receiving incremental stream of localpool/mydataset@newest_snap into remotepool/myserver/localpool/mydataset@newest_snapreceived 1.31K stream in 1 seconds (1.31K/sec)cannot set property for 'remotepool/myserver/localpool/mydataset': permission denied
Findings so far
ZFS doesn't explicitly say which property cannot be set, but the only one I'm requesting to be set is canmount=noauto
. On the target machine, I've delegated some zfs permissions to the receiving user:
sudo zfs allow myuser snapshot,receive,create,mountpoint,mount,userprop remotepool/myserver
And when I manually execute zfs set canmount=noauto remotepool/myserver/localpool/mydataset
, this succeeds.
Questions
- How can I see which property cannot be set?
- How can I allow this property to be set (at recv-time)?
EDIT
It was unrelated to the canmount
property -- that was being set fine (as long as you've zfs-allowed it). Instead, I was missing the keylocation
delegation. This is required because sending with --raw
doesn't de/re-encrypt and therefore wants to change the keylocation to prompt
upon arrival.
In addition, but this is purely a zfs-autobackup thing, I was missing the hold
and release
delegations.