使用 grub2-gpt 启动非 EFI MS-DOS Windows 7 分区

使用 grub2-gpt 启动非 EFI MS-DOS Windows 7 分区

我有以下设置:

我尝试从 Ubuntu 11.10 使用 grub2 启动 Windows 7 分区。

我的 Windows“系统保留”是/dev/sda3

GRUBWindows 条目是(标准):

menuentry "Windows 7 (loader) (on /dev/sda3)" --class windows --class os {
        insmod part_msdos
        insmod ntfs
        set root='(hd0,msdos3)'
        search --no-floppy --fs-uuid --set=root 644C5AC04C5A8CA4
        chainloader +1
}

分开输出:

Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
 1      32.3kB  296MB   296MB   primary   ext2
 2      296MB   423GB   423GB   extended
 5      296MB   20.3GB  20.0GB  logical   ext4
 6      20.3GB  363GB   342GB   logical   ext4
 7      363GB   423GB   60.1GB  logical   ntfs
 3      423GB   423GB   105MB   primary   ntfs         boot
 4      423GB   500GB   77.2GB  primary   ntfs


Disk /dev/sdb: 1500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name  Flags
 1      17.4kB  20.0MB  20.0MB  fat16                 boot
 2      20.0MB  50.9GB  50.9GB  ext4
 4      50.9GB  1103GB  1052GB  btrfs
 5      1103GB  1156GB  52.7GB  ext4
 6      1156GB  1233GB  77.2GB  ntfs
 7      1233GB  1233GB  105MB   ntfs
 3      1496GB  1500GB  4271MB  linux-swap(v1)

尝试从 grub2 启动 Windows 后,我收到以下消息:

错误:EFI 文件路径无效

答案1

你不能这样做。

显而易见的是,任何预启动应用程序(例如操作系统的引导加载程序)都与机器固件紧密相关;就像普通应用程序与其使用的操作系统绑定在一起一样。除非机器提供 EFI 固件服务,否则 EFI 引导加载程序无法在机器上运行。除非机器提供旧 PC/AT 固件服务,否则旧 PC/AT 样式的引导加载程序无法在机器上运行。

GRUB 中的动词chainloader体现了这一点。它没有记录,但它根据 GRUB 的托管方式(即 GRUB 正在(期望)运行在哪个机器固件上)执行不同的操作。在旧 PC/AT 系统上托管的 GRUB 版本中,它期望获得一个磁盘块集或一个文件,并以旧 PC/AT VBR 引导程序的方式加载和运行(第一个扇区)它所给出的内容。在 EFI 托管的 GRUB 版本中,它期望获得文件名,并以普通 EFI 应用程序的形式加载和运行文件。

您拥有 EFI 托管版本的 GRUB。您已将 传递+1chainloader作为文件名,但这根本不是预启动 EFI 应用程序映像文件的有效路径。GRUB 无法构建EFI 设备路径对于图像文件,因为你给它的路径语法不正确。因此出现错误消息。

在 EFI 托管的 GRUB 中正确使用chainloader命名文件。对于 Microsoft Windows NT 6.1,这将是 Microsoft 启动管理器的 EFI 版本,它与 EFI 系统分区上的 BCD 存储共存:

链式加载(hd1,gpt1)/EFI/Microsoft/Boot/bootmgfw.efi

当然,这对您不起作用,因为您要么没有在这台机器上安装 Windows NT 6.1 — 而是在其他机器上安装并将硬盘转移到这台机器上 — 或者没有安装它的 EFI 引导版本,不知何故说服 Windows NT 6.1 在您的 EFI 机器上运行其安装实用程序的非 EFI 版本。我怎么知道?因为微软不会允许你将其安装到 EFI 机器上的非 EFI 分区硬盘上正如你所做的那样,因为你既有适当的EFI 系统分区(第二块硬盘上的 FAT 分区)和穷人的等价物否则您只需要前者。

因此,Windows NT 6.1 尚未安装 EFI 托管版本的 Microsoft 启动管理器,BCD 存储位于错误的位置,并且还会存在其他几个问题 - 与 Windows NT 期望一个硬件/固件组合有关,并且已经配置了适当的驱动程序和设置,并且突然在另一个硬件/固件组合上引导 - 稍后会为您解决。

相关内容