在 GPT 分区的 USB 上通过 GRUB 启动 Windows(7、10、11)安装

在 GPT 分区的 USB 上通过 GRUB 启动 Windows(7、10、11)安装

问题是为什么chainloader +1MBR 分区的 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.vhdgrub4dos):

  1. 启动进入 Windows 或 WinPE/WinRE。

  2. 用于diskpart为 ESP(EFI 系统分区)分配驱动器号 S:。

  3. 在 ESP 上,创建一个 64 MB 的 VHD(您可以使用diskpart),使用 MBR 和 FAT32 对其进行分区/格式化。

  4. 为其分配一个驱动器号(如 V:)。

  5. 设置分区 V:活动。

  6. 用于bcdboot /f BIOS C:\Windows /s V:在 VHD 上创建 bootmgr/BCD 文件。

  7. 将启动代码写入 VHD(但这不是必需的):bootsect /nt60 V: /force /mbr

  8. 分离 VHD。

  9. 复制grldrmenu.lst至 ESP (S:)。

  10. 将分区(如 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):

  1. 启动 Ubuntu LiveCD/LiveUSB。

  2. 使用gdisk创建一个新的分区作为BIOS boot partition,利用上面保留的 8MB 空间。将分区类型 GUID 更改为 BIOS 启动分区。(可能没有必要)将 BIOS 可启动标志设置GPT attributes为 BIOS 启动分区。

  3. 获取 ESP 的文件系统 UUID,使用类似sudo blkid /dev/sda1

  4. 挂载ESP,挂载路径为/media/ubuntu/EFI

  5. grub-install --target i386-pc --boot-directory=/media/ubuntu/EFI

  6. 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
}

相关内容