升级到 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
文件会得到更新。
答案基于这回答。