我在 RAID-Z2 中拥有 6 个物理驱动器,我打算将它们逐一转换为 dm-crypt 设备。
我的过程大致是:
dd if=/dev/zero of=/dev/sdf
- 创建密钥文件
/etc/crypttab.d/crypt-1.key
cryptsetup luksFormat /dev/sdf
- 追加
crypt-1 <raw-disk-uuid> /etc/crypttab.d/crypt-1.key luks
至/etc/crypttab
cryptsetup luksOpen /dev/sdf crypt-1
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
是。DEGRADED
dm-uuid-CRYPT-LUKS1-71e12fa7dc034d919e800ba89aec3b17-locker-1
UNAVAIL
值得注意的是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 或脚本)作为一种解决方法。