我已经从全新安装中复制了两次 - 设置最初工作正常,但是当应用内核更新时,系统在重新启动时挂起。选择 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
.
- 从实时 USB 启动
- 解密/解锁主分区(替换
nvme0n1p3
为您的加密分区名称)sudo cryptsetup luksOpen /dev/nvme0n1p3 nvme0n1p3_crypt
- 将加密分区挂载到
/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
- 从 chroot shell 中,打开并编辑
/etc/initramfs-tools/initramfs.conf
,设置:MODULES=dep
- 备份您当前/最新的
initrd.img
.例如mv /boot/initrd.img-5.13.0-44-generic /boot/initrd.img-5.13.0-44-generic.bak
- 重建镜像(替换为当前内核版本)
update-initramfs -c -k 5.13.0-44-generic
- 更新grub
update-grub
- 退出并重新启动,您现在应该能够从重建的映像启动
故障排除
调用时为映射设备指定的名称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 上都经历过这种情况)