如果最新的内核更新导致问题(原始问题),大多数人的最佳选择是回滚到之前正常工作的内核(前提是至少保留1个回滚选项)。
否则,使用@ZAB的解决方案通过apt
软件包管理器安装指定版本的内核。
一般情况下,要删除不需要的过时内核,请打开终端会话并运行以下命令:
重要提示:如果/boot
不在其独立分区上(空间不足),请避免显式清除旧内核。将它们视为升级出现问题(硬件驱动程序模块等)时的备份/回退选项。
有关内核升级和保留机制的好文章:Ubuntu上的apt
如何决定保留多少个旧内核
TL;DR: 查看由后置安装挂钩(脚本)生成的/etc/apt/apt.conf.d/01autoremove-kernels
文件。
5.4.0
以便更好地理解:// 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
软件包以节省磁盘空间/保持系统精简。
明确清除旧内核可能会导致意外结果。除非/boot
位于自己的小分区(空间不足),否则不建议这样做。
请参考@ZAB提出的方法来摆脱最新的内核更新引入的错误(破坏事物)。
(我个人没有找到)没有类似Fedora/RHEL/CentOS的简单等效方法,可以通过设置installonly_limit=2
告诉DNF或YUM仅保留最新的两个内核。
linux-current-generic
或linux-image-generic-lts-raring
。请运行以下命令以更新软件包并进行升级:sudo apt-get update && apt-get dist-upgrade -y
。 - Terry Wanglinux-image-generic-*
。系统将停止获取内核更新,并且之后的 autoremove
调用会删除旧的内核,这将完全破坏你的系统。 - ZABinstallonly_limit=2
方法。 - Terry Wang/etc/apt/apt.conf.d/01autoremove-kernels
,该文件解释了默认内核升级和保留机制的工作原理。无论如何,如果磁盘空间不是问题,请让系统保持默认设置。 - Terry Wanglinux-image-generic-
和linux-generic-
的依赖项进行安装和更新。如果您只删除最新的内核镜像和所有相关的软件包,这也会导致主要软件包被删除,之后一切都会崩溃,将没有更新,并且已安装的内核将变成孤立状态,并在随后的autoremove
调用后被删除。 - ZABDEFAULT=saved
和 GRUB_SAVEDEFAULT=true
添加到 /etc/default/grub
,运行 sudo update-grub
,重新启动并从高级引导选项子菜单中选择较旧的工作内核版本也是一种可能的解决方法...直到维护人员修复存储库中的错误。 - ZABapt
工具给出的提示。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
,检查输出,在我这种情况下一切都看起来正常,所以我同意并重新启动。
sudo apt-get remove linux-image-3.5.0-40*.
dpkg -l | grep linux-image
sudo apt-get purge linux-image-unsigned-5.4.0-81-generic
从 dpkg -l
列表中选择适当的名称
sudo rm -r /lib/modules/5.4.0-81-generic
核心可能以各种不同的形式出现
sudo apt autoremove linux-headers-generic-hwe-18.04