问题是为什么chainloader +1
MBR 分区的 USB 可以工作,并且可以使用 bootmgr 启动,但我的 USB 驱动器的 GPT 版本在链式加载后会将我带回到 GRUB 控制台?命令也没有用ntldr /bootmgr
。PC 在传统模式 (BIOS) 下运行。devicemap
并且parttool
不提供 GPT 的功能。
UPD1. 看起来 bootmgr 无法检测到 GPT 分区或类似的东西: (BIOS GRUB 尝试)
如果我断开所有磁盘,我会得到
File: \Boot\BCD
Status: 0xc0000225
在 bootmgr 错误屏幕上。
答案1
这是可能的,启动链如下所示:
BIOS
=> grub2
=> = grub4dos
> ntboot.vhd
=>Windows
详细的:
BIOS
=> protective MBR of GPT
=> BIOS boot partition
=> grub2 (installed on EFI system partition)
=> = grub4dos
> = VBR of ntboot.vhd
> bootmgr on ntboot.vhd
=>Windows
步骤,第一阶段(准备ntboot.vhd
和grub4dos
):
启动进入 Windows 或 WinPE/WinRE。
用于
diskpart
为 ESP(EFI 系统分区)分配驱动器号 S:。在 ESP 上,创建一个 64 MB 的 VHD(您可以使用
diskpart
),使用 MBR 和 FAT32 对其进行分区/格式化。为其分配一个驱动器号(如 V:)。
设置分区 V:活动。
用于
bcdboot /f BIOS C:\Windows /s V:
在 VHD 上创建 bootmgr/BCD 文件。将启动代码写入 VHD(但这不是必需的):
bootsect /nt60 V: /force /mbr
分离 VHD。
复制
grldr
并menu.lst
至 ESP (S:)。将分区(如 WinRE 分区)缩小约 8MB,为 BIOS 启动分区保留空间。
内容menu.lst
可能看起来像:
default=0
timeout=5
title [1] -> NTBoot
map --mem /ntboot.vhd (hd)
map --hook
root (hd-1,0)
chainloader +1
title [2] -> Reboot
reboot
title [3] -> Halt
halt
步骤,第 2 阶段(准备grub2
):
启动 Ubuntu LiveCD/LiveUSB。
使用
gdisk
创建一个新的分区作为BIOS boot partition
,利用上面保留的 8MB 空间。将分区类型 GUID 更改为 BIOS 启动分区。(可能没有必要)将 BIOS 可启动标志设置GPT attributes
为 BIOS 启动分区。获取 ESP 的文件系统 UUID,使用类似
sudo blkid /dev/sda1
。挂载ESP,挂载路径为
/media/ubuntu/EFI
。grub-install --target i386-pc --boot-directory=/media/ubuntu/EFI
grub.cfg
在目录下创建grub/
,并填充以下内容,用上面得到的值替换 FS_UUID:
set timeout=5
menuentry "grub4dos" {
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root FS_UUID
ntldr /grldr
}
menuentry "Halt" {
halt
}
menuentry "Reboot" {
reboot
}