引言

在Windows/Linux双系统环境下,一个看似简单的分区调整操作,却让我陷入了"error: unknown filesystem. Entering rescue mode."的困境。这篇文章记录了我是如何从GRUB rescue模式中成功恢复系统的完整过程。

问题起因

为了在Windows和Linux之间共享数据,我决定创建一个20GB的exFAT分区:

  1. 在Windows磁盘管理器中压缩现有分区
  2. 格式化新空间为exFAT
  3. 重启后,悲剧发生了——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

关键发现

  1. btrfs挂载陷阱:必须使用 -o subvol=@参数,否则无法访问实际的根文件系统
  2. os-prober的环境依赖:在Live环境中可能无法检测Windows,但在实际系统中运行就能正确识别
  3. 两步修复策略:先恢复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

预防措施

  1. 分区调整前备份
sudo cp -r /boot/efi/EFI/[你的发行版] /boot/efi/EFI/backup
  1. 优先使用Linux工具:GParted比Windows磁盘管理更安全
  2. 调整后立即更新GRUB:任何分区变动后都应该运行 grub-mkconfig

工具推荐

  • Ventoy:多系统启动盘制作,一个U盘装多个ISO
  • garuda-chroot:比标准arch-chroot更智能
  • os-prober:自动检测其他操作系统

后记

这次经历让我深刻理解了:

  • 双系统维护需要理解两个系统的启动机制
  • btrfs虽然强大,但也增加了复杂性
  • 保持冷静,系统问题总有解决方案

希望这篇文章能帮助遇到类似问题的朋友快速恢复系统。记住:数据都在,只是引导坏了,不要慌!