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

ima*_*ett 5 boot kernel grub-legacy 15.04

升级到 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
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

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

$ uname -r
3.16.0-31-generic
Run Code Online (Sandbox Code Playgroud)

从 a 中截取的输出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
Run Code Online (Sandbox Code Playgroud)

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

sai*_*895 4

旧版本的 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文件会被更新。

根据这个答案来回答。