我的唯一磁盘的布局如下:
/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/cryptroot
GRUB 中的附加内核选项。
值得注意的是,如果您在执行此操作时没有精确复制和粘贴 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