Arch滚起来一时爽,一直滚啊一直爽,上一次滚出问题还是在笔记本上,《记一次搞死linux又医活的经历》。

在台式机上还是第一次,要说只能怪昨天的运气太差。不好好在家待着隔离,跑来办公室,想着爬个楼梯吧,零接触还健康,衣服就被门勾到,拉扯了一下,破了。然后发现自己出门的时候,钥匙没带,只能在实验室过夜了。想想那就当通宵加班吧,干点活,结果把电脑给搞坏了,于是通宵在修电脑,天亮还没好。人在囧途之办公室版本,电视都不敢这么演。

首先是某灯老连不上,于是yay搜一下,发现有新版本,赶紧装。装完却用不了,报错:

error while loading shared libraries: libwebkit2gtk-4.0.so.37: cannot open shared object file: No such file or directory

搞来搞起,始终运行不了。于是滚动升级整个系统。升完还一样用不了。那么就时光机,回退到老版本吧。因为我基本上隔一段时间,在滚系统之前,都会把整个系统打包。把之前的解压覆盖一下就完整了。十几年前,还在读硕士的时候,就干完笔记本换硬盘,NetBSD系统整个完整搬过去。

一切本以为如丝顺滑,时光机之后,重启一下。结果本来要出来登录界面的时候,屏幕在黑的。硬盘在闪,没显示东西。按键盘退到控制台无效。此时求我的内心阴影面积,家回不去,唯一的电脑坏了。这是要在办公室看天花板到天亮吗?

翻出来一张装linux的U盘,可以启动,于是就靠U盘chroot进去修电脑了。时光机试了几次,包括不同时间点,都是一个鬼样。我就在想是不是我解压之后,硬盘里的文件并不是完全覆盖,比如说某软件已经xx.2,解压包里的是xx.1,这样硬盘里就有两个版本,而各种软件可能一混乱起来,就导致有些不能用。

于是那个传说中的rm -rf /,我差不多就是这么干了。全删了之后,我再解压一次,这次的时光机就是干净的了,然后重启。启动不了,因为我把/boot也给干掉了,而这是独立分区,我在打包时光机的时候,没打包/boot,这下子连启动都没有了,尴尬一笑。

那么就得重新装内核,搞启动了。

安装内核:

pacman -S linux
pacman -S linux-headers

然后是安装grub,然而下面这个代码始终报错,这也是我要写本文的原因,给自己一个记录,不然下次遇到要浪费时间在上面。

grub-install --efi-directory=/boot --target=x86_64-efi --bootloader-id=boot

报的错误是,这不是有效的efi系统,无法识别。这里一个神奇的地方在于,要把这个分区挂在/boot下面。

我把分区挂在/boot/efi。然后再跑:

grub-install --efi-directory=/boot/efi --target=x86_64-efi --bootloader-id=boot

就安装成功了。

当然还需要再拷贝一份:

cp /boot/efi/EFI/boot/grubx64.efi /boot/efi/EFI/boot/bootx64.efi

然后这个EFI分区,在我的/etc/fstab中,其实就是挂在/boot下面。

在这样的前提下,配置grub才能成功:

grub-mkconfig -o /boot/grub/grub.cfg

然后再启动,还是一样,在进入系统之前,黑了,当然比之前的好一点,按Ctrl-Atl-Del还能重启。

这还能怎么样呢?因为/boot被不小心干掉,所以不完全时光机了,因为重新装了新版本的内核,鬼知道会不会又有什么版本不兼容的事情发生。那只能一路滚到黑了。

于是又进入U盘,chroot到硬盘的系统,滚动升级系统。升完重启,系统进去了,死马终于医活了。时隔搞坏系统,已经是十个小时过去了。

被困实验室,结果搞机通宵的尴尬一晚,就这样过去了。