Jam*_*esH 7 apt grub2 dpkg kernel
我一直在研究有关如何清理旧 Linux 内核的各种问题。他们似乎都有不同的答案,他们已经老了,所以肯定有人会说这个问题太老了,开始新的帖子,所以这里是:
我想做以下所有事情:
我不想要的:
让我们为内核构建问题提供一个全面的解决方案。在升级之前,我目前正在使用旧版本的 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条目最初是如何到达那里的?
旧内核的积累直到 /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 支持渠道中寻求一对一帮助。
| 归档时间: |
|
| 查看次数: |
4166 次 |
| 最近记录: |