我有一台“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 分区