再修 Arch Linux 引导
November 03, 2021

昨天给放在公司的台式机换了一个机械大师 C28 的小机箱,的确好看很多,但是或许是之前直接拔电源关机,或者是某次滚动更新挂了,总之再次接上电源开机,无情地显示下图

[FAILED] Failed to start Load Kernel Modules.
[FAILED] Failed to mount /efi.
[DEPEND] Dependency failed for Local File Systems.

并且可能是因为 kernel 无法加载,没有 usb 模块,导致 usb 键盘无法操作,因此无论按什么键都没有反应,而手头没有 PS2 接口的键盘(这个年代哪里还有这种键盘啊),于是只能长按电源强制关机。

好在手头有一个 archlinux 的安装 U 盘,可以启动进入修复系统。

首先是尝试重新生成引导,这个操作在我之前的博客中提到过。但是先前我在电脑上有装了一个 Win 11 的缘故,目前 EFI 分区容量不够,导致无法写入新的配置。

于是就只能给 EFI 分区进行扩容操作。扩容前的分区是,/dev/nvme1n1p2 为 99M 的 EFI 分区,之后是 Win 10 的系统分区,因为重装了一个 Win 11,所以可以去掉这个分区。

删分区前果断得先备份。比较推荐的做法是用 rsync 来备份。我最开始尝试的是用 dd 命令,但致命问题在于,dd 下来的镜像包含文件系统的元信息,因此恢复到新分区时,文件系统任然会以为自己只有原来的大小。我尝试了一下 resize2fs 命令,但似乎不能支持 EFI 分区所使用的 FAT 文件系统。

首先 mount 上根目录和 EFI 分区到 /boot 目录,然后 rsync -av /boot/ /backup 其中 a 表示保留文件元信息,v 将复制内容打印到终端。

然后就可以删除原来的 EFI 分区重新分配了。用 fdisk /dev/nvme1n1 进入分区操作界面,通过 m 查看帮助能大概知道怎么操作,即先删掉 p2 和后面的 p3 分区,然后再从 p2 最开始的扇区重新创建一个更大的新分区。为了保险起见,这次分配了 500M 空间。最后记得指定分区类型为 EFI System。

分区完成后格式化 EFI 分区,mkfs.fat -F32 /dev/nvme1n1p2 ,然后用 rsync 反过来把备份还原到新的 EFI 分区里。

此时再重新用之前博客里提到的方法重新生成引导即可,不会再报空间不足的问题了。

最后因为分区变动,/etc/fstab 也要确保一下没有问题。

拔出 U 盘重启,成功回到 ArchLinux 的怀抱!