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

Gui*_*oté 5 kernel 12.04

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

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

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

我本来希望 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,但 in 仅包含相同的 9 个条目。

use*_*733 0

您问两个问题:为什么会发生这种情况,以及如何解决它?

应该发生什么

当包管理器安装新内核时,/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
Run Code Online (Sandbox Code Playgroud)

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

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

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

sudo apt-get remove linux-image-3.11.0-14-generic
Run Code Online (Sandbox Code Playgroud)

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