我有一个简单的问题。更新内核后,除非选择旧内核,否则无法启动(卡在紫色屏幕上)。那么如何使用 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-modules
或linux-headers
相同版本的软件包以节省磁盘空间/保持系统精简。
更新 - 2020-05-21
/boot
明确清除旧内核可能会导致意外结果。除非位于其自己的小分区(空间不足),否则不建议这样做。
參閱@ZAB的方法来摆脱引入错误(破坏事物)的最新内核更新。
没有(我个人还没有找到)与 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