昨天,我尝试在硬盘上双启动 Ubuntu 16.04,在现有的 Windows 8 旁边为 Ubuntu 创建一个新分区。首先,我禁用了 Windows 8 中的快速启动选项,但 GRUB 仍然没有加载,而是直接进入 Windows 启动。然后我做了一些研究,找到了这篇文章:
Windows 8.1 Ubuntu 13.10 双启动时不显示 Grub
基本上,我在 Windows 中发出了 BCDEdit 命令,并输入了以下代码:
bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi
当我重新启动时,我得到了一个基本的 GRUB2 终端,在我输入命令后exit
,出现第二个 Shell 提示符,exit
再次输入命令后,最终出现了选择要启动的操作系统的 GRUB2 菜单...只有 Ubuntu 和 Ubuntu 内存测试作为选项,而不是 Windows 8。
启动 Ubuntu 后,我尝试运行启动修复实用程序,但显示以下错误:传统模式与 EFI 会话
我该如何解决这个问题?Pastebin 日志在这里:https://pastebin.com/3NHMxxFh
谢谢您的帮助!
答案1
您遇到了兼容性支持模块 (CSM;又称传统启动或 BIOS 模式启动) 问题。大多数现代计算机使用可扩展固件接口 (EFI;通常是统一 EFI 或 UEFI,即 EFI 版本 2.x) 固件。EFI 固件与 20 世纪 80 年代至 2011 年主导 PC 行业的旧 BIOS 固件有着根本的不同。但是,CSM 提供了一个向后兼容层,使新的基于 EFI 的计算机能够启动旧操作系统。这在某些情况下很有用,但如果使用不当,会导致一系列新问题,因为您需要知道如何控制启动模式,而这可能很棘手。即使您知道自己在做什么,但不同型号之间存在如此多的差异,以至于预测计算机将做什么几乎是不可能的。有关此主题的更多信息,请参阅我在 CSM 上的网页。
您的计算机似乎安装了 BIOS 模式和 EFI 模式版本的 GRUB。我怀疑(但不能 100% 肯定)您的计算机当前配置为启动到 EFI 模式 GRUB,但此版本配置错误。退出时,您会收到 EFI shell 提示。退出时,BIOS 模式 GRUB 启动并允许您启动 Ubuntu。但是,您的 Windows 安装在 EFI 模式下,BIOS 模式 GRUB 无法启动 EFI 模式 Windows。
如果我的分析正确的话,这个问题至少有两个好的解决方案:
- 使用 rEFInd-- 此方法将您的主引导程序从 GRUB 更改为 rEFInd。由于 rEFInd 仅适用于 EFI,因此禁用 CSM 并不重要。
- 下载我的 USB 闪存驱动器或 CD-R 版本的rEFInd 启动管理器。
- 利用您下载的文件准备一个介质。
- 启动 rEFInd 介质。它应该显示启动 Windows 和 Ubuntu 的选项。(可能有两个 Ubuntu 选项,其中一个将启动您无法运行的 GRUB,另一个将正确启动。)
- 测试 Windows 和 Ubuntu 启动选项。
- 如果您可以同时启动 Windows 和 Ubuntu,请启动 Ubuntu。
- 安装 rEFInd PPA 或 Debian 包。
- 此时,当您重新启动时,即使拔下可移动磁盘,rEFInd 也应该会出现。现在您将通过 rEFInd 启动,绕过 GRUB。您可能想要调整 rEFInd 配置,但那是另一回事。
- 在 EFI 模式下使用启动修复-- 此方法需要禁用 CSM,或者至少学会控制启动模式。然后您可以修复 EFI 模式 GRUB。
- 启动您的固件设置实用程序。
- 禁用 CSM。具体如何操作因机器而异。请参阅我的 CSM 页面以获取一些建议。
- 以“安装前尝试”模式启动 Ubuntu 安装盘。
- 打开终端窗口。
- 查找名为 的目录
/sys/firmware/efi
。如果存在,则表示您已在 EFI 模式下启动并可以继续;如果不存在,则表示您未能禁用 CSM,应重试,或者至少学习如何控制启动模式,如我的 CSM 页面中所述。 - 像以前一样,下载并启动 Boot Repair。
- 告诉 Boot Repair 修复您的安装。由于您现在已经在 EFI 模式下启动,它应该会进行 EFI 模式修复。
- 重新启动并希望它能正常工作。运气好的话,您会在 GRUB 菜单中看到 Ubuntu 和 Windows 选项,并且两者都应该可以正常工作。(不过,请参阅下面的另一个警告。)
使用您认为最有吸引力的任何一种方法。如果该方法无效,请使用其他方法 - 但请务必先阅读此答案的其余部分。
无论是哪种情况,你都应该意识到,如果你未能禁用快速启动特征在 Windows 中。(请注意,许多 EFI 都具有名称相似的功能,但此功能与 Windows 功能无关,而且麻烦少得多。)Windows 快速启动功能将关机操作转变为挂起到磁盘的操作,以加快后续启动速度。但是,这种做法会在双启动场景中对共享分区造成文件系统损坏。ESP 是一个共享分区,因此快速启动可能会损坏此分区。症状包括各种启动问题,包括无法启动 GRUB、GRUB 的配置脚本无法检测到 Windows,以及 GRUB 无法启动 Windows(即使其菜单中出现 Windows 条目)。rEFInd 也会出现类似的问题。即使您没有遇到这些问题,也应该禁用快速启动,如本段顶部的链接所述。如果您做遇到这些问题,您应该禁用快速启动,如果您使用 GRUB,您可能需要sudo update-grub
在禁用快速启动后键入以让其更新其菜单。
请注意,在 Windows 10 中,通常需要禁用休眠,除了快速启动。据我所知,Windows 8 不需要此功能。
编辑:
通常,rEFInd 应该显示图形用户界面。但是,如果它无法读取任何图标,它将返回到文本模式显示,就像您显示的那样。因此,我怀疑 rEFInd 无法读取其图标——可能也无法读取其文件系统驱动程序;如果它可以读取驱动程序,您可能会看到一个直接启动 Linux 内核的条目。您是否使用了 CD-R 或 USB 闪存驱动器映像,您是如何从映像准备启动介质的?可能是您执行此操作的方式有问题,或者文件系统可能已损坏或在某种程度上不符合您的特定固件的要求。
作为一种解决方法,请尝试下载该.zip
文件,然后在 Linux 中执行以下操作:
- 准备一个带有全新 FAT 文件系统的 USB 闪存驱动器。(您可以从手头已有的东西开始,也可以使用 GParted 或其他工具对 USB 驱动器进行分区。尝试将其设为跨磁盘分区。)最好使用 GUID 分区表 (GPT),并将 FAT 分区标记为 ESP(
gdisk
类型代码 EF00 或在 GParted 或 中设置的“启动标志”parted
);但如果使用 MBR 并且未标记为 ESP,它可能会起作用。 - 解压 rEFInd
.zip
文件并cd
放入结果目录中 - 键入
sudo ./refind-install --usedefault /dev/sdd1 --alldrivers
,将其更改/dev/sdd1
为 USB 闪存驱动器 FAT 分区的设备文件名。这将在磁盘上创建一个新的 rEFInd 安装,其中包含所有必要的文件。
您应该能够使用此磁盘启动。如果仍然不起作用,那么一定发生了一些非常奇怪的事情。您可以尝试更改 USB 磁盘上的分区表格式(使用 MBR 而不是 GPT,反之亦然)。
当然,您也可以尝试 Boot Repair 方法,而不是尝试让 rEFInd 工作。
答案2
使用 rEFind zip 存档和“已编辑”部分提供的说明,我能够将 rEFind 刻录到 USB 驱动器。从 USB 驱动器启动后,我会看到一个 GUI 界面,并且能够成功启动 Ubuntu 和 Windows。但是,当我尝试使用 Ubuntu PPA 命令将 rEFind 永久安装到我的硬盘驱动器时,它无法被识别,并且直接启动到 GRUB 而不是 rEFind。现在,我将 USB 棒插入我的计算机,可以毫无问题地使用 Ubuntu 和 Windows。非常感谢您的帮助!