更新后如何删除不工作的内核?

更新后如何删除不工作的内核?

我有一个简单的问题。更新内核后,除非选择旧内核,否则无法启动(卡在紫色屏幕上)。那么如何使用 synaptic 删除新内核。我该如何安全地执行此操作?我在 Quantal Quetzel。我的内核是 3.5.0-40。工作内核是 3.5.0-39。此外,如何阻止内核更新出现在更新管理器中?谢谢。

答案1

如果最新的内核更新导致问题(原始问题),那么对于大多数人来说,最好的选择是恢复到以前工作的内核(前提是你保留至少 1 个回退选项)。

否则,使用@ZAB的解决方案是通过包管理器安装提供的特定版本的内核版本apt

一般来说,要删除不需要的过时内核,请打开终端会话并运行以下命令:

重要的:如果/boot不在小分区上(空间不足),请避免明确清除旧内核。当升级引入问题(硬件驱动程序模块等)时,请考虑使用备份/后备选项。

关于内核升级和保存机制的好文章Ubuntu如何apt决定保留多少旧内核

总结:查看/etc/apt/apt.conf.d/01autoremove-kernels由 postinstall 钩子(脚本)生成的文件。

5.4.0为了更好地理解,以下是 Ubuntu 20.04 LTS 运行的代码片段:

// DO NOT EDIT! File autogenerated by /etc/kernel/postinst.d/apt-auto-removal
APT::NeverAutoRemove
{
   "^linux-.*-5\.4\.0-28-generic$";
   "^linux-.*-5\.4\.0-29-generic$";
   "^linux-.*-5\.4\.0-31-generic$";
   "^kfreebsd-.*-5\.4\.0-28-generic$";
   "^kfreebsd-.*-5\.4\.0-29-generic$";
   "^kfreebsd-.*-5\.4\.0-31-generic$";
   "^gnumach-.*-5\.4\.0-28-generic$";
   "^gnumach-.*-5\.4\.0-29-generic$";
   "^gnumach-.*-5\.4\.0-31-generic$";
   "^.*-modules-5\.4\.0-28-generic$";
   "^.*-modules-5\.4\.0-29-generic$";
   "^.*-modules-5\.4\.0-31-generic$";
   "^.*-kernel-5\.4\.0-28-generic$";
   "^.*-kernel-5\.4\.0-29-generic$";
   "^.*-kernel-5\.4\.0-31-generic$";
};

查找内核包名称

dpkg -l | grep linux-image

在撰写本文时,amd64/x86_64 架构上的图像名称是:linux-image-$(uname -r)-generic

对于未签名的内核映像(如由 nvidia 驱动程序创建的映像),该映像可能是:linux-image-unsigned-4.20.17-042017-generic

删除(清除 - 同时删除所有配置文件)

sudo apt-get purge linux-image-3.5.0-40-generic

如果您想进行深度清理(剩余的包配置......),请谨慎使用:

dpkg -l | awk '/^rc/ { print $2 }' | xargs apt-get purge -y
dpkg -l | awk '/^rc/ { print $2 }' | xargs dpkg -P

笔记:对于 Ubuntu 18.04 LTS 或更高版本,您可能还想删除任何linux-moduleslinux-headers相同版本的软件包以节省磁盘空间/保持系统精简。

更新 - 2020-05-21

/boot明确清除旧内核可能会导致意外结果。除非位于其自己的小分区(空间不足),否则不建议这样做。

參閱@ZAB的方法来摆脱引入错误(破坏事物)的最新内核更新。

Ubuntu wiki 上有关删除旧内核的内容

没有(我个人还没有找到)与 Fedora/RHEL/CentOS 方法相同的简单方法,即通过设置installonly_limit=2告诉 DNF 或 YUM 仅保留最新的 2 个内核。

答案2

不要盲目地按照已接受答案中的建议去做。这会破坏你的系统。apt在按下 之前,请阅读实用程序告诉你的内容y

以下步骤用于删除有问题的内核5.3.0-53。之前工作的内核是5.3.0-51

第一次运行sudo apt remove linux-image-5.3.0-53-generic --verbose-versions并读取输出:

...
The following NEW packages will be installed:
  linux-image-unsigned-5.3.0-53-generic (5.3.0.53.109)
...

我们不需要这个包,按下n并要求删除它 sudo remove linux-image-5.3.0-53-generic linux-image-unsigned-5.3.0-53-generic --verbose-versions现在打印这个:

....
The following packages will be REMOVED:
 linux-generic-hwe-18.04 (5.3.0.53.109)
 ....

这个包很重要,它是为我们提供内核更新的主要分发包。我们需要重新安装它的前一个版本。因此,请按 并y找到前一个好的内核版本。在我的情况下是5.3.0.51.104。尝试重新安装它sudo apt install linux-generic-hwe-18.04=5.3.0.51.104 --verbose-versions,打印以下内容:

The following packages have unmet dependencies:
 linux-generic-hwe-18.04 : Depends: linux-image-generic-hwe-18.04 (= 5.3.0.51.104)  but 5.3.0.53.109 is to be installed
                           Depends: linux-headers-generic-hwe-18.04 (= 5.3.0.51.104) but 5.3.0.53.109 is to be installed

让我们将这个我们不喜欢的新版本列入黑名单。编辑文件/etc/apt/preferences并添加以下内容:

Package: linux-generic-hwe-18.04 linux-image-generic-hwe-18.04 linux-headers-generic-hwe-18.04
Pin: version 5.3.0.53.109
Pin-Priority: -1

重复sudo apt install linux-generic-hwe-18.04=5.3.0.51.104 --verbose-versions检查输出,就我而言,一切似乎都很好,所以我同意并重新启动。

答案3

sudo apt-get remove linux-image-3.5.0-40*.

我建议您始终保留至少一个可用的旧内核,以防万一您因为现在可能永远无法预料的原因而需要启动它。

答案4

这个问题的其他答案似乎都不正确。完整的答案是两者的混合,并进行了一些进一步的修正;

sudo apt-get purge *4.18.0-21*

4.18.0-21是你的内核的编号,使用ls /boot来查看它。

这就是我所做的(尽管为了摆脱它不得不运行两次类似的命令/lib/modules/4.18.0-21-generic)。

谨慎使用此命令以确保不会删除任何必要的内容。

有趣的是,在我的情况下linux-headers-generic-hwe-18.04也被删除了,当我尝试重新安装它时,它想再次安装最新的内核,所以我没有这样做。而且,研究确实证明它是 4.18.0-21 内核的一部分;https://packages.ubuntu.com/bionic-updates/linux-headers-generic-hwe-18.04

相关内容