Pixiv - Ashima
552 字
3 分钟
手动引导ArchLinux并修复GRUB
前言
起因是宿舍突然断电了, 来电后启动发现直接进入了GRUB控制台。
推测是断电导致的GRUB分区故障, 着手修复一下。
我的系统为ArchLinux,文件系统为Btrfs,boot为单独一个分区,Btrfs 子卷结构为:@、@home、timeshift-btrfs.
接下来的实际操作不一定适用于所有文件系统,请备好🧠,有取舍地阅读。
实际操作
设置GRUB pager
set pager=1查看硬盘以及分区
# 查看硬盘以及分区ls
# Output 输出可能有很多, 这里只给出大概输出样例# e.g.(hd0) (hd0,gpt1) (hd0,gpt2) (hd2) (hd2,gpt1) (hd2,gpt2) (hd3) (hd3,gpt1) (hd3,gpt2) (hd3,gpt3)继续查看分区以确定boot分区位置
# 查看分区内容# etc.ls (hd0,gpt1)/
# 最后确定boot分区在(hd3,gpt3)
# Output 样例输出中应有类似vmlinuz-linux initramfs-linux.img # etc.再使用 set 确认 GRUB 的 root与prefix
# 查看GRUB参数set
# 如果需要修改# 设置需要的参数set root=(hd3,gpt1)set prefix=(hd3,gpt1)/grub#Output...root='(hd3,gpt1)'prefix='(hd3,gpt1)/grub'...最后加载内核与初始文件系统
因为是Btrfs文件系统,需要指定子卷 bootflags=subvol=@
# 可以在grub.cfg中翻一翻, 很容易就能找到需要的UUIDcat /grub/grub.cfg# 加载Kernel内核# root为自己的系统根分区linux /vmlinuz-linux root=/dev/nvme2n1p3 rw rootflags=subvol=@
# 当然也可以使用UUID的方式, UUID是唯一的.linux /vmlinuz-linux root=UUID=根分区的UUID rw rootflags=subvol=@
# 加载初始文件系统initrd /initramfs-linux.img
# 引导boot重新设置GRUB引导
进入操作系统后就是重新设置引导
# 安装引导grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Arch# 生成配置文件grub-mkconfig -o /boot/grub/grub.cfg但在生成配置文件阶段遇到报错:只读的文件系统
尝试重新挂载后仍会报错。
看来需要修复一下boot分区
# 查看boot分区mount | grep boot
# Output# 发现为 read only/dev/nvme2n1p1 on /boot type vfat (ro,...,errors=remount-ro)修复boot分区
# 需要 dosfstoolssudo pacman -S dosfstools
# 确认boot分区位置lsblk
# 检查并修复boot分区# 覆盖原有备份, 按照引导来修复就好# /dev/...记得替换为自己的boot分区sudo fsck.vfat -v /dev/nvme2n1p1修复完后即可生成GRUB配置文件
最后 reboot 测试一下是否正常引导
reboot文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
手动引导ArchLinux并修复GRUB
https://blog.cedon.cn/posts/system-ops/manually-boot-archlinux-fix-grub/ 最后更新于 2025-10-06,距今已过 198 天
部分内容可能已过时