使用 LUKS 更新内核后,Ubuntu 21.04 挂在“正在加载初始 ramdisk”

使用 LUKS 更新内核后,Ubuntu 21.04 挂在“正在加载初始 ramdisk”

我已经从全新安装中复制了两次 - 设置最初工作正常,但是当应用内核更新时,系统在重新启动时挂起。选择 GRUB 提供的旧内核效果很好。

系统详细信息:

  • XPS 13 9380
  • i5-8265U
  • BIOS 版本 1.15.0
  • 微代码版本报告为“0xea”。 apt list 的输出 --installed | grep 微码:intel-microcode/hirsute-updates,hirsute-security,现在 3.20210608.0ubuntu0.21.04.1 amd64 [已安装,自动]
  • 我认为安全启动设置为审核模式。
  • Ubuntu 毛毛(如上所述)
  • 从 LiveUSB 安装在 LUKS 分区上
  • 目前使用的是 5.11.0-37-generic,但我也使用较旧的 5.11 内核进行了复制。绝对似乎是改变在内核版本而不是版本本身。 5.11.0-36-generic 启动,不需要异常的 GRUB 选项。

GRUB 设置我已经尝试过了绝对不行:

  • dis_ucode_ldr 和 Mitigations=off (一起或单独);
  • 无模式集
  • 消除安静的飞溅
  • 恢复
  • 调试(输出没有变化)
  • “initrd /initrd.img-5.11.0-37-generic”行后的任何形式的 echo

及其所有排列。

initrd.img 和 initrd.img.old(我可以启动)文件的 lsinitramfs 不会弹出任何明显的候选者。

它似乎可能与微代码或 cryptsetup 相关,但由于调试没有提供任何信息,并且一旦我用 36 启动,dmesg 可能会报告正常启动,所以我有点不知所措。

有什么想法吗?似乎存在相关的错误,但没有完全重现。

答案1

解决方法:使用

MODULES=dep

在里面/etc/initramfs-tools/initramfs.conf

并重新生成(替换5.11.0-37-generic为您正在使用的内核版本):

update-initramfs -c -k  5.11.0-37-generic

我遇到了与OP相同的问题。几天前更新并重新启动后,系统挂起“正在加载初始 ramdisk...”,并且没有其他输出。

我的硬件几乎相同,但 CPU 不同:i7-8565U。与 OP 中列出的软件配置相同。

另一个帖子建议如下:

该问题源于initrd.img生成的大文件(~100MB),MODULES=most由于大小限制而无法加载。这可以通过切换到MODULES=dep生成initrd.img大约 55MB 的文件来解决。

答案2

我相信我今天也遇到了这个问题,我花了几个小时才解决。解决方案是重建启动映像,该映像约为 160MB,并且可能太大(如 Sorin 所描述)。然而,这样做的过程需要一些弄清楚。

机器

  • 戴尔 XPS 9550
  • 乌班图20.04
  • UEFI启动分区:nvme0n1p2
  • LUKS加密的主分区:nvme0n1p3

症状

启动时,出现的不是 LUKS 密码提示,而是 grub 菜单。选择Ubuntu导致空白屏幕。尝试在恢复模式下启动将在冻结之前达到“加载初始 ramdisk”。与 Bereded (OP) 一样,我尝试了一系列 GRUB 配置标志和 BIOS 设置,但均无济于事。

解决方案

我们需要从 USB 启动,更改 initramfs-tools 配置,然后重建initrd.img.

  1. 从实时 USB 启动
  2. 解密/解锁主分区(替换nvme0n1p3为您的加密分区名称)
    sudo cryptsetup luksOpen /dev/nvme0n1p3 nvme0n1p3_crypt
    
  3. 将加密分区挂载到/mnt,启动分区挂载到/mnt/boot,然后 chroot/mnt
    vgscan --mknodes
    vgchange -ay
    sudo mount /dev/mapper/vgubuntu-root /mnt # may be named ubuntu--vg-root depending on your system
    sudo mount /dev/nvme0n1p2 /mnt/boot  # replace nvme0n1p2 with your boot partition
    for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
    sudo chroot /mnt
    
  4. 从 chroot shell 中,打开并编辑/etc/initramfs-tools/initramfs.conf,设置:
    MODULES=dep
    
  5. 备份您当前/最新的initrd.img.例如
    mv /boot/initrd.img-5.13.0-44-generic /boot/initrd.img-5.13.0-44-generic.bak
    
  6. 重建镜像(替换为当前内核版本)
    update-initramfs -c -k 5.13.0-44-generic
    
  7. 更新grub
    update-grub
    
  8. 退出并重新启动,您现在应该能够从重建的映像启动

故障排除

调用时为映射设备指定的名称cryptsetup luksOpen很重要 - 它应该与 crypttab 中配置的卷名称匹配(您还看不到它,因为您尚未解锁/安装分区)。按照惯例,应该是<device_name>_crypt。如果这是不正确的,您将在运行时收到以下警告update-initramfs

cryptsetup: WARNING: target '<Device UUID>' not found in /etc/crypttab

资源

答案3

输入(正确的)LUKS 密码并按 Enter 确认 - 就好像 dm-crypt 提示符在那里一样 - 对我来说,结果是正常启动。

(在当前的 Debian (netinstall) 以及 Alpine Linux 上都经历过这种情况)

相关内容