为什么 GrUB 找不到已经找到的内核?

为什么 GrUB 找不到已经找到的内核?

升级到 15.04 后,我需要有与正在运行的内核匹配的内核头(对于另一个包)。

升级安装了内核 3.19.0-17。为了以防万一,我还安装了linux-headers-generic。然后,我运行sudo update-grub并重新启动。然而,系统启动到了内核 3.16.0-31(经确认uname -r)。

经过大量挖掘,我发现 GrUB 可以识别 中的 3.19 内核update-grub,甚至将其填充到 中/boot/grub/menu.lst。然而,在启动时,GrUB启动菜单仅能识别 3.16 版以下的内核我该如何修复这个问题,以便 GrUB 可以启动到 3.19?


以下是我当前系统的一些输出。

sudo update-grub总是产生以下输出:

$ sudo update-grub
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-3.19.0-17-generic
Found kernel: /boot/vmlinuz-3.16.0-31-generic
Found kernel: /boot/vmlinuz-3.13.0-40-generic
Found kernel: /boot/vmlinuz-3.11.0-19-generic
Found kernel: /boot/vmlinuz-3.8.0-35-generic
Found kernel: /boot/memtest86+.bin
Found kernel: /boot/vmlinuz-3.19.0-17-generic
Found kernel: /boot/vmlinuz-3.16.0-31-generic
Found kernel: /boot/vmlinuz-3.13.0-40-generic
Found kernel: /boot/vmlinuz-3.11.0-19-generic
Found kernel: /boot/vmlinuz-3.8.0-35-generic
Found kernel: /boot/memtest86+.bin
Updating /boot/grub/menu.lst ... done

/boot/grub/menu.lst运行之后打开update-grub,第一个选项是:

title        Ubuntu 15.04, kernel 3.19.0-17-generic
uuid        ac9d0eaf-e090-4c29-8e7b-30e98ed07d29
kernel        /boot/vmlinuz-3.19.0-17-generic root=UUID=ac9d0eaf-e090-4c29-8e7b-30e98ed07d29 ro quiet splash
initrd        /boot/initrd.img-3.19.0-17-generic

但是,Shift在启动过程中按住,没有选择 3.19 的选项(尽管我可以选择其他任何版本)。启动后,uname -r确认它已启动到 3.16:

$ uname -r
3.16.0-31-generic

从中裁剪的输出dpkg -l显示 3.19 内核确实已安装:

ii  linux-headers-3.19.0-17                              3.19.0-17.17                               all          Header files related to Linux kernel version 3.19.0
ii  linux-headers-3.19.0-17-generic                      3.19.0-17.17                               amd64        Linux kernel headers for version 3.19.0 on 64 bit x86 SMP
ii  linux-headers-generic                                3.19.0.17.16                               amd64        Generic Linux kernel headers

我也尝试过清除/重新安装 grub 和标头以及其他一些没有任何后果的事情。

答案1

旧版本的 GRUB (0.9.7) 可能用于menu.lst确定要显示的内容,而新版本的 GRUB (GRUB 2)grub.cfg则使用。看起来您安装了 GRUB 和 GRUB 2 的混合版本。

使用软件包update-grub中的grub命令将更新menu.lst文件,如果引导加载程序是 GRUB 2,则实际上不会执行任何操作,这正是此处发生的情况。相反,您应该安装grub2-common(这应该会卸载grub软件包)。然后,在运行时update-grub(或update-grub2;两者执行相同的操作),grub.cfg文件会得到更新。

答案基于回答。

相关内容