如何在启动时解密、创建和挂载 LUKS 加密的 zfs raidz 池?

如何在启动时解密、创建和挂载 LUKS 加密的 zfs raidz 池?

我有一个 Ubuntu-18.04 盒子,它运行的操作系统来自一个我不想加密的 SSD。我还有 3 个额外的 2TB 驱动器,我想将它们用作加密的(通过 LUKS)RAID-Z1 附加存储。我想为每个磁盘使用不同的密码,在启动时提示输入每个密码,并在启动时自动创建和挂载 raidz 池。

我一直在关注以下教程。

https://help.ubuntu.com/community/encryptedZfs#ZFS_on_LUKS_Installation

上述教程介绍了如何加密启动盘和附加存储驱动器。由于我并不打算加密启动盘,因此我尝试解析与此相关的所有内容,并仅执行在我感兴趣的 3 个 2TB 驱动器上创建附加存储所需的操作。

我取得了一些成功,完成以下步骤似乎确实用自己的密码加密了每个驱动器,我可以将它们变成 raidz 池。有两个故障点我无法解决:

  1. 我的系统在启动时不会提示我输入解密密码。
  2. raidz 池在启动时未创建或挂载。可能至少部分是由于前一个问题。

机器启动后,我可以手动解密,然后导入之前创建的池,没有任何问题。以下是我目前的设置。

$ sudo parted -a optimal /dev/sdb; sudo parted -a optimal /dev/sdc; sudo parted -a optimal /dev/sdd
# the above parted command opens a prompt to enter commands. The following were the commands given
# mklabel gpt
# unit MB
# mkpart vpool 1 -1
$ sudo apt install cryptsetup
$ sudo cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdb1
$ sudo cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdc1
$ sudo cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdd1
$ sudo cryptsetup luksHeaderBackup /dev/sdb1 --header-backup-file /home/user_home/luks_header_backup_sdb1; sudo cryptsetup luksHeaderBackup /dev/sdc1 --header-backup-file /home/user_home/luks_header_backup_sdc1; sudo cryptsetup luksHeaderBackup /dev/sdd1 --header-backup-file /home/user_home/luks_header_backup_sdd1
$ sudo cryptsetup luksOpen /dev/sdb1 vault1_crypt
$ sudo cryptsetup luksOpen /dev/sdc1 vault2_crypt
$ sudo cryptsetup luksOpen /dev/sdd1 vault3_crypt
$ sudo fdisk -l
# The above command was to check the sector size. because there is an old drive in there we have to use 512 sector size. This means using ashift=9 instead of ashift=12 when doing zpool create
$ sudo zpool create -O mountpoint=none -o ashift=9 vault raidz1 /dev/mapper/vault1_crypt /dev/mapper/vault2_crypt /dev/mapper/vault3_crypt
$ sudo zfs set mountpoint=/vault vault
$ blkid # Copied value of each sdb1 sdc1 and sdd1 UUIDs
$ sudo vim /etc/initramfs-tools/conf.d/cryptroot
# Wrote as follows
# target=vault,source=UUID=<UUID-from-blkid-for-sdb1>,key=none
# target=vault,source=UUID=<UUID-from-blkid-for-sdc1>,key=none
# target=vault,source=UUID=<UUID-from-blkid-for-sdd1>,key=none
$ sudo update-initramfs -c -k all
$ sudo update-grub; sudo grub-install /dev/sda

相关内容