You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

从MBR磁盘通过bootmgr/grub4dos链式加载GPT磁盘Linux系统报错求助

从MBR磁盘通过bootmgr/grub4dos链式加载GPT磁盘Linux系统报错求助

兄弟,你这个问题本质是BIOS/CSM启动模式UEFI启动模式的二进制文件不兼容导致的——你的MBR磁盘是用BIOS模式启动的,而GPT磁盘里的BOOTx64.EFI是UEFI专用的启动文件,两种模式的执行格式完全不一样,直接加载肯定会报“不兼容二进制镜像”的错。下面给你针对grub4dos和bootmgr分别梳理可行的解决办法:

一、用grub4dos引导的方案

grub4dos是BIOS模式下的引导工具,没法直接跑UEFI的EFI文件,但可以直接引导Linux内核,或者引导GPT磁盘上的BIOS兼容引导程序:

方案1:直接引导Linux内核(最稳妥)

  1. 启动grub4dos后,先定位到Disk#2的Linux分区:
    输入命令 find --set-root /vmlinuz,如果你的Linux有多个内核版本,也可以指定具体文件名,比如 find --set-root /vmlinuz-5.15.0-78-generic
  2. 然后执行引导命令(注意替换成你实际的分区路径或UUID):
    linux /vmlinuz root=/dev/sdb1 ro quiet splash
    initrd /initrd.img
    boot
    
    • 这里的/dev/sdb1是Disk#2的Linux分区,你可以根据实际磁盘序号调整(比如第三块盘就是/dev/sdc1);
    • 用UUID更不容易出错,先在Linux里用blkid命令查到分区UUID,然后把root=/dev/sdb1换成root=UUID=xxxxxx-xxxx-xxxx-xxxx-xxxxxx

方案2:链式引导GPT磁盘的BIOS Boot分区

如果你的Disk#2在安装Linux时创建了BIOS Boot分区(那个1MB左右、无文件系统的小分区),可以直接链式引导它:
输入命令 chainloader (hd1,0)+1,这里的(hd1,0)对应Disk#2的BIOS Boot分区,需要你确认分区序号(grub4dos里hd0是第一块盘,hd1是第二块)。

二、用bootmgr引导的方案

Windows的bootmgr同样是BIOS模式下的工具,没法直接加载UEFI文件,需要给它添加Linux的BIOS引导项:

方法1:手动配置BCD引导项

  1. 进入MBR磁盘上的Windows系统,以管理员身份打开命令提示符;
  2. 创建一个新的Boot Sector类型引导条目,执行后会返回一个GUID(记下来替换下面的{GUID}):
    bcdedit /create /d "Disk#2 Linux" /application bootsector
    
  3. 设置这个条目指向Disk#2的Linux分区(先在Windows里挂载这个分区,比如盘符是S:):
    bcdedit /set {GUID} device partition=S:
    bcdedit /set {GUID} path \boot\grub\i386-pc\core.img
    
    • 如果你的Linux用的是grub2,core.img的路径通常是\boot\grub\i386-pc\core.img;如果找不到,也可以直接指向分区引导扇区:bcdedit /set {GUID} path \
  4. 把这个条目添加到启动菜单末尾:
    bcdedit /displayorder {GUID} /addlast
    

方法2:通过bootmgr引导grub4dos再加载Linux

把grub4dos的grldrgrldr.mbr复制到MBR磁盘的某个分区(比如C盘根目录),然后用bcdedit添加指向grub4dos的引导项,之后就可以用grub4dos的方法引导Disk#2的Linux了,这种方式更灵活。

关键注意事项

  • 确保你的电脑BIOS里开启了CSM兼容模式,因为MBR磁盘启动依赖CSM,GPT磁盘的Linux要在BIOS模式下启动也需要这个开关打开;
  • 如果你的Disk#2原本是UEFI模式安装的Linux,没有BIOS引导相关文件,需要进入Linux系统,重新安装grub的BIOS版本:
    sudo grub-install --target=i386-pc /dev/sdb
    
    这里的/dev/sdb是Disk#2的磁盘设备(不是分区),执行后会自动在GPT磁盘上创建BIOS Boot分区并安装BIOS版grub。

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

火山引擎 最新活动