与多个 linux 内核映像混淆 - Ubuntu 在旧内核上启动

Kar*_*sus 5 updates apt kernel 16.04

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

alias maintain='set -x; sudo apt-get update && sudo apt-get upgrade && sudo apt autoremove && sudo apt autoclean; set +x'
Run Code Online (Sandbox Code Playgroud)

奇怪的是没有升级包,但我确实收到以下消息:

The following packages have been kept back:
Run Code Online (Sandbox Code Playgroud)

有 3 个包名称为 linux,image,headers 不记得确切名称。

这里检查后我跑了

sudo apt-get install [3 packages names here]
Run Code Online (Sandbox Code Playgroud)

并且安装的软件包没有错误或警告。考虑到内核在运行时无法完全更新,我也重新启动了我的笔记本电脑。想要检查更新是否已完成,我在终端上运行以下命令 [我在检查上一个警告时在此处找到]:

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

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

为什么我安装了多个内核映像?由于我的别名运行 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
Run Code Online (Sandbox Code Playgroud)

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

$ uname -r
4.4.0-21-generic
Run Code Online (Sandbox Code Playgroud)

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

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

更新4:我正在考虑其他角度来解决这个问题。我考虑过手动设置 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
}
Run Code Online (Sandbox Code Playgroud)

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

Kar*_*sus 2

在查看 /boot/grub/grub.cfg 后,想知道是否应该更改一些内容,我记得在设置系统时我使用了 grub-customiser。我打开它,看看会在那里找到什么。

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

$ uname -r
4.4.0-24-generic
Run Code Online (Sandbox Code Playgroud)

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

从 grub-customizer 中的一些条目中,我怀疑如果一个条目被标记为自定义,那么在安装较新的内核时它不会得到更新?没有把握。

无论如何,感谢所有评论并帮助我解决问题的人。没有你就不可能完成。