Dav*_*ave 20 package-management synaptic uninstall boot kernel
我有。一个简单的问题。更新内核后,除非选择旧内核,否则无法启动(卡在紫色屏幕上)。那么如何使用突触删除新内核。我如何安全地做到这一点?我在 Quantal Quetzel。我的内核是 3.5.0-40。工作内核是 3.5.0-39。另外,如何阻止内核更新出现在更新管理器中?谢谢。
Ter*_*ang 29
如果最新的内核更新破坏了事情(原始问题),对大多数人来说,最好的选择是回退到以前的工作内核(前提是您至少保留 1 个回退选项)。
否则,使用@ZAB的解决方案来安装通过apt包管理器提供的内核版本的特定版本。
一般来说,要删除不需要的过时内核,请打开终端会话并运行以下命令:
重要提示:如果/boot不在它的小分区上(空间不足),请避免明确清除旧内核。当升级引入问题(硬件驱动程序模块等)时,请考虑它们的备份/回退选项。
良好的阅读内核升级和保护机制:如何apt在Ubuntu决定多少老的内核,以保持
TL;DR:看看/etc/apt/apt.conf.d/01autoremove-kernels由 postinstall hook(脚本)生成的文件。
运行 Ubuntu 20.04 LTS 的片段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$";
};
Run Code Online (Sandbox Code Playgroud)
dpkg -l | grep linux-image
Run Code Online (Sandbox Code Playgroud)
在撰写本文时,关于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
Run Code Online (Sandbox Code Playgroud)
如果您想进行深度清理(剩余的包配置...),请谨慎使用:
dpkg -l | grep linux-image
Run Code Online (Sandbox Code Playgroud)
注意:对于 Ubuntu 18.04 LTS 或更高版本,您可能还想删除任何linux-modules或linux-headers相同版本的软件包以节省磁盘空间/保持系统精简。
显式清除旧内核可能会导致意外结果。不推荐,除非/boot是在它自己的小分区上(空间不足)。
请参阅@ZAB的方法以摆脱引入错误(破坏事物)的最新内核更新。
通过设置installonly_limit=2告诉 DNF 或 YUM 只保留最新的 2 个内核,没有(我个人没有发现)简单的等效于 Fedora/RHEL/CentOS 的方法。
不要盲目地按照已接受答案中的建议进行操作。它会破坏你的系统。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)
...
Run Code Online (Sandbox Code Playgroud)
我们不需要这个包,请按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)
....
Run Code Online (Sandbox Code Playgroud)
这个包很重要,这是为我们提供内核更新的主要分发包。我们需要重新安装它的以前版本。所以按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
Run Code Online (Sandbox Code Playgroud)
让我们将这个我们不喜欢的新版本列入黑名单。编辑文件/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
Run Code Online (Sandbox Code Playgroud)
重复sudo apt install linux-generic-hwe-18.04=5.3.0.51.104 --verbose-versions检查输出,就我而言,一切似乎都很好,所以我同意并重新启动。
| 归档时间: |
|
| 查看次数: |
50746 次 |
| 最近记录: |