使用自编译的 ZFS 自动挂载加密文件系统

使用自编译的 ZFS 自动挂载加密文件系统

我目前正在尝试将运行 19.04 的数据转储服务器从 LUKS+btrfs 更改为 ZFS。系统驱动器是 LUKS 加密的,可以通过 SSH 解密。它包含一个应该解密 ZFS 文件系统的密钥文件。我已经完成了一半,但自动挂载不起作用。

  • 我已经成功编译了 ZFS 0.8.1,并按照以下说明构建了一个 DKMS 包维基百科通过阅读 makefile,我还发现我还需要制作 deb-utils 来获取 zpool 等。
  • 我创建了一个支持加密的池

    zpool create -o ashift=12 dataint /dev/disk/by-id/mydrive zpool set feature@encryption=enabled dataint

  • 我在其中创建了使用密钥文件加密的文件系统

    zfs create \ -o encryption=on \ -o keylocation=file:///root/keys/hdd256.key -o keyformat=raw\ dataint/test

  • 我可以安装它zfs mount dataint -l

我现在遇到的问题是:

  1. 启动时不会加载 zfs。甚至内核模块也不会加载,因此池当然也不会加载。

  2. 仅当导入池或使用该选项挂载文件系统时,才会加载加密卷-l。我猜当 1. 解决后,必须以某种方式解决自动加载问题?

我确实有一些 zfs systemd 服务,但它们被屏蔽了。不确定它们是否是之前安装的 0.7 包管理器留下的,我已将其删除。

答案1

尝试手动启用所有已安装的部分。

要查看系统安装了哪些与 zfs 相关的服务:

sudo systemctl list-unit-files | grep zfs

接下来,启用所有服务。我来详细说一下:

sudo modprobe zfs
sudo systemctl enable zfs-import-cache
sudo systemctl enable zfs-import-scan
sudo systemctl enable zfs-import.target
sudo systemctl enable zfs-mount
sudo systemctl enable zfs-share
sudo systemctl enable zfs-zed
sudo systemctl enable zfs.target

如果您的终端上出现有关被屏蔽的内容的投诉,请强制删除所有屏蔽:

sudo systemctl unmask zfs-*

您可能不需要这个,但为了完整性,一些较旧的系统具有较少的服务并且更喜欢update-rc.d

update-rc.d zfs-import enable
update-rc.d zfs-mount enable
update-rc.d zfs-zed enable
update-rc.d zfs-share enable

答案2

我现在已经完全解决了这个问题,本质上它有两个部分。

  1. systemd 服务必须内置到 deb 包中。不幸的是,上面链接的 wiki 包非常粗糙,正如讨论的那样在问题跟踪器中

简而言之,DKMS deb 的构建命令应该是

$ ./configure
$ make -j1 deb-utils deb-dkms
  1. 需要清理旧安装

命令:

sudo systemctl unmask zfs*

并且需要启用并启动新的服务。

我还描述了如何处理加密数据集这里

相关内容