无法让 grub 启动 Windows 7 分区。 “错误:无效的 EFI 文件路径”

无法让 grub 启动 Windows 7 分区。 “错误:无效的 EFI 文件路径”

我有一台“HP pavilion 7008tx dv7”笔记本电脑。它与 Windows 7 捆绑在一起,有两个 1TB HHD 和一个 32G SSD。

这是“sudo parted -l”的输出形式:

Model: ATA TOSHIBA MQ01ABD1 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos


Number  Start   End     Size    Type     File system  Flags
 1      1049kB  210MB   209MB   primary  ntfs         boot
 2      210MB   977GB   977GB   primary  ntfs
 3      977GB   1000GB  23.1GB  primary  ntfs
 4      1000GB  1000GB  113MB   primary  fat32        lba


Error: /dev/sdb: unrecognised disk label                                  

Model: ATA TOSHIBA MQ01ABD1 (scsi)
Disk /dev/sdc: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt


Number  Start   End     Size    File system     Name  Flags
 1      1049kB  538MB   537MB   fat32                 boot
 2      538MB   992GB   991GB   ext4
 3      992GB   1000GB  8474MB  linux-swap(v1)

sudo blkid

/dev/sda1: LABEL="SYSTEM" UUID="A0A08877A08855A6" TYPE="ntfs" 
/dev/sda2: LABEL="OS" UUID="1A041783041760D5" TYPE="ntfs" 
/dev/sda3: LABEL="Recovery" UUID="6E301CC5301C95E5" TYPE="ntfs" 
/dev/sda4: LABEL="HP_TOOLS" UUID="04AD-78C7" TYPE="vfat" 
/dev/sdb: TYPE="isw_raid_member" 
/dev/sdc1: UUID="A857-0A03" TYPE="vfat" 
/dev/sdc2: UUID="869d2800-385c-4a90-9ecb-dfca61632257" TYPE="ext4" 
/dev/sdc3: UUID="67cd5e66-fad6-4b70-b295-5536283ab10f" TYPE="swap" 

我使用所有默认选项安装了 Ubuntu,并将其安装在 /dev/sdc 上,如上所示。有趣的是,当我安装 Ubuntu 时,它没有告诉我它找到了 Window 7。我必须手动编辑 grub 才能显示 Grub 屏幕,并添加一些条目,如下所示/etc/grub.d/40_custom

menuentry "Windows 7 (loader) (on /dev/sda1)" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos1)'
chainloader +1
}

但是当我从 grub 条目中选择它时,我得到了error: invalid EFI file path.

/dev/sda1称为“SYSTEM”,并有Boot一个名为 bootmgr 的文件夹和文件。/dev/sda2称为“操作系统”,包含 Window 7。 /dev/sda3是 HP 恢复分区。/dev/sda4称为“HP_TOOLS”。

有谁知道如何让 grub 中的 windows7 条目正常工作,或者至少知道如何以其他方式启动 Windows 7?

更新

实际上,我最终能够通过按 ESC 然后按 F9 启动到窗口,这在我的系统上加载启动设备菜单。列表中有两个 Ubuntu 选项和另一个选项,上面写着“笔记本电脑硬盘”之类的内容。当我选择后一个选项时,窗口启动。这是一个相当烦人的过程,如果可能的话,我仍然希望使用 grub 选项。

答案1

问题是你的 grub2 本质上可以说是一个“EFI 应用程序”。

基于 BIOS 分区的 grub2 有一个chainloader命令可以理解+1扇区映射语法来代替文件名。它只是加载这些扇区并运行它们,假设它们是可以在 BIOS 之上运行的机器语言。

基于 UEFI-GPT 分区的 grub2 有一个chainloader不理解+1样式语法的命令。它正在解释一条EFI路径,我认为这就是错误消息的来源。

您尝试做的事情可能无法实现;也就是说,从 UEFI 引导加载程序中链接回 BIOS 世界。

您可以直接从 BIOS 启动 Windows 分区,因为此时 BIOS 会检测到该磁盘上的旧式分区表并相应地调整其特性。

因此,正如 Michael Shigorin 的回答所建议的:rEFInd 启动管理器可以提供您正在寻找的更好的双启动体验:http://www.rodsbooks.com/refind/

答案2

你可能会发现Rod 有关 EFI 的书籍有用,正在安装重新寻找他写的可能有帮助(我已将其纳入ALT Linux 救援另外,请尝试对该图像进行“金字塔”扫描选项,看看是否有帮助)。

您现在使用的是固件的启动管理器,其启动列表可通过efibootmgr实用程序获得。如果您安装 refind: 固件,您将获得更多一条记录(并且很可能希望将其设置为默认值:),它将启动它,它将启动 grub 或 windows 启动管理器,并且这些将启动它们的内核(讽刺的是因为至少 Linux 内核可以由固件的启动管理器直接启动,呵呵)。

答案3

Windows 的 GRUB 条目适用于 BIOS 模式引导,但不适用于 EFI 模式引导。这是一个 GRUB 错误。您可以尝试用以下内容替换该条目:

menuentry "Windows 7" {
insmod part_msdos
insmod chain
set root='(hd0,msdos1)'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi

}

我不保证这会起作用,但它可能会起作用。如果是这样,请将该条目添加到 /etc/grub.d/40_custom 中,以便每当 Ubuntu 更新其 GRUB 配置时都​​会再次创建它。

答案4

首先进入linux recue模式做ls。我的会显示: (hd1,gpt1) (hd1,gpt...) 其中 gptX 是硬盘的每个分区,也可以显示为 msdos1, msdos2...

然后将此条目放在 /boot/grub/grub.cfg 中

    menuentry "Windows 7" {
insmod part_msdos
insmod chain
set root='(hd0,gpt1)'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

将 gpt1 替换为您的 EFI 分区

相关内容