升级到 20.04 后,我的加密磁盘在启动时无法解密。我没有被要求输入任何密码,所以它显然找不到任何分区并启动到 initrd 提示符。
可能的原因是什么:/cryptroot/crypttab
initrd 映像中完全是空的。
/etc/crypttab
我可以手动打开 luks 并 chroot 到系统中。这是我在真实根目录中的内容:
nvme0n1p3_crypt UUID=<some uuid> none luks
(所有位置的 UUID 都是正确的)
当我运行时update-initramfs -c -k all
,输出是:
cryptsetup: WARNING: target 'nvme0n1p3_crypt' not found in /etc/crypttab
这有点奇怪,因为它正是该文件中唯一单个条目的目标名称。它还被列为/dev/mapper
链接,../dm-0
这似乎也是正确的。
我尝试将该设备重命名为crypt
仅使用dmsetup rename ...
,但这当然没有帮助。
我认为这是我的问题的根本原因。
答案1
顺便说一句,我已经修好了。这太奇怪了,如果没有人告诉我,我永远也不会发现。
问题出在文件上/etc/crypttab
:它末尾需要一个 EOF!
哇哦!怎么会这样?这是过去 25 年来 Linux 第一次需要在文本文件中指定 EOF。天哪!
无论如何,经过一周多的测试,现在已经修复了。
答案2
以下是生成例程: https://salsa.debian.org/gpiccoli/cryptsetup/-/blob/master/debian/functions#L526
另一个陷阱(其他人可能会说这是有意的)是您的/etc/crypttab
TARGET(= 名称)必须是您打算为其生成 initramfs 的根当前使用的 TARGET。
例如:如果您:
luks open
富
mount /dev/mapper/foo
chroot
update-initramfs
然后foo's
etc/crypttab's
TARGET
必须是富否则你会看到:
cryptsetup: WARNING: target 'foo' not found in /etc/crypttab
尽管用 几乎看不出来update-initramfs -v
。