多个 Linux 内核镜像的混淆 - Ubuntu 在旧内核上启动

多个 Linux 内核镜像的混淆 - Ubuntu 在旧内核上启动

我正在运行 Ubuntu 16.04。在软件更新提示后,我放弃了,在启动时我打开了一个终端并运行我的更新别名:

alias maintain='set -x; sudo apt-get update && sudo apt-get upgrade && sudo apt autoremove && sudo apt autoclean; set +x'

奇怪的是,没有任何软件包得到升级,但我确实收到了以下消息:

The following packages have been kept back:

有 3 个包的名称分别为 linux、image、headers,但不记得具体名称。

检查后这里我跑

sudo apt-get install [3 packages names here]

软件包安装后没有出现错误或警告。考虑到内核在运行时无法完全更新,我还重新启动了笔记本电脑。为了检查更新是否完成,我在终端上运行了以下命令 [我在检查上一个警告时在这里找到的]:

$ uname -r
4.4.0-21-generic
$ dpkg -l | grep linux-image
ii  linux-image-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-22-generic 4.4.0-22.40 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-24-generic 4.4.0-24.43 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-22-generic 4.4.0-22.40 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-24-generic 4.4.0-24.43 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-generic 4.4.0.24.25 amd64 Generic Linux kernel image

除了我有三个而不是两个内核图像之外,问题是:

为什么我安装了多个内核映像?由于我的别名运行 autoremove/autoclean [并且我再次重新启动并重新运行别名以防万一],难道不应该删除它们吗?此外,在重新启动后,Ubuntu 不应该使用最新的内核版本吗?

update1: ls /boot 结果:

$ ls /boot
abi-4.4.0-21-generic     config-4.4.0-22-generic      initrd.img-4.4.0-22-generic  memtest86+_multiboot.bin     vmlinuz-4.4.0-21-generic
abi-4.4.0-22-generic     config-4.4.0-24-generic      initrd.img-4.4.0-24-generic  System.map-4.4.0-21-generic  vmlinuz-4.4.0-22-generic
abi-4.4.0-24-generic     grub                         memtest86+.bin               System.map-4.4.0-22-generic  vmlinuz-4.4.0-24-generic
config-4.4.0-21-generic  initrd.img-4.4.0-21-generic  memtest86+.elf               System.map-4.4.0-24-generic

update2:运行sudo update-grub并重新启动后我仍然得到:

$ uname -r
4.4.0-21-generic

我还记得在安装新的内核包时从终端输出看到 grub 正在更新。

update3:我尝试从 grub2 高级启动选项启动到内核 4.4.0-24,然后sudo update-grub再次运行。但再次重启后uname -r仍然显示 4.4.0-21 :(

update4:我正在考虑从其他角度来解决这个问题。我考虑过手动设置 grub 以在新内核上加载,但这只是一种解决方法,而不是解决办法,因为每次下载新内核时我都需要再次执行此操作。在此期间,我记得我曾使用 grub-customizer 进行过一些小调整(因为我正在使用 win7 进行双启动)。如果有人能发现问题所在以及如何修复,我将粘贴 /boot/grub/grub.cfg 中的相关条目。这是来自 ubuntu 的菜单项和来自高级启动选项的 2 个(共 9 个)子菜单项:

# # BEGIN /etc/grub.d/40_custom_proxy ###
menuentry "Ubuntu 16" --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-4e2b96c0-04a0-4750-bd14-479f684bf3be' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd0,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5  4e2b96c0-04a0-4750-bd14-479f684bf3be
else
  search --no-floppy --fs-uuid --set=root 4e2b96c0-04a0-4750-bd14-479f684bf3be
fi
linux   /boot/vmlinuz-4.4.0-21-generic root=UUID=4e2b96c0-04a0-4750-bd14-479f684bf3be ro  quiet splash $vt_handoff
initrd  /boot/initrd.img-4.4.0-21-generic
}
# ## END /etc/grub.d/40_custom_proxy ###

menuentry "Ubuntu, with Linux 4.4.0-21-generic" --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-4e2b96c0-04a0-4750-bd14-479f684bf3be' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos5'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5  4e2b96c0-04a0-4750-bd14-479f684bf3be
    else
      search --no-floppy --fs-uuid --set=root 4e2b96c0-04a0-4750-bd14-479f684bf3be
    fi
    echo    'Loading Linux 4.4.0-21-generic ...'
    linux   /boot/vmlinuz-4.4.0-21-generic root=UUID=4e2b96c0-04a0-4750-bd14-479f684bf3be ro  quiet splash $vt_handoff
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-4.4.0-21-generic
}

menuentry "Ubuntu, with Linux 4.4.0-24-generic" --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-24-generic-advanced-4e2b96c0-04a0-4750-bd14-479f684bf3be' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos5'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5  4e2b96c0-04a0-4750-bd14-479f684bf3be
    else
      search --no-floppy --fs-uuid --set=root 4e2b96c0-04a0-4750-bd14-479f684bf3be
    fi
    echo    'Loading Linux 4.4.0-24-generic ...'
    linux   /boot/vmlinuz-4.4.0-24-generic root=UUID=4e2b96c0-04a0-4750-bd14-479f684bf3be ro  quiet splash $vt_handoff
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-4.4.0-24-generic
}

我不确定这有多大关系 - 而且该文件应该不会被更改。但我猜想无论问题是什么,它都可以在该文件中创建一个可以识别的足迹。(希望如此。)

答案1

在查看 /boot/grub/grub.cfg 后,我犹豫着是否应该更改一些东西,我记起在设置系统时曾使用过 grub-customiser。我打开它看看能找到什么。

Ubuntu 和 Windows 7 的条目都被删除了。不知何故,被删除的 Ubuntu 条目的详细信息中包含版本 4.4.0-24(可能是 update-grub 自动更新了它?)。我不确定。我删除了我的条目,并将其恢复为第一个选项。现在 Ubuntu 加载最新安装的内核:

$ uname -r
4.4.0-24-generic

我希望一切都能顺利进行。(至少到下一次内核更新为止。)

从 grub-customizer 中的某些条目来看,我怀疑如果某个条目被标记为自定义,那么在安装新内核时它是否不会更新?不确定。

无论如何,感谢每一位评论并帮助我解决问题的人。没有你们,我不可能做到。

相关内容