迁移/boot挂载点后修复MBR分区表下的GRUB2 UEFI引导加载器
迁移/boot挂载点后修复MBR分区表下的GRUB2 UEFI引导加载器
看起来你踩了一个典型的GRUB路径配置坑——把/boot从Btrfs子卷移到独立Ext4分区后,MBR里的GRUB核心引导程序还在盯着旧的/@/boot路径找文件,自然会找不到normal.mod。别慌,咱们一步步把它掰正:
第一步:正确挂载分区并进入Chroot
你之前挂载的时候犯了个小错误:既然已经挂载了Btrfs的@子卷作为根目录,就不需要再指定/@/boot了,直接挂载到/boot即可。请按以下步骤操作(可以用你之前的Live USB或者应急启动方式):
- 创建临时挂载目录并挂载根分区(Btrfs
@子卷):mkdir -p /tmp/rootfs mount -o subvol=@ /dev/sda7 /tmp/rootfs - 挂载新的Ext4
/boot分区:mount /dev/sda8 /tmp/rootfs/boot - 挂载EFI分区:
mount /dev/sda6 /tmp/rootfs/boot/efi - 挂载系统必需的虚拟文件系统:
mount --bind /sys /tmp/rootfs/sys mount --bind /dev /tmp/rootfs/dev mount --bind /proc /tmp/rootfs/proc - 如果
/home是单独的Btrfs子卷,也挂载上:mount -o subvol=@home /dev/sda7 /tmp/rootfs/home - 进入Chroot环境:
chroot /tmp/rootfs
第二步:修复GRUB安装并更新配置
进入Chroot后,咱们要让GRUB重新识别当前的/boot路径,并更新MBR里的引导程序:
- 先确认
/boot确实挂载在新分区上,执行df -h,你应该能看到/dev/sda8对应/boot。 - 重新安装GRUB到MBR(整个磁盘
/dev/sda,不是单个分区):
这一步会重新生成GRUB的grub-install /dev/sdacore.img,它会指向当前/boot分区里的GRUB模块,而不是旧的Btrfs子卷路径。 - 更新GRUB配置文件,让它扫描当前的内核和引导项:
update-grub
第三步:检查/etc/fstab配置
确保你的/etc/fstab里的/boot条目已经更新为新的Ext4分区,避免下次启动时挂载错误:
- 查看新
/boot分区的UUID:blkid /dev/sda8 - 编辑
/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
相关产品推荐
相关产品推荐

