LUKS 上的 ZFS 在启动时无法被识别

LUKS 上的 ZFS 在启动时无法被识别

我在 RAID-Z2 中拥有 6 个物理驱动器,我打算将它们逐一转换为 dm-crypt 设备。

我的过程大致是:

  1. dd if=/dev/zero of=/dev/sdf
  2. 创建密钥文件/etc/crypttab.d/crypt-1.key
  3. cryptsetup luksFormat /dev/sdf
  4. 追加crypt-1 <raw-disk-uuid> /etc/crypttab.d/crypt-1.key luks/etc/crypttab
  5. cryptsetup luksOpen /dev/sdf crypt-1
  6. zfs replace my_pool <raw-disk-uuid> /dev/mapper/crypt-1

重新同步完成后(一切正常),我重新启动机器以验证设置,然后再继续处理其他磁盘。然而,我发现 ZFS 标记crypt-1为 UNAVAIL。

ls /dev/mapper验证 dm-crypt 是否正确激活了 LUKS 容器。运行zpool online my_pool crypt-1会导致 ZFS 开始重新同步,但随后会在几秒钟内完成并恢复正常操作。

我猜想当 ZFS 首次尝试访问时,dm-crypt 设备根本没有加载my_pool?这是加载顺序的问题,还是我需要在 中使用不同的 LUKS 设备标识符/etc/crypttab?如何确保 ZFS 在重启时看到这些 LUKS 设备?

systemd如果重要的话,这是一个盒子(拱门)。

谢谢!


编辑1:

在创建 cryptsetup 期间,我使用 SCSI 标识符(例如/dev/sdf)通过 LUKS 初始化设备。但是,在 中,/etc/crypttab我通过底层物理磁盘的 UUID 指定设备。该cryptsetup实用程序是否对您识别目标的方式敏感?换句话说,我是否需要重新执行cryptsetup并向其传递磁盘 UUID 而不是 SCSI 名称?


编辑2:

我看到以下内容ls -alsvh /dev/disk/by-id

0 lrwxrwxrwx 1 root root  10 Jul  8 08:18 dm-uuid-CRYPT-LUKS1-6bed03ceaafe4539a375536d11309ff0-locker-1 -> ../../dm-0

据我所知,如果它在里面/dev/disk/by-id- 根据定义? - 则不会发生变化(即使重新启动)。我将locker-1用 id-name 替换 zpool 中dm-crypt-name 的定义/dev/disk/by-id/dm-uuid-CRYPT-LUKS1-6bed03ceaafe4539a375536d11309ff0-locker-1并报告。相同的驱动器,相同的 LUKS 容器,只是寻址方式不同。


编辑3:

我上面编辑 #2 中的建议没有奏效。我不得不擦除驱动器并重新安装cryptsetup设备,因为 ZFS 不允许我用自身替换设备。重新同步完成后,我重新启动了,并且设备zpool status是。DEGRADEDdm-uuid-CRYPT-LUKS1-71e12fa7dc034d919e800ba89aec3b17-locker-1UNAVAIL

值得注意的是locker-1 出现在ls /dev/disk/by-id以及中lsblk,因此它被正确加载。我可以通过运行以下命令来验证这一点:

zpool online inground dm-uuid-CRYPT-LUKS1-71e12fa7dc034d919e800ba89aec3b17-locker-1

它会干净地退出,并将设备放回池中。

也许这是由于启动期间不同模块的加载顺序造成的?也许是 dm-crypt 设备的激活使得 ZFS 在 LUKS 容器正确打开之前开始导入池?

答案1

您可以尝试导出您的池,然后将组成设备的设备节点符号链接到例如 /dev/vdevs,然后运行

zpool import -d /dev/vdevs poolname

如果以这种方式找到 vdev,那么您可以在启动过程中的 zpool 导入之前进行符号链接(可能通过 udev 或脚本)作为一种解决方法。

相关内容