如何完全卸载并重新安装 Linux 内核更新?

如何完全卸载并重新安装 Linux 内核更新?

这个问题开始于我今天安装 Ubuntu 更新时,有 125 个软件包需要更新。我在笔记本电脑上sudo apt update依次运行apt list --upgradablesudo apt upgrade,然后转向台式机继续其他工作。我注意到笔记本电脑的屏幕变暗了,当我看时,左上角有一个光标在闪烁,屏幕上没有其他内容。我尝试切换到另一个虚拟终端,但没有得到任何响应。我短暂地按了一下电源按钮看看是否会有反应,然后笔记本电脑关机了。当我重新启动笔记本电脑时,它返回到同一个闪烁的光标屏幕。不过,这次我能够通过按打开一个虚拟终端,Ctrl-Alt-F1然后我登录了。我和技术支持人员一起查看了已安装的软件包列表,他认为问题在于视频驱动程序升级不当,从nvidia-driver-460nvidia-driver-470,并说我们必须安装nvidia-driver-495

当我尝试安装该nvidia-driver-495软件包时,我收到一条错误消息,说dpkg已中断,我需要运行sudo dpkg --configure -a,它看起来像是安装了 125 个软件包列表中所有其他待安装的软件包。然后我nvidia-driver-495再次尝试安装,但提示缺少nvidia-driver-510依赖项。然后我运行sudo apt install安装nvidia-driver-510,所有它是依赖项。我检查了 GUI 终端,Ctrl-Alt-F7它仍然只有闪烁的光标。然后我运行sudo apt install nvidia-driver-495,没有产生任何错误 - 但我仍然只有 GUI 终端上闪烁的光标。

我重启了笔记本电脑,然后

error: can't find command `hwmatch'
error: can't allocate initrd.

Press any key to continue...

随后出现内核崩溃。我重新启动笔记本电脑,只收到消息can't allocate initrd,随后再次出现内核崩溃。当我再次重新启动笔记本电脑时,系统提供了 GRUB 菜单,并且能够使用之前的内核启动机器5.13.0-28

经过一番研究,我运行sudo update-initramfs -c -k 5.13.0-30-generic并重启了机器——故障模式相同,最后重新引导到内核-28继续。我又研究了一下,然后运行update-grub、重启——又经历了同样的循环。

我尝试-30从中删除内核文件/boot,运行sudo apt update后显示所有软件包都是最新的,运行后sudo apt remove删除所有-30文件,再次运行update-grub- 并apt update一直坚持所有软件包都是最新的:就好像它知道它安装了新内核版本,但后来没有注意到它何时被删除。我重新启动了笔记本电脑,这是成功的,因为它正在启动之前工作的-28内核 - 但apt update仍然不知道内核升级。我sudo apt-get remove --purge使用文件列表运行-30,这只清除了配置文件,因为软件包本身已经被删除 - 并且apt update仍然对新内核一无所知。

我运行了apt list --installed | grep linux-image,列出了仍然安装的两个内核,-27然后-28。我运行了apt-cache search linux-image|grep 13|grep generic,得到了一个简短的内核列表,可以安装。然后我运行sudo apt-get install linux-headers-5.13.0-30-generic linux-hwe-5.13-headers-5.13.0-30 linux-image-5.13.0-30-generic linux-modules-5.13.0-30-generic linux-modules-extra-5.13.0-30-generic重新安装所有必需的软件包。部分输出是

/etc/kernel/header_postinst.d/dkms:
 * dkms: running auto installation service for kernel 5.13.0-30-generic

Kernel preparation unnecessary for this kernel.  Skipping...

这让我怀疑是否错过了一个必要的步骤。其他一切看起来都很好,所以我重启了机器——然后回到

error: can't find command `hwmatch'
error: can't allocate initrd.

hwmatch和内核崩溃。我最终通过遵循以下建议,通过另外几次重启解决了缺失问题https://www.linux.org/threads/error-cant-find-command-hwmatch-during-boot.32618/- 复制到我必须创建的目录/usr/lib/grub/i386-pc/hwmatch.mod中。/boot/efi/efi/grub

我注意到的一件事是该-30 initrd图像比其他图像大 50% 以上:

-rw-r--r-- 1 root root  99M Mar  2 16:41 initrd.img-5.13.0-27-generic
-rw-r--r-- 1 root root  99M Mar  2 16:57 initrd.img-5.13.0-28-generic
-rw-r--r-- 1 root root 156M Mar  2 21:41 initrd.img-5.13.0-30-generic

这可能是问题的一部分,也可能是问题的后果,我不确定。

sudo apt-get remove --purge再次运行删除所有软件包后-30,我运行了sudo find / -xdev -name "*5.13.0-30*"只返回

/var/cache/apt/archives/linux-headers-5.13.0-30-generic_5.13.0-30.33~20.04.1_amd64.deb
/var/cache/apt/archives/linux-modules-extra-5.13.0-30-generic_5.13.0-30.33~20.04.1_amd64.deb
/var/cache/apt/archives/linux-image-5.13.0-30-generic_5.13.0-30.33~20.04.1_amd64.deb
/var/cache/apt/archives/linux-hwe-5.13-headers-5.13.0-30_5.13.0-30.33~20.04.1_all.deb
/var/cache/apt/archives/linux-modules-5.13.0-30-generic_5.13.0-30.33~20.04.1_amd64.deb

我不认为这些文件是问题所在,但在尝试寻找“此内核不需要准备内核”消息的其他原因失败后,我曾经find删除过它们。sudo apt-get install然而,当我再次运行时,我得到了相同的“不需要准备内核”消息 - 重新启动又让我遇到了这个error: can't allocate initrd问题。

现在我-30又删除了内核,这样当我想重新启动笔记本电脑时就不必费力了,但我喜欢安装新内核,我确信它有一些安全修复。

我需要做什么才能让 Ubuntu 忘记内核-30曾经安装过,以便我可以成功将其安装到可启动状态?

相关内容