前几天更新archlinux系统,重启之后无法正常进入启动引导界面,这边记录一下如何进行修复。

grub引导修复与内核修复

根据 “Minimal bash-like line editing” in GRUB when booting 中指出,开机只掉到 GRUB 的“Minimal BASH-like line editing…”说明了GRUB无法找到它的配置文件,GRUB无法从FAT分区加载Linux内核。
我们现在必须要使用Live USB启动Arch系统,再chroot进入修复GRUB。

创建Arch linux live USB

我们可以从 Arch Linux Downloads 中下载最新的ISO镜像,之后使用一个闲置U盘通过如 Rufus 创建自己的Arch live盘。

接下来修改自己的启动优先级进入U盘里的live环境。

确认Arch 安装的分区

我们需要从确认我们安装的Arch分配的磁盘和分区是什么,可以通过以下指令查看:

lsblk -f  

通常会有以下输出:

nvme0n1p1 vfat  EFI
nvme0n1p2 swap
nvme0n1p3 btrfs ArchRoot

这通常代表了你创建系统时分配的EFI分区,Btrfs根分区。

挂载分区

# 挂载根分区
mount -t btrfs -o subvol=@home,compress=zstd /dev/nvme0n1p3 /mnt 

# 挂载EFI(boot)分区  
mount /dev/nvme0n1p1 /mnt/boot 

内核修复

“提示”
如果没有内核修复的需求可跳过这一小节

在我原先修复完GRUB引导后,进入Arch系统后出现无法正确读取内核文件,估计是更新系统的同时,系统内核并未正常跟新,内核文件损坏:

Loading initial ramdisk ...
error: you need to load the kernel first.

根据 Grub says i need to load kernel first 可知,我们需要重新安装它:

pacman -S linux

如果在安装的过程中出现了

xxx: Read-only file system
error: command failed to execute correctly

可能是之前更新失败中断导致的自动分区保护,我们需要清脏标志位

fsck.vfat -a -v /dev/nvme0n1p1

结果中如果出现以下字段则代表了成功清除标志位

Dirty bit is set   

进入chroot系统并重新生成引导文件

arch-chroot /mnt

grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

退出重启

exit  
umount -R /mnt  
reboot

接下来拔掉U盘,便可以正常使用了。