我的一个朋友有一台装有 GNU/Linux 的笔记本电脑。它有许多完全加密的磁盘,并且她随身携带包含 USB 闪存驱动器的未加密/boot
分区/boot/efi
。另外还有用于/boot
解密磁盘的密钥文件。她在启动时将 USB 闪存驱动器插入笔记本电脑。使用luksAddKey
的命令将密钥文件添加到笔记本电脑上的 luks-headers 中cryptsetup
。这是/etc/crypttab
操作系统的文件:
sda1_crypt UUID=c0c16c39-950d-4af6-956c-de187eb077c6 /boot/disk.key luks,discard
mmcblk0_crypt UUID=e4a9c0c2-8ddb-488a-9c5b-cece3ca3d2a2 /boot/disk.key luks
您可以在本示例中看到,两个磁盘的密钥文件是相同的。操作系统是基于 Debian 的,因此为了生成 ramdisk,-file/etc/cryptsetup-initramfs/conf-hook
包含任何密钥文件的路径:(/boot/*.key
这样运行后任何密钥文件都会包含在 ramdisk 中update-initramfs -u -k all
)。使用 使 ramdisk 没有警告和错误update-initramfs -u -k all
。
问题是,在启动过程中,内核成功解密了 sda1,但在尝试解密 mmcblk0 时出现以下错误:
cryptsetup: WARNING: mmcblk0_crypt keyfile '/boot/disk.key' not found
mmcblk0_crypt (starting)...Failed to open key file.
mmcblk0_crypt (failed) ...failed.
所以看起来它能够在前一秒找到解密 sda1 的密钥文件,但一秒后,它无法找到相同的密钥文件来解密 mmcblk0。此外,尝试对两个驱动器使用不同的密钥文件,但结果相同。这是说明问题的最小示例。
可能发生什么事?对于这个问题我们应该如何排查和解决呢?
编辑:我们没有grub.cfg
以任何方式修改。它具有默认设置。
Edit2:出于某种原因,如果我将 mmcblk0 的密钥文件移至/etc