升级到 20.04 后:luks 在启动时不会打开我的磁盘;cryptroot/crypttab 为空,cryptsetup 无法识别 crypttab 条目

Mic*_*ann 4 luks initramfs cryptroot cryptsetup initrd

升级到 20.04 后,我的加密磁盘在启动时没有被解密。我没有被要求输入任何密码,所以它显然找不到任何分区并引导到 initrd 提示符。

可能是什么原因:/cryptroot/crypttab在 initrd 映像中是完全空的。

我可以手动打开 luks 并 chroot 进入系统。这是我/etc/crypttab在真正根目录中的内容:

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 ...但这当然没有帮助。

我认为这是我问题的根本原因。

小智 7

这是生成例程: https://salsa.debian.org/gpiccoli/cryptsetup/-/blob/master/debian/functions#L526

另一个问题(其他人可能会说这是故意的)是您的/etc/crypttab目标(=名称)必须是当前用于您打算为其生成 initramfs 的根的目标。

例如:如果您:

luks open
mount /dev/mapper/foo
chroot
update-initramfs

那么也foo's etc/crypttab's TARGET 必须foo否则你会看到:

cryptsetup: WARNING: target 'foo' not found in /etc/crypttab

尽管它几乎不可见update-initramfs -v

  • 在尝试使用恢复磁盘从“chroot”修复内核安装后,我遇到了同样的问题。为了安装根卷,我首先运行“cryptsetup open /dev/sda5 sda5_crypt”。正如您所提到的,您在这里选择的名称很重要。为了匹配 Ubuntu 默认,你必须以这种方式将 _crypt 添加到设备名称中。如果您的命名不正确,恢复磁盘“chroot”中的“update-initramfs”将创建一个启动映像,该启动映像在启动时无法正确解密和挂载根目录。 (4认同)

Mic*_*ann 6

仅供参考,我已经解决了。这太奇怪了,如果没有人告诉我,我永远不会发现。

问题出在文件上/etc/crypttab:它最后需要一个 EOF!

哇!怎么会这样?这是过去 25 年来第一次有些 linux 需要在文本文件中使用 EOF。天哪!

无论如何,经过一个多星期的测试,现在它已经修复了。