Grub/Ubuntu:内核升级后找不到合适的内存目标

Grub/Ubuntu:内核升级后找不到合适的内存目标

在针对 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,然后我就可以启动到新内核了。

相关内容