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

我在RAID-Z2中有6个物理驱动器,我打算一个一个地转换成dm-crypt设备。

我的过程大概是:

  1. dd if=/dev/zero of=/dev/sdf
  2. 创build密钥文件/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

一旦重新启动完成(其中工作正常),我重新启动机器validation设置,然后继续到其他磁盘。 然而,我发现ZFScrypt-1标记为UNAVAIL。

ls /dev/mappervalidation了dm-crypt正确地激活了LUKS容器。 zpool online my_pool crypt-1运行zpool online my_pool crypt-1会导致ZFS开始重新同步,但是会以秒的方式完成并恢复正常运行。

我猜dm-crypt设备只是在ZFS第一次尝试访问my_pool时不加载? 这是一个加载顺序的问题,还是我需要为/etc/crypttab的LUKS设备使用不同的标识符? 如何确保ZFS在重新启动时看到这些LUKS设备?

如果有问题的话,这是一个systemd box(Arch)。

谢谢!


编辑1:

在cryptsetup创build过程中,我使用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它是 – 根据定义? – 不会改变(甚至在重新启动时)。 我将用id-name /dev/disk/by-id/dm-uuid-CRYPT-LUKS1-6bed03ceaafe4539a375536d11309ff0-locker-1我的zpool中的dm-crypt-name locker-1的定义并回报。 相同的驱动器,相同的LUKS容器,只是解决它的一种不同的方式。


编辑3:

我从上面编辑#2的build议没有奏效。 我必须擦拭驱动器并重新设置设备,因为ZFS不允许我用自己更换设备。 重新启动完成后,我重新启动, zpool statusDEGRADED ,设备dm-uuid-CRYPT-LUKS1-71e12fa7dc034d919e800ba89aec3b17-locker-1UNAVAIL

值得注意的是, locker-1 确实出现在ls /dev/disk/by-idlsblk ,所以正确加载了。 我可以通过运行来validation这一点:

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

干净地离开,并且把设备带回池中。

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

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

 zpool import -d /dev/vdevs poolname 

如果以这种方式find了vdev,那么可以在引导进程中的zpool导入(可能通过udev或脚本)之前使符号链接发生。