为什么 ubuntu 不使用自动更新安装的内核?

为什么 ubuntu 不使用自动更新安装的内核?

我使用了这个问题中描述的脚本列出了计算机上安装的内核:

如何删除旧内核版本来清理启动菜单?

在 3.2.0 中,我有 33、34、35、36、37、38、39、41、43、44、45 和 48。我期望在重启后运行 3.2.0-48,但我仍然运行 3.2.0-32。为什么自动更新安装的内核没有使用(并且未在 menu.lst 中提供)?

[我正在运行 12.04 LTS]

grep title /boot/grub/menu.lst 结果为:

title       Ubuntu 12.04.1 LTS, kernel 3.2.0-32-generic
title       Ubuntu 12.04.1 LTS, kernel 3.2.0-32-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-45-generic
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-45-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-44-generic
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-44-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-43-generic
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-43-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, memtest86+

我原本以为 3.2.0-33 到 3.2.0-48 之间的内核应该在这个文件中,并且默认是最新的。为什么 3.2.0-33 到 48 之间的内核没有添加到这个文件中?


当我运行时sudo dpkg-reconfigure linux-image-3.2.0-48-generic,它找到了所有其他内核,并重新生成了 menu.lst,但仅包含相同的 9 个条目。

答案1

您问了两个问题:为什么会发生这种情况?我该如何解决它?

应该发生什么

当软件包管理器安装新内核时,/etc/kernel/postinst.d/apt-auto-removal 脚本会标记上一个内核,以便在下次运行时删除。它对于大多数用户来说大多数时候都可以正常工作。

剧本比较保守。它不会删除全部旧内核,并且它倾向于保留内核,而不是错误地删除当前内核或以前的内核(以防您需要恢复)。它不会扫描以查看您已安装的所有内核 - 它只使用新内核和当前内核的版本号。

为什么没有发生

脚本中可能存在错误,不同的包管理问题可能阻止了标记,一些用户操作可能在删除之前将包标记为手动安装。确切原因未知,甚至可能无法知晓。这一切都是一幅丰富的画卷。

如何修复

修复非常简单。您需要两条信息:

  1. 当前内核(使用命令:uname -r)
  2. 安装其他内核(使用命令:ls /boot)

例子:

$ uname -r
3.11.0-15-generic

$ ls /boot
abi-3.11.0-14-generic         initrd.img-3.11.0-14-generic
abi-3.11.0-15-generic         initrd.img-3.11.0-15-generic
config-3.11.0-14-generic      System.map-3.11.0-14-generic
config-3.11.0-15-generic      System.map-3.11.0-15-generic
extlinux                      vmlinuz-3.11.0-14-generic
grub                          vmlinuz-3.11.0-15-generic

忽略所有文件名称看看所有的版本号。从示例中可以看到安装了两个内核版本:

  • 3.11.0-14-generic(可删除)
  • 3.11.0-15-generic(正在运行的内核 - 请勿删除!)

所以我们可以删除旧内核:

sudo apt-get remove linux-image-3.11.0-14-generic

当内核被删除时,包管理器将自动从 /boot 中删除所有这些文件并更新 grub 菜单。

相关内容