so NVIDIA, f**k you.

美好的一天,从 paru 滚动更新系统开始。

看到了内核 linux-zen 有更新,我还在期待能够解决最近新出现的与 AMDGPU 集显驱动相关的卡死 bug

就在新内核已经安装完成,正在 install nvidia dkms 时,系统卡死了…

切tty、键盘灯和 sysrq 都没有响应,这意味着我的 kernel 已经成功死掉了。

mkinitcpio 还未完成,意味着我的新 initramfs 初始化内存盘镜像还未生成,系统现在完全不可引导启动。

抱着做好抢救系统的准备,我强制关机并重启了。果然,在 GRUB 引导页面只看到进入 UEFI setting 的入口,linuxlinux-fallback 引导都不可用。

在群里确认完抢救的注意事项之后,我拿出了我的 archiso 盘,引导进入并开始修复系统。

修复过程

问题出现在了更新内核的过程中卡死,这意味着正常的更新流程并没有完成,也就是上面卡住的 mkinitcpio 及其之后步骤。

那么,只要再次覆盖更新,确保流程顺利完成,对文件系统的更新完备就可以了。

进入 archiso 之后,和安装系统的前几个步骤类似, 禁用Reflector服务 -> 连接网络 -> 同步系统时间 -> 更新系统镜像源 -> 直接完整挂载系统分区 -> arch-chroot 进入系统

chroot 进入系统后,这个时候大概率 pacman 的运行占用锁还没有被正确释放,直接删除掉即可解除占用。

1
rm /var/lib/pacman/db.lck

之后查阅 /var/log/pacman.log,看一下最后一次未完成的更新都更新了哪些软件包,直接都再次覆盖安装一次即可。

1
2
cat /var/log/pacman.log
pacman -Syu xxx

安装后检查确保所有事务均已完成,如果不放心可以再次手动进行一次 mkinitcpio

1
mkinitcpio -P

完成系统覆盖更新并生成 initramfs 之后,和安装系统的后几个步骤,退出chroot -> umount系统分区 -> 重启

如果顺利的话,你的系统应该已经恢复正常了,从 GRUB 照常引导进入系统并继续完成你的工作吧~

后记

从群里的吐槽得知, mkinitcpioinstall nvidia dkms 时卡死并不是什么稀奇事,又慢又危险。

谢谢你 NVIDIA,让我在茶颜悦色花表演了一个小时修系统,不过也倒送了我一篇博客选题。

顺便为了方便下次出事的时候通过 archiso 抢救,还立马搓了一个完成 arch-chroot 前摇的脚本。

或许还可以考虑一下,加入对 boot 的备份,免得未来出了什么不好处理的启动问题被创飞。