在 GRUB 中选择任何 UEFI 条目都会让我启动 Windows 7,该怎么办?

在 GRUB 中选择任何 UEFI 条目都会让我启动 Windows 7,该怎么办?

对于这里的新手来说有点问题,经过多次重新安装后,我设法使 7 + 8 + Ubuntu 不会在我的新 T430 上崩溃。首先安装 8(预),然后安装 7,然后安装 Ubuntu(引导加载程序安装在根分区上,我猜不是 MBR?),然后从实时 CD Grub 进行引导修复,好极了!

问题是,启动 Windows 有两个选项:

  • Windows UEFI bkpbootmgfw.efi
  • Windows 启动 UEFI 加载程序

两者都将我发送到 Windows 7 引导加载程序,然后让我选择启动 7 或 8。有什么方法可以直接从 grub 启动它们吗?

更新:我尝试使用 easybcd 重新设置 Windows 引导加载程序的默认设置,但它在“重置”时不知怎么搞砸了,最后我得到了 60 个引导项。之后 Windows 根本无法启动。

我现在已经完全重新安装了所有内容,因此 Ubuntu 和 Windows 都有自己的启动项,我可以通过按 F12 选择它们作为设备,也可以调整默认设置。但是,我仍然希望从启动时就可以使用所有 3 个选项。

我尝试使用 easybcd 将 Ubuntu 添加到 Windows 引导加载程序,但它说缺少 /NST/AutoNeoGrud2.mbr 文件,无法从那里启动。

答案1

这不是明确的,因为我从来没有测试过;然而......

首先,MBR 与您的系统无关,除非保护性 MBR 是 GUID 分区表 (GPT) 的一部分。您的引导加载程序作为文件存储在EFI 系统分区 (ESP),在大多数 Linux 安装中,它都安装在/boot/efi。Ubuntu 将 GRUB 存储在 ESP 的EFI/ubuntu目录中(即/boot/efi/EFI/ubuntu来自 Ubuntu),而 Microsoft 将其引导加载程序存储在EFI/MicrosoftESP 上的目录树中。这就是为什么当您想要启动 Windows 时,您会得到双引导加载程序处理——Microsoft 使用位置,就像 Ubuntu 一样,如果您要安装多个版本的 Ubuntu,那么一个引导加载程序必须提供一个菜单,以使您能够启动任一版本的 Windows。

理论上,您可以创建第二个 ESP,将原始 ESP 的EFI/Microsoft目录复制到其中,然后编辑两个 ESP 上的文件以限制它们仅启动一个版本的 Windows。不幸的是,我对 Windows 启动文件了解不够多,无法提供更精确的说明。事实上,我甚至不知道它是否真的有效,但它可能会。

如果您愿意付出努力,可以尝试通过重新安装 Windows 7 让 Windows 为您完成大部分工作:

  1. 在磁盘上创建第二个 ESP。在 GParted 中,您需要将分区缩小一点,在该空间中创建一个新的 FAT32 分区(确保它是 FAT32,而不是 FAT16),并为其指定“启动标志”。我还建议为其指定一个唯一的名称,例如“WIN7ESP”。(如果您最终使用 rEFInd 或帮助在文件浏览器中识别它,这可能会很有用。)
  2. 从原始 ESP 中删除“启动标志”。
  3. 可选地,更改 Windows 8 分区上的类型代码。例如,您可以在 GParted 中为其设置“lvm 标志”。这里的目标是降低 Windows 7 安装程序检测到 Windows 8 的可能性。
  4. 通过在原始 Windows 7 分区上创建一个新的 NTFS 文件系统来擦除该分区。给它起一个唯一的名称,以便于识别。
  5. 重新安装 Windows 7。此时,Windows 7 应该可以直接启动。
  6. 将 GRUB 恢复为默认启动管理器。如果你不确定如何操作,可以使用引导修复。或者你可以安装另一个 EFI 启动管理器,例如 rEFInd 或 gummiboot。
  7. 在 Linux 中,启动 GParted 并撤消您之前所做的分区类型代码更改 - 重置原始 ESP 上的启动标志,如果您更改了 Windows 8 分区上的类型代码,请删除该标志以将其恢复为正确的类型代码。
  8. 在 Linux 中,键入sudo update-grub以使其重新检测引导加载程序,运气好的话包括两个 Windows 引导加载程序。如果失败,您可能需要编辑/etc/grub.d/40_custom以添加自定义菜单;或者您可以安装我的rEFInd 启动管理器,它应该检测Windows引导加载程序的两个副本。

我不保证此过程一定有效。而且,即使它确实有效,也可能会在后续产生问题,因为 Windows 不支持每个系统有多个 ESP。(但 EFI 规范说这没问题。)因此,将来的 Windows 更新或重新安装可能会变得混乱和行为不端。您应该能够通过临时重置一个或另一个 ESP 上的类型代码(即在 GParted 中删除其“启动标志”)来解决此类问题。

如果此过程不起作用,或者对您来说太复杂,我建议您在 Windows 论坛上询问此问题,因为 Windows 引导加载程序配置更多的是 Windows 问题而不是 Linux 问题。

另外两点:

  • 据我所知,Ubuntu 仍然为其 Linux 分区提供与 Windows 相同的类型代码。这使得 Linux 分区在 Windows 文件浏览器中显示为未格式化的磁盘。我建议使用 来纠正此问题gdisk,如所述这里。如果忽略这一点,很容易就会意外地从 Windows 中删除 Linux 安装。
  • Windows 8 使用新的“快速启动”功能,该功能与双启动不兼容(甚至与 Windows 7 也不兼容)。至关重要的禁用此功能,如下所述这里。不禁用此功能几乎肯定会导致文件系统损坏。

答案2

当您启动 Windows 时,它会直接进入其引导加载程序,而不是操作系统本身。由于您安装了两个版本的 Windows,因此它会向您推荐这两个版本,而不是直接启动 Windows 本身。因此,使用 Windows 引导加载程序并让其启动 Linux 会更简单。稍后可以配置 Grub 以直接进入 Ubuntu。以下是您需要执行的操作。

  1. 得到易BCD
  2. 使用 EasyBCD 将 Windows 设置为默认引导加载程序,并修改其引导菜单以包含 grub
  3. 进入 Ubuntu。您的启动菜单现在应该允许您在 Windows 7、8 和 grub 之间进行选择。确保 Ubuntu 是 grub 的默认选项。
  4. gksudo gedit /etc/default/grub从终端运行
  5. 确保GRUB_HIDDEN_TIMEOUT等于 0
  6. 利润!

这应该会让 Grub 直接进入 Ubuntu,并使 Windows 启动菜单允许您在所有操作系统之间进行选择。祝你好运!

相关内容