ZFS 中现有数据集的加密 (ZoL 0.8)

Bay*_*rSe 5 filesystems zfs encryption

是否可以加密现有数据集(包括快照)ZFS on Linux >= 0.8,例如通过使用send | recv和破坏原始数据集?

dmt*_*dmt 5

是的。请参阅此简单示例(在 ZoL 0.8.3 上测试)。

如果您想使用原始密钥文件(而不是密码):

dd if=/dev/urandom of=/path/to/keyfile bs=32 count=1
chmod 000 /path/to/keyfile
Run Code Online (Sandbox Code Playgroud)

首先创建快照:

zfs snapshot -r tank/home@transfer
Run Code Online (Sandbox Code Playgroud)

然后,按照建议,send | recv(使用复制选项-R),但在接收端提供您的加密选项:

zfs send -R tank/home@transfer |
    zfs receive \
        -o encryption=aes-256-gcm \
        -o keyformat=raw \
        -o keylocation=file:///path/to/keyfile \
        tank/newhome
Run Code Online (Sandbox Code Playgroud)

如果安装了原始数据集,则不会立即安装新数据集:

无法挂载“/tank/home”:目录不为空

销毁未加密的数据集并将其替换为您的新数据集:

zfs destroy -r tank/home
zfs rename tank/newhome tank/home
Run Code Online (Sandbox Code Playgroud)

如果您的数据集没有任何子数据集,则安装很容易:

zfs mount tank/home
Run Code Online (Sandbox Code Playgroud)

别的

zfs list -rH -o name tank/home | xargs -L 1 zfs mount
Run Code Online (Sandbox Code Playgroud)

(或者只是zfs mount -a如果您没有不应安装的其他数据集)。

就是这样!

最后,销毁快照,如果您愿意:

zfs destroy -r tank/home@transfer
Run Code Online (Sandbox Code Playgroud)