记第一次把系统搞挂掉

高度的自由有时就意味着高度的脆弱性。

今天就因为更换显卡驱动的原因把我实验室的机器给搞挂了,导致无法进入系统。

在实验室的机器到位之后,基本上我就逐步把工作环境迁移到实验室的机器上面,装了一个 Manjaro 系统,来感受一下滚动升级的爽快(遇坑)体验。系统采用的是 KDE 桌面,相关的工具环境都已经搞得七七八八了(到时写个文章来讲讲我是咋样在多终端同步工作挣扎的),在日常的工作和娱乐使用上面,基本已经没什么问题。

不过最近发现一个问题(bug),就是设备总是会在停止使用一段时间后,界面变色闪烁并且卡死。在忍受几次因卡死不得不重启之后,终于打算上网搜搜解决方法(感谢 vscode 与 typora 等软件的自动保存功能以及坚果云的自动同步让我即使卡死重启也没有丢失数据资料)。网上大多数人说是显卡驱动问题,我就跟着看到的其中一个回答的建议进行操作,把我所装的显卡驱动换成了另一个版本。看上去已经解决了。

然后出去打个水回来,发现机器又再次卡死了,然而这次重启,却已经启动不了。提示

1
2
Failed to start! Load kernel modules
Failed to start! Load kernel modules

当时的第一反应居然不是感到很慌,而是在想上午计划的任务做不完了,也是好笑。虽然这是第一次遇到这种状况,而且当时的我还没找到原因,但居然觉得这好像是习以为常的小事,可能这就是 Linux User Group 成员的觉悟吧。因为当时没带电脑,就用手机上网搜了搜相关问题,发现好像是刚刚更换的显卡驱动出问题了,把它换回来应该就没问题了吧。

那怎么更换显卡驱动,把新装的删掉,把旧的重新装回来呢?首先需要进入 bash。又怎样进入 bash 呢?网上说的 tty 我也进入不了,只能通过启动 U 盘(Live USB)进入系统然后加载本机环境。所以不得不跑回宿舍重新刻录一个启动盘,顺便睡了个午觉。

拿到启动 U 盘之后就比较简单了,直接通过 U 盘进入 U 盘的系统,然后在里面开终端通过 chroot 命令改到硬盘中的系统执行环境,然后把驱动换回来。(说起来很简单,但事实上这几个步骤以及当中的细节,我重复组合尝试了好几次才好起来了。主要操作为

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
manjaro-chroot -a # 根据硬盘安装的系统进行挂载等操作,来切换到硬盘中系统的 bash 环境

sudo mhwd -li # 列出安装的驱动,
sudo mhwd -r driver-to-delete # 显卡驱动全删了
sudo mhwd -i pci nonfree 0300 # 自适应安装一个闭源的显卡驱动

# 更新升级所有的 package,这一步感觉挺莫名其妙的
# 大概是需要更加内核和引导文件以适配驱动文件?
# 这里几乎把所有的 package 都重新安装了(因为这样导致我第一次不敢尝试又重启多了几次
sudo pacman -Syyu 

现在回顾起来感觉修复好像也还挺简单的,然而当时却搞了我两个多小时。在这次问题之后,重新打开了我里面的备份软件 timeshift,还是有在每天备份快照的(意外发现今天的升级把系统也升了一个小版本号),这也让我萌生出了一种豪气错觉:

只要给我一个 Live USB 让我进去 terminal,啥问题都好像可以解决。