我正在运行 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 中的某些条目来看,我怀疑如果某个条目被标记为自定义,那么在安装新内核时它是否不会更新?不确定。
无论如何,感谢每一位评论并帮助我解决问题的人。没有你们,我不可能做到。