我怎样才能始终启动旧内核并避免使用有缺陷的新内核?

我怎样才能始终启动旧内核并避免使用有缺陷的新内核?

在我的系统中我安装了以下内核版本:

Found linux image: /boot/vmlinuz-5.4.0-107-generic
Found initrd image: /boot/initrd.img-5.4.0-107-generic

Found linux image: /boot/vmlinuz-5.4.0-105-generic
Found initrd image: /boot/initrd.img-5.4.0-105-generic

Found linux image: /boot/vmlinuz-5.4.0-104-generic
Found initrd image: /boot/initrd.img-5.4.0-104-generic

我一直使用最新版本,但最近几天我不得不使用该5.4.0-104-generic版本,因为如果我让我的系统使用5.4.0-105-generic或者5.4.0-107-generic我的系统在登录后冻结,我需要使用关机按钮关闭。

我以前从未见过这种情况。我该怎么办?是否可以5.4.0-104-generic永久保留该版本(仅限有效的版本)?我担心该版本可能会从我的系统中消失,我不知道。

答案1

另一个有用的技巧是让 grub 默认为最后启动的内核。编辑 /etc/default/grub 文件以包含以下行:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

然后运行

sudo update-grub

此更改将使您上次启动的内核成为默认内核,因此在您启动另一个内核之前,它将一直运行。不过,您可能希望备份/复制 104 个软件包,而不是依赖软件包管理器足够聪明来不清除正在运行的内核——可能只是出于偏执,但除非您关闭/避免内核/头文件更新,否则自动删除可能会搞砸。

答案2

首先,您应该尝试辨别新内核的问题是什么。

要持久启动到您选择的内核:

有很多方法可以解决此问题。其他答案中提到了一些方法,主要是将 grub 设置为默认启动到所需的内核。

如果我处于同样的情况,并且我想在测试时轻松切换。在 /etc/default/grub 中,您可以编辑:

GRUB_DEFAULT=已保存

进而update-grub

然后从那时起,任何时候您想要测试或设置默认内核,您只需使用sudo grub-set-default <your menuentry selection>并重新启动即可。

<your menuentry selection>将成为您的 grub 菜单项或条目列表编号...

如果你的 Grub 菜单如下所示:

Ubuntu系统设置的Ubuntu
高级选项

然后 Ubuntu=0,Ubuntu 的高级选项=1,系统设置=3
因为您正在处理 1 的子菜单,所以您也必须注意这一点。

在“Ubuntu 高级选项”下可能有类似的东西:

Ubuntu,带有 Linux 5.4.0-107-generic
Ubuntu,带有 Linux 5.4.0-107-generic(恢复模式)
Ubuntu,带有 Linux 5.4.0-105-generic
Ubuntu,带有 Linux 5.4.0-105-generic(恢复模式)
Ubuntu,带有 Linux 5.4.0-104-generic
Ubuntu,带有 Linux 5.4.0-104-generic(恢复模式)

在基于 0 的枚举中,104 内核将是数字 4

然后您可以设置新的默认值,例如: sudo grub-set-default "1>4"然后重新启动

或者

sudo grub-set-default "Advanced options for Ubuntu>Ubuntu, with Linux 5.4.0-104-generic然后重新启动。

有简单的搜索方法可以从 /boot/grub/grub.cfg 中提取菜单项,这样您就可以获得正确的名称和编号,而无需打开文件并查找...大多数都是对文件进行 grep 或 awk 并返回菜单项结果,因为它在文件中找到它们并为其分配序列号。

获得(无序)列表的一种快速而粗略的方法是只需键入grub-set-default然后按 TAB 键几次,直到自动完成输出。 (此命令不会提供正确的数字)

这将保持不变,直到您更改已保存的默认值。

您可以使用以下方式查看saved_entry:
cat /boot/grub/grubenv

为了防止在此期间进行任何进一步的更新:

你只需不安装更新...只需取消选中与这些更新相关的任何复选框即可......“5.4.0-1XX”... Linux 映像和头文件...(此处显示不相关的系统) 在此处输入图片描述

在我的系统上,我运行了sudo apt update然后sudo apt list --upgradable
然后我在“可升级列表”中搜索任何与下一个内核升级类似的内容... 在我的情况下是 4.15.0.175... 我找到了 linux-generic、linux-headers-generic 和 linux-image-generic。

我可以简单地在 GUI 中取消选中这些,但我知道我不会关注那里发生了什么。因此,我将永久将这些包设置为“抓住“。
sudo apt-mark hold linux-generic linux-headers-generic linux-image-generic

apt-mark showhold验证...

这时候别把事情搞砸了……不要转到该框并点击“立即安装”,不要取消选中这些框。如果您使用 apt upgrade,则暂停会在命令行上停止安装这些软件包(说实话,我在尝试升级之前重新启动了,所以我对这个评估不是 100% 有信心),但我不知道后台是否有什么东西可以阻止这个已经打开的框执行它知道要做的事情,即安装所有“已检查”的软件包。所以关闭软件更新程序如果您想看到更改生效,请重新打开它。apt-mark hold基本上它会为您取消选中这些框(并且不再允许您选中它们),直到您取消选中它们。[我第一次尝试这个时失败了,但这可能是因为我试图保留一个特定的内核...不要那样做,只需保留没有版本的包即可]

当我使用任一方法升级时,下一个内核都没有安装。

现在,如果只有这些软件包需要升级,Software Updater 会说我的系统是最新的。如果是这样,sudo apt list --upgradable我会看到这 3 个软件包的最新版本。

...为了解决 OP 的“担忧”...您始终可以从存储库重新安装内核。您的系统可能仍可通过控制台访问。

答案3

您可以使用Ubuntu mainline kernel installer来(卸载)安装内核。它是图形化的(GUI),因此您不必使用terminal。您可以卸载 107 和 105 并安装早于 104 的内核。(最好至少安装 2 个内核,以便在需要时可以依靠其中一个)。

参见屏幕截图在此处输入图片描述

然后按照 WU-TANG 之前的建议,使用 apt 和 apt-get 中的“mark hold”

来获取主线:

sudo add-apt-repository ppa:cappelikan/ppa
sudo apt update
sudo apt install mainline

答案4

对于初学者,您可以使用此处提供的答案:https://askubuntu.com/a/110738/1282766将 GRUB 设置为启动到 104 内核,这样您就可以确保该问题不会在该版本中发生。

然后,这里提到一个类似的过程:https://unix.stackexchange.com/a/465220 这应该可以让你永久恢复内核版本。

如果您想停止内核自动更新,只需删除这两个包:

apt-get remove linux-image linux-image-generic

相关内容