使用 LUKS 进行根加密:未找到根分区

使用 LUKS 进行根加密:未找到根分区

我的唯一磁盘的布局如下: /dev/sda1 for the plaintext boot partition /dev/sda2 for the encrypted root partition

我的系统是 ArchLinux,我遵循本指南设置根加密(无 lvm,无 raid)。以下是我所做的:运行cryptsetup并将/dev/sda2其映射到/dev/mapper/cryptroot

我的/etc/fstab样子是这样的: UUID=of /dev/mapper/cryptroot / ext4 rw,relatime,data=ordered,discard 0 1 UUID=of /dev/sda1 /boot ext4 rw,relatime,data=ordered,discard 0 2

在我的/etc/default/grub我将一行改为: GRUB_CMDLINE_LINUX="cryptdevice=UUID of /dev/sda2:cryptroot:allow-discards"

钩子看起来/etc/mkinitcpio.conf像这样: HOOKS="base udev autodetect modconf block encrypt filesystems keyboard fsck"

最后还不忘分别跑mkinitcpio -p linux一跑grub-mkconfig -o /boot/grub/grub.cfg

我之所以如此快速地列举我的操作,是因为我之前已经成功地为我的根文件系统配置了加密。因此,最后我得到了以下错误:

ERROR: device *UUID of /dev/mapper/cryptroot* not found. Skipping fsck. ERROR: unable to find root device *UUID of /dev/mapper/cryptroot* You are being dropped into recovery shell

奇怪的是,它尝试查找未加密的块设备/dev/mapper/cryptroot,但却不要求我输入密码(密码是我cryptsetup/dev/sda2开始时创建的)。因此,它自然找不到未加密的块设备,因为它一开始并没有要求我输入密码。你能告诉我我配置错了什么吗?

答案1

我已成功添加cryptdevice=/dev/disk/by-uuid/<UUID_OF_LOGICAL_DEVICE>:cryptroot root=/dev/mapper/cryptrootGRUB 中的附加内核选项。

值得注意的是,如果您在执行此操作时没有精确复制和粘贴 UUID(例如在控制台/tty 中),则可能会输入错误。这是一行代码,从控制台输入也很糟糕,但可能更容易。

sed "s/\(GRUB_CMDLINE_LINUX=\"\)/\1cryptdevice=\/dev\/disk\/by-uuid\/$(blkid -o value -s UUID /dev/<LOGICAL_DEVICE>):cryptroot root=\/dev\/mapper\/cryptroot/" /etc/default/grub > ~/grub.defaults && mv ~/grub.defaults /etc/default/grub

答案2

你缺少 /etc/crypttab,cpio 钩子指向操作系统不知道的分区

在/etc/crypttab中

%{/dev/mapper/cryptroot 的 UUID} / ext4 rw、relatime、data=ordered、discard、luks - 0 1

然后重新运行 grub update

相关内容