双系统GRUB修复:当Windows破坏Linux引导后
引言
在Windows/Linux双系统环境下,一个看似简单的分区调整操作,却让我陷入了"error: unknown filesystem. Entering rescue mode."的困境。这篇文章记录了我是如何从GRUB rescue模式中成功恢复系统的完整过程。
问题起因
为了在Windows和Linux之间共享数据,我决定创建一个20GB的exFAT分区:
- 在Windows磁盘管理器中压缩现有分区
- 格式化新空间为exFAT
- 重启后,悲剧发生了——GRUB崩溃
错误信息:
error: unknown filesystem
Entering rescue mode...
grub rescue>
问题分析
为什么Windows会破坏GRUB?
Windows磁盘管理在调整分区时会:
- 重写分区表信息
- 更新磁盘的UUID
- 不识别Linux文件系统,可能改变分区顺序
这导致GRUB找不到它的配置文件位置,因为原本记录的分区信息已经失效。
环境特点
我的系统配置:
- 微星笔记本,UEFI启动
- Garuda Linux,使用btrfs文件系统
- Windows 11 + Garuda双系统
解决过程
Step 1: 准备救援环境
- 使用Ventoy + Garuda ISO进入Live系统
- F11选择U盘启动(微星笔记本)
Step 2: 识别分区结构
# 查看分区信息
lsblk -f
# 关键输出:
# nvme0n1p1 vfat (EFI分区)
# nvme0n1p3 ntfs (Windows)
# nvme0n1p5 btrfs (Linux根分区)
# nvme0n1p6 btrfs (Linux home)
Step 3: 正确挂载btrfs(关键!)
错误方式:
# 这样挂载只会看到@子卷文件夹
sudo mount /dev/nvme0n1p5 /mnt
正确方式:
# btrfs需要直接挂载子卷
sudo mount -o subvol=@ /dev/nvme0n1p5 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
Step 4: chroot修复GRUB
# 使用Garuda提供的工具
sudo garuda-chroot /mnt
# 重装GRUB到EFI
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Garuda
# 确保os-prober启用
sudo nano /etc/default/grub
# 添加/确认:GRUB_DISABLE_OS_PROBER=false
# 生成配置(此时Windows可能检测不到)
grub-mkconfig -o /boot/grub/grub.cfg
# 退出
exit
sudo umount -R /mnt/boot/efi
sudo umount -R /mnt
reboot
Step 5: 完善Windows启动项(若上一步os-prober未检测到Windows)
重启进入Garuda后:
# 确保os-prober启用
sudo nano /etc/default/grub
# 添加/确认:GRUB_DISABLE_OS_PROBER=false
# 在实际系统中重新生成配置
# 此时os-prober能正确识别Windows
sudo grub-mkconfig -o /boot/grub/grub.cfg
关键发现
- btrfs挂载陷阱:必须使用
-o subvol=@
参数,否则无法访问实际的根文件系统 - os-prober的环境依赖:在Live环境中可能无法检测Windows,但在实际系统中运行就能正确识别
- 两步修复策略:先恢复Linux启动,再在Linux中修复Windows启动项
经验总结
最简修复流程
# Live环境:恢复Linux
mount -o subvol=@ /dev/[根分区] /mnt
mount /dev/[EFI分区] /mnt/boot/efi
arch-chroot /mnt # 或 garuda-chroot
grub-install && grub-mkconfig
exit && reboot
# Linux系统:添加Windows
grub-mkconfig -o /boot/grub/grub.cfg
预防措施
- 分区调整前备份:
sudo cp -r /boot/efi/EFI/[你的发行版] /boot/efi/EFI/backup
- 优先使用Linux工具:GParted比Windows磁盘管理更安全
- 调整后立即更新GRUB:任何分区变动后都应该运行
grub-mkconfig
工具推荐
- Ventoy:多系统启动盘制作,一个U盘装多个ISO
- garuda-chroot:比标准arch-chroot更智能
- os-prober:自动检测其他操作系统
后记
这次经历让我深刻理解了:
- 双系统维护需要理解两个系统的启动机制
- btrfs虽然强大,但也增加了复杂性
- 保持冷静,系统问题总有解决方案
希望这篇文章能帮助遇到类似问题的朋友快速恢复系统。记住:数据都在,只是引导坏了,不要慌!
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果