You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移/boot挂载点后修复MBR分区表下的GRUB2 UEFI引导加载器

迁移/boot挂载点后修复MBR分区表下的GRUB2 UEFI引导加载器

看起来你踩了一个典型的GRUB路径配置坑——把/boot从Btrfs子卷移到独立Ext4分区后,MBR里的GRUB核心引导程序还在盯着旧的/@/boot路径找文件,自然会找不到normal.mod。别慌,咱们一步步把它掰正:

第一步:正确挂载分区并进入Chroot

你之前挂载的时候犯了个小错误:既然已经挂载了Btrfs的@子卷作为根目录,就不需要再指定/@/boot了,直接挂载到/boot即可。请按以下步骤操作(可以用你之前的Live USB或者应急启动方式):

  1. 创建临时挂载目录并挂载根分区(Btrfs @子卷):
    mkdir -p /tmp/rootfs
    mount -o subvol=@ /dev/sda7 /tmp/rootfs
    
  2. 挂载新的Ext4 /boot分区:
    mount /dev/sda8 /tmp/rootfs/boot
    
  3. 挂载EFI分区:
    mount /dev/sda6 /tmp/rootfs/boot/efi
    
  4. 挂载系统必需的虚拟文件系统:
    mount --bind /sys /tmp/rootfs/sys
    mount --bind /dev /tmp/rootfs/dev
    mount --bind /proc /tmp/rootfs/proc
    
  5. 如果/home是单独的Btrfs子卷,也挂载上:
    mount -o subvol=@home /dev/sda7 /tmp/rootfs/home
    
  6. 进入Chroot环境:
    chroot /tmp/rootfs
    

第二步:修复GRUB安装并更新配置

进入Chroot后,咱们要让GRUB重新识别当前的/boot路径,并更新MBR里的引导程序:

  1. 先确认/boot确实挂载在新分区上,执行df -h,你应该能看到/dev/sda8对应/boot。
  2. 重新安装GRUB到MBR(整个磁盘/dev/sda,不是单个分区):
    grub-install /dev/sda
    
    这一步会重新生成GRUB的core.img,它会指向当前/boot分区里的GRUB模块,而不是旧的Btrfs子卷路径。
  3. 更新GRUB配置文件,让它扫描当前的内核和引导项:
    update-grub
    

第三步:检查/etc/fstab配置

确保你的/etc/fstab里的/boot条目已经更新为新的Ext4分区,避免下次启动时挂载错误:

  1. 查看新/boot分区的UUID:
    blkid /dev/sda8
    
  2. 编辑/etc/fstab,把旧的/boot条目替换成类似这样的内容(替换成你实际的UUID):
    UUID=abcdef12-3456-7890-abcd-ef1234567890 /boot ext4 defaults 0 2
    

最后一步:重启测试

完成以上步骤后,退出Chroot(执行exit),卸载所有挂载的分区,然后重启系统。GRUB应该能正常找到normal.mod并引导你的系统了。

另外,你之前用USB启动系统后直接运行grub-install可能没生效,大概率是因为当时/boot没有正确挂载到新分区上,导致GRUB还是用了旧的路径配置——这次按正确的挂载步骤来,应该就能解决问题了。

备注:内容来源于stack exchange,提问作者FalcoGer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:34:32