ZFS接收远程快照时触发“cannot set property”权限错误的排查求助
背景
我正在家里的服务器上配置ZFS自动异地备份,下面所有命令都是以非root用户执行的。
问题
执行以下命令时,目标机器返回了“permission denied”错误:
(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')
完整命令输出
incremental localpool/mydataset@previous_snap localpool/mydataset@newest_snap 624
size 624
receiving incremental stream of localpool/mydataset@newest_snap into remotepool/myserver/localpool/mydataset@newest_snap
received 1.31K stream in 1 seconds (1.31K/sec)
cannot set property for 'remotepool/myserver/localpool/mydataset': permission denied
已排查情况
ZFS没有明确说明是哪个属性无法设置,我指定要设置的只有canmount=noauto。在目标机器上,我已经给接收用户委派了一些ZFS权限:
sudo zfs allow myuser snapshot,receive,create,mountpoint,mount,userprop remotepool/myserver
而且我手动执行zfs set canmount=noauto remotepool/myserver/localpool/mydataset时是成功的。
疑问
- 怎么才能看到具体是哪个属性无法设置?
- 怎么允许在接收快照时设置这个属性?
编辑补充(已解决)
问题和canmount属性无关——只要委派了对应权限,这个属性是可以正常设置的。真正的问题是我缺少了keylocation权限的委派。这是因为用--raw参数发送快照时不会进行解密/重新加密,所以接收端需要修改keylocation为交互提示模式,这就需要对应的权限。
另外,针对ZFS autobackup的场景,我还缺少了hold和release权限的委派。
备注:内容来源于stack exchange,提问作者Ostheer

