在针对 Spectre 和 Meltdown 问题(可能不相关)的新内核版本发布后不久,我安装了最新的内核更新,当时是 4.13.0-25.29。我一重新启动就收到 Grub 错误“找不到合适的内存目标”。
我发现使用以前的内核可以修复该问题。到目前为止,这是正常工作和损坏的内核的列表。
4.13.0-21.24 有效
4.13.0-25.29 错误
4.13.0-31.34 错误
4.13.0-32.35 错误
有什么办法可以解决这个问题,以便使用较新的内核而不需要重新安装操作系统?
在 /etc/default/grub 中:
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
/boot/grub/grub.cfg:
# Broken entry (disk UUID has been replaced)
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-[DISK-UUID]' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root [DISK-UUID]
else
search --no-floppy --fs-uuid --set=root [DISK-UUID]
fi
linux /boot/vmlinuz-4.13.0-32-generic.efi.signed root=UUID=[DISK-UUID] ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.13.0-32-generic
}
# Working entry (disk UUID has been replaced)
menuentry 'Ubuntu, with Linux 4.13.0-21-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.13.0-21-generic-advanced-[DISK-UUID]' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root [DISK-UUID]
else
search --no-floppy --fs-uuid --set=root [DISK-UUID]
fi
echo 'Loading Linux 4.13.0-21-generic ...'
linux /boot/vmlinuz-4.13.0-21-generic.efi.signed root=UUID=[DISK-UUID] ro quiet splash $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-4.13.0-21-generic
}
系统信息:
- Ubuntu 17.10
- 英特尔® 酷睿™ i7-5930K CPU @ 3.50GHz × 12
- GeForce GTX 1080/PCIe/SSE2
- Gnome 3.26.2
- 操作系统类型 64位
- 主磁盘 m.2 SSD
- Grub 2.02~beta3-4ubuntu7.1
答案1
我刚刚遇到了同样的问题。这是因为我的初始 ramdisk 太大了。我不知道多大才算太大,但我的新内核的 initrd 大约比 Ubuntu 的默认 initrd 大 10 倍。
解决方案是从内核模块中删除不需要的符号。我不是内核开发人员,所以模块中的符号对我来说没用。我发现这个线程提供了一种快速删除符号的方法:https://unix.stackexchange.com/questions/270390/how-to-reduce-the-size-of-the-initrd-when-compiling-your-kernel
完成后,我重建了 initrd,它的大小与默认 initrd 映像的大小接近。然后我运行 update-grub,然后我就可以启动到新内核了。