你如何从终端中删除旧内核

Jam*_*esH 7 apt grub2 dpkg kernel

我一直在研究有关如何清理旧 Linux 内核的各种问题。他们似乎都有不同的答案,他们已经老了,所以肯定有人会说这个问题太老了,开始新的帖子,所以这里是:

我想做以下所有事情:

  1. 在终端中手动删除旧的 Linux 内核。
  2. 删除所有配置文件
  3. 删除所有头文件
  4. 删除不必要的inode?
  5. 解释为什么 dpkg -l | grep linux-image 返回的结果与我在启动期间在 grub2 列表中看到的结果不同
  6. dpkg -l | 解释rc vs ii grep linux-image 列表
  7. 解释 /usr/src 目录(或在其他 Ubuntu 版本中找到这些文件的任何位置)中的条目与上述两种确定多余内核版本的方法之间的差异。
  8. 完全清理旧内核的后果是什么。我需要担心依赖关系吗?我如何知道我的计算机上是否有任何应用程序依赖于旧内核的配置文件。

我不想要的:

  • 指向您未亲自测试或未解决完整清理中涉及的所有问题的其他答案的链接。
  • 您没有亲自测试过的任何答案。
  • 尝试一次自动清理所有内容的脚本。我只想手动执行此操作,直到我完全了解正在发生的一切。

让我们为内核构建问题提供一个全面的解决方案。在升级之前,我目前正在使用旧版本的 Ubuntu (10.04),但我在使用 Ubuntu 12.04 时遇到了同样的问题。如果不同版本的解决方案不同,请说明您用于测试解决方案的版本。

什么工作:

uname -r
Run Code Online (Sandbox Code Playgroud)

这正确返回了我当前使用的内核版本。

不起作用的事情:

sudo apt-get autoremove
sudo apt-get clean
sudo apt-get autoremove linux-image-x.x.xx-xx-generic
Run Code Online (Sandbox Code Playgroud)

我认为应该有效,但没有:

sudo apt-get purge linux-image-x.x.xx-xx-generic
Run Code Online (Sandbox Code Playgroud)

这有助于减少由dpkg -l | grep linux-image以下生成的列表:

sudo dpkg --purge linux-image-x.x.xx-xx-generic
Run Code Online (Sandbox Code Playgroud)

这里也是这个rc/ii问题的一个良好开端:

ii表示“应该安装并安装”,而 rc表示“已删除/卸载,但配置文件仍然存在”。

我认为这解决了启动时终端列表和 grub2 菜单之间差异的问题。我记得,这些ii列表与 grub2 列表相匹配。这里的问题是这些ii条目最初是如何到达那里的?

use*_*733 7

旧内核的积累直到 /boot 已满,从而破坏 apt,这是一个错误:LP #1357093,在 Ubuntu 16.04 和更新版本的所有版本中都实施了修复。

大多数注意到这个问题的用户安装了“全盘加密”,这会创建一个很小的未加密的 /boot 分区。由于它很小,分区很快就会填满,这些用户比其他用户更早地注意到这个问题。

安装新内核时,/etc/kernel/postinst.d/apt-auto-removal 脚本会将旧内核标记为符合自动删除条件...但不会运行 autoremove。缺少 autoremove 最初是为了让人们可以查看已删除软件包的列表。

LP #1357093的错误修正适用于大多数用户 - 如果它对您不起作用,那么还有另一个潜在原因阻止旧内核包被 apt 标记为符合自动删除条件。在 Ubuntu 支持渠道中寻求一对一的帮助。

在旧版本的 Ubuntu 中,您必须修复旧内核以手动保留空间。您如何手动修复它取决于您的 /boot 是否已满。大多数用户在 /boot 已满之前不会注意到问题,并且他们收到 apt 和 dpkg no-space-left-on-device 错误。

如果 /boot 未满,并且 apt 正常工作,一个简单的

sudo apt-get autoremove      ## Ubuntu 14.04 and older
sudo apt autoremove          ## Ubuntu 16.04 and newer
Run Code Online (Sandbox Code Playgroud)

应该删除所有符合自动删除条件的内核包。

如果 /boot 已满,并且 apt 操作失败并显示 dpkg 错误“设备上没有剩余空间”,则使用 autoremove 为时已晚。

为时已晚,因为 Aptdaemon 将包操作排队。Autoremove 位于队列的后面,当任何操作失败时, apt 会中止整个剩余的队列......包括空间不足。(这可以说是 apt/aptdaemon 中的一个错误)

这里的最佳实践是使用 'uname' 和 'dpkg' 删除一两个旧内核,为 apt 释放空间以完成它的排队操作。然后自动删除将起作用。

例子:

$ uname -r
3.16.0-36-generic    ## This is kernel you MUST NOT remove.

$ dpkg -l | grep linux-image
rc  linux-image-3.16.0-23-generic    ## 'rc' means already removed
rc  linux-image-3.16.0-28-generic    ## 'rc' can be safely ignored
rc  linux-image-3.16.0-29-generic
ii  linux-image-3.16.0-30-generic    ## 'ii' means installed. Removable
ii  linux-image-3.16.0-31-generic    ## Removable
ii  linux-image-3.16.0-33-generic    ## Removable
ii  linux-image-3.16.0-34-generic    ## Backup working kernel. Don't remove
ii  linux-image-3.16.0-36-generic    ## Current kernel. DO NOT REMOVE

## Use dpkg to remove one older kernel, freeing enough space for apt to work
$ sudo dpkg --remove linux-image-3.16.0-30-generic
$ sudo apt-get autoremove     ## Ubuntu 14.04 and older
$ sudo apt autoremove         ## Ubuntu 16.04 and newer
Run Code Online (Sandbox Code Playgroud)

如果你长期忽略这个问题,那么就会出现二阶效应,比如linux-image-generic指向错误的内核版本,以及apt依赖错误。没有单一的方法可以同时解决所有这些问题。

通常,清除大多数这些问题的简单方法是从本地包缓存中清除旧包,更新包数据库,然后从 Ubuntu 存储库(而不是本地缓存)重新安装有问题的包。

$ sudo apt-get update       ## Refresh the package database (14.04 and older)
$ sudo apt update           ##                              (16.04 and newer)

$ sudo apt-get autoclean    ## Delete the obsolete packages from your local cache (14.04 and older)
$ sudo apt autoclean        ##                                                    (16.04 and newer)

$ sudo apt-get install --reinstall <packagename>     ## Reinstall the offending package with the latest version in the Ubuntu repositories (14.04 and older)
$ sudo apt install --reinstall <packagename>         ##                (16.04 and newer)
Run Code Online (Sandbox Code Playgroud)

如果您仍然遇到 apt 和/或 dpkg 错误,请在 Ubuntu 支持渠道中寻求一对一帮助。


小智 0

您可以执行以下命令来查找已安装的内核列表。

rpm -q 内核

找到内核列表后,执行以下命令删除内核。

sudo apt-get 删除 linux-image-xxxx-generic