记一次 Arch Linux 更新之后引导失效修复

在今年八月底的某次更新后,再启动进入 Arch grub 引导之后显示:

loading linux linux...
error: invalid cluster 0.
Unable to mount root fs on unknown-block(0,0)
...

更新把引导弄坏了,只好自己修了,不过这对于 arch 也算是家常便饭,就顺便记录下。

进入安装启动盘

找到之前安装 Arch Linux 的U盘,丢了的话现做一个也行

连接网络

因为中间隔了几天没用,所以系统可能又有更新,就需要更新到最新,因此先进行网络连接

iwctl
# 进入 iwctl 交互
device list # 可以看到设备是 wlan0
station wlan0 scan
station wlan0 get-networks
station wlan0 connect wlan_name # 之后输入密码
# 推出 iwctl 交互
exit

挂载分区

查看硬盘分区情况

$ lsblk
output:
nvme0n1
| nvme0n1p1 400Mi efi
| nvme0n1p2 40Mi  Windows mgr
| nvme0n1p3 1.9t  windows
nvme1n1
| nvme1n1p1 400G  ntfs
| nvme1n1p2 40G   Linux swap
| nvme1n1p3 1.5t  Linux filesystem

我是双系统,很容易理清各个分区的情况。接下来进行挂载,可以直接挂载/和/boot,也可以按照安装时从root开始完全挂载:

mount -t btrfs -o subvol=/@,compress=zstd /dev/nvme1n1p3 /mnt # 挂载 /
mount -t btrfs -o subvol=/@home,compress=zstd /dev/nvme1n1p3 /mnt/home # 挂载 /home
mount /dev/nvme0n1p1 /mnt/boot # 挂载 /boot

change root后进行修复

change root 重建 fstab 与 grub引导:

$ rm -rf /mnt/etc/fstab
$ genfstab -U /mnt > /mnt/etc/fstab
$ ls -l /dev/disk/by-uuid # 查看硬盘 uuid
$ cat /mnt/etc/fstab # 对应 uuid 查看重置分区配置文件是否正常
# 接下来修复引导
$ arch-chroot /mnt
[root@archiso] $ pacman -Syyu
[root@archiso] $ grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH
# 若要修改 grub 参数: vim /etc/default/grub
[root@archiso] $ grub-mkconfig -o /boot/grub/grub.cfg
[root@archiso] $ exit
$ umount -R /mnt
$ reboot

重启后发现,不仅没修改,arch的引导直接无了,重新进去安装盘看一下:

# 挂载同之前的操作,省略
$ ls -a /mnt/boot
# 查看是否有如下文件: { initramfs-linux.img, intel-ucode.img, vmlinuz-linux }, 发现只有 intel-ucode.img
$ arch-chroot /mnt
[root@archiso] $ pacman -S linux
# 若报错 GDBus.Error: ... org.cinnamon.SettingsDeamon was not provided by any .service files, 是pacman检测到非原来用户执行,可以执行: mkinitcpio -p linux
# 重新生成 grub
[root@archiso] $ grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH
[root@archiso] $ grub-mkconfig -o /boot/grub/grub.cfg
[root@archiso] $ exit
$ umount -R /mnt
$ reboot

重启后引导恢复,如果Windows引导确实可以进入系统后执行一下命令重建引导:

# 需要在 /etc/default/grub 中加入一行 GRUB_DISABLE_OS_PROBER=false
os-prober
grub-mkconfig -o /boot/grub/grub.cfg

至此,引导修复完毕。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容