如何让 GRUB 成为 UEFI 笔记本电脑上的默认引导加载程序而不是 Windows 启动管理器?

如何让 GRUB 成为 UEFI 笔记本电脑上的默认引导加载程序而不是 Windows 启动管理器?

我有一台预装 Windows 8 的 HP Pavilion Touchsmart 笔记本电脑。我已升级到 8.1,现在想双启动 Ubuntu 发行版和 Windows 10。当双启动 Windows 8.1 时,Windows 启动管理器始终优先,即使在安装了 GRUB 之后也是如此。我需要做什么才能让 GRUB 成为默认的引导加载程序而不是 Windows 启动管理器?

答案1

这是我在 StackExchange 网站上发表过的最长的帖子,但这个过程需要大量的解释和对细节的关注。它还与所讨论的硬件有些相关,需要更多的解释。

经过很多头痛、两次意外的硬盘重新格式化以及对 HP 固件实施缺陷的大量挫败感之后,我终于让 Xubuntu 和 Windows 10 完美地并排运行。我已经在 Windows 10 上做到了这一点,但它也应该适用于 Windows 8.1。这两个较新的操作系统都使用新的 UEFI 固件系统,而不是传统的 BIOS 系统,而 BIOS 系统似乎是双启动最令人困惑的地方。我从很多地方读到了很多关于使用 BIOS 系统进行双启动的说明,它们将 UEFI 描述为只是一种不同类型的 BIOS,或者是 BIOS 和 OS 之间的可选层。UEFI 和 BIOS 不是一回事;UEFI 不是 BIOS,BIOS 也不是 UEFI。它们完全不同。使用 UEFI 系统进行双启动时,有些事情需要做不同的事情。

首先,不要使用EasyBCD.我见过很多过时的双启动教程推荐 EasyBCD,但它设计用于 Windows 7 和 Windows Vista 使用的传统 BIOS 固件,与较新的 UEFI 固件(Windows 8、8.1 或 10)配合使用效果不佳。如果您已经使用过 EasyBCD,请不要担心 - 最糟糕的情况可能是通过将内容写入 MBR 来弄乱您的 EFI 启动条目。我们将在步骤 4 中清理它。说到 MBR,请尽量避免它。主引导记录是传统 BIOS 固件中使用的引导加载程序列表,存储在硬盘的启动分区中(或者,如果由 Windows 编写,则存储在第一个分区中)。它旨在列出硬盘上的操作系统,并告诉固件哪个操作系统首先启动。这不适用于 HP 的 UEFI 固件。似乎如果对 MBR 进行了任何修改,HP 的 UEFI 固件就会感到困惑并运行回 Windows 启动管理器,这将完全绕过 GRUB。

你需要:

  • 带有您首选的 Ubuntu 发行版的实时 USB 或安装 CD。
  • 适用于 Windows 操作系统的安装介质。如果您要从 Windows 8.1 升级,则无需下载适用于 Windows 10 的完整 3+ GB .iso - 有一个 Web 安装程序会在安装时下载它 - 但是,对于此方法,您需要将 .iso 提取到 CD 或 USB 驱动器中。将它放在手边以备将来使用也是一个好主意,因此您不妨现在就创建它。由于这个问题是关于使用 UEFI 系统进行双启动,因此您需要64 位操作系统。
    • 确保您拥有产品密钥,否则您将无法升级/安装。
  • 可选,但强烈推荐:一个足够大的驱动器来备份您当前的 Windows 文件。
  • 硬盘上有足够的空间用于两个操作系统、一个启动分区(仅 200 MB)和一个 linux 交换分区(通常与物理 RAM 大小相同)。

步骤 1:进行备份

备份所有您不想丢失的 Windows 文件和文件夹。只要您有足够的可用硬盘空间用于新的 Ubuntu 分区,此过程就不会干扰 Windows 文件。应该但这是一个有风险的词。

Windows 8.1 有一个“制作恢复磁盘”工具,但我发现它在恢复我用它制作的备份时毫无用处,无法正常工作。保存不想丢失的文件的最直接方法是打开 Windows 资源管理器,然后将它们复制到备份磁盘。虽然这需要很长时间,但值得。

第 2 步:禁用快速启动并关闭计算机

您需要以管理员身份登录才能执行此操作。

在安装 GRUB 之前禁用快速启动非常重要,因为 Ubuntu 安装程序是否能够检测到 Windows 的存在取决于 Windows 在启动分区中的表现。正确禁用快速启动后,应该可以检测到它。检测将在第 4 步中介绍。

Windows 8、8.1 和 10 使用名为“快速启动”的新功能,它会告诉您的固件加载一个特殊的引导加载程序,以便快速将系统恢复到关机前的状态。很酷吧?但是,由于它会更改 EFI 系统的下次启动选项,因此在安装 GRUB 时必须禁用此功能。您可以通过执行以下操作来禁用此功能:

  1. 打开控制面板(在 Windows 8+ 中,从桌面按 Windows+X->控制面板)(显然微软讨厌高级用户,因此在开始菜单中搜索“控制面板”现在是打开它的最快方法)
  2. 导航至电源选项
  3. 点击“选择电源按钮的功能”
  4. 点击“更改当前不可用的设置”
  5. 确保底部的“开启快速启动(推荐)”框已选中不是检查。

可以找到更详细的说明这里。安装 GRUB 后,您可以重新启用快速启动,这似乎不会对 Ubuntu/GRUB 启动造成任何问题。只需确保在安装过程中将其禁用即可。

禁用快速启动后,关闭计算机。由于快速启动已禁用,Windows 将完全关闭,并且不会更改固件的 EFI 管理器中的下次启动选项。(通俗地说:Windows 不会告诉您的 HP 系统在下次开机时启动其快速启动文件,因此它将使用 EFI 启动管理器的列表,这是理所当然的。GRUB 将把自己放在此列表的首位。)

步骤 3:使用 gparted 设置分区

在安装 Ubuntu 之前,您需要使用实时 CD/USB 为其创建一个单独的分区。这样,它就不会覆盖 Windows。

*确保您有备份。不保证——这取决于 Windows 决定在您的启动分区中做什么,也可能取决于您使用的 Ubuntu 版本/发行版——我还没有全部使用过。

要创建分区,您需要启动您的实时 CD/USB,然后打开 gparted。有很多关于使用 gparted 的教程,而且很容易理解,所以我将具体细节留给您和互联网。

  • 您将需要 4 个分区:

    1. 启动分区。如果您已经安装了 Windows,则无需执行任何操作 - 它应该已经是驱动器中的第一个分区之一。有时 Windows 还会在磁盘开头创建另一个小分区,称为恢复. 别管这件事。

      • 如果你正在进行全新安装,并且想要从头开始一切(这将删除你的所有数据),继续删除驱动器上的所有分区,然后创建此分区。它应该是第一个分区;其格式应为FAT32;应该是至少 200 MB大小。如果 gparted 有标签选项,只需调用它boot。如果没有标签选项,不要担心。你必须但是,请在此分区上设置“boot”和“esp”标志;如果没有它们,Ubuntu 安装程序将忽略它并使用传统模式安装,并且 Windows (10) 将拒绝安装并显示错误“我们无法创建新分区或找到现有分区”。或者不。这似乎取决于 Windows 那天的感受......
    2. Windows 分区。同样,如果您已经安装了 Windows,这个分区显然应该在这里,在启动和恢复分区之后。这是您想要的位置,但您需要调整它的大小以便为您的 Ubuntu 分区和 linux-swap 分区腾出空间。使用 gparted 的调整大小/移动选项来执行此操作。Ubuntu 至少需要 5 GB,而 linux-swap 分区应该至少是物理 RAM 大小的一半,因此请调整 windows 分区的大小以留出足够的空间。gparted 会警告您可能的数据丢失 - 缩小分区不会破坏或损坏任何数据,只要您不将其缩小到正在使用的空间即可。

      • 如果从头安装两个操作系统(再次,这将删除你的所有数据),微软表示64 位操作系统至少需要 20 GB,因此此分区需要至少 20 GB。不过,你可能想要更多:我只使用了启动分区后一半的空间用于 Windows,另一半用于 Ubuntu 和 linux-swap。如果你从头开始,这个分区需要格式化为FAT32。安装 Windows 时,它会将其格式化为 NTFS。不要使用 gparted 执行此操作;Windows 对 NTFS 的实现与 gparted 的实现不同,并且 Windows 可能无法识别该分区。在 Windows 10 安装程序中,您应该可以选择将 Windows 10 放在哪个分区上。如果它的格式为 FAT32,Windows 应该能够看到它并自行安装在那里。如果您可以标记此分区,请将其标记为Windows。这将使您在 Windows 安装过程中更加轻松。说到 Windows 安装程序 - 暂时不要开始。如果您同时安装 Ubuntu 和 Windows,而不是从 8 或 8.1 升级到 10,那么很多更容易首先安装 Ubuntu
    3. Linux 分区。与 Windows 分区一样,其大小可能不同,但Ubuntu 网站建议至少 5 GB。同样,你可能想要的远不止这些。如果你要升级而不是重新安装两个操作系统,你应该能够在 gparted 中显示的新“未分配”空间中创建此分区。将它设置得尽可能大,但请记住为 linux-swap 分区留出空间如果您打算使用其中一个。它应该被格式化为 ext4。如果您出于某种原因更喜欢 ext2 或 ext3,那么它们也应该可以工作。
      • 如果从头开始安装,请按照上述步骤创建 Ubuntu 分区。确保其格式为ext4、ext3 或 ext2。这将允许 Ubuntu 使用它,但阻止 Windows 10 安装程序识别它,这会导致它默认为您在步骤 3 中创建的 FAT32 分区,它可以读取该分区。
    4. 可选但建议:aLinux 交换分区至少是物理 RAM 大小的一半是一个很好的开始,但我建议阅读细节。我有 8 GB 的 RAM 和 1TB 的硬盘,所以我将这个分区的大小设置为与我的物理 RAM 相同。

步骤 4:首先安装 Ubuntu

无论您是从现有 Windows 操作系统升级到 Windows 10,还是将 Windows 10 和 Ubuntu 发行版安装到新的或新重新分区的硬盘上,首先安装 Ubuntu 都容易得多。Ubuntu 使用 GRUB 2 作为其引导加载程序,其工作方式与 EFI 引导加载程序相同。Windows 10 使用 Windows 启动管理器,其工作方式……嗯,与 Windows 的工作方式相同……如果您首先安装 Windows,则如果不在启动过程中按住特殊键以阻止 Windows 启动管理器加载,则可能无法启动到 Ubuntu,因为当 GRUB 添加到其引导加载程序列表中时,Windows 启动管理器不会尊重它。因此,请先安装 Ubuntu 和 GRUB,然后为 Windows 启动管理器向 GRUB 添加条目。

步骤 4.1:清除旧的 EFI 条目(可选)

请小心。删除错误的内容可能会造成大问题。

在安装 Ubuntu 之前,我们要确保过去安装的操作系统的幽灵不会在未来再次困扰我们。在 UEFI 系统中,操作系统使用 EFI(可扩展固件接口)文件来告诉固件:“嘿,我存在。在这里你可以找到我。”安装新操作系统时,它会将一个条目添加到 EFI 启动管理器的列表中,从而为其提供一个唯一的条目编号,并告诉 EFI 启动管理器它的 EFI 文件在哪里(Windows 注册了几个不同的 EFI 文件 - 一个用于常规启动,一个用于恢复启动,一个用于快速启动 - 可能更多,具体取决于您的固件和操作系统版本)。EFI 启动管理器还会跟踪启动顺序:一个条目编号列表,用于指定首先启动的内容。如果您一直在使用 EasyBCD;bcdedit;Windows 的启动修复或恢复工具;Linux 操作系统中的启动修复;或者即使您已经更新或重新安装了 Windows,您的 EFI 条目列表现在也很有可能有一些重复项。至少我的情况就是如此。这里有重复项可能会拖慢您的启动过程,因为固件会筛选过期或错误的文件条目,直到找到可以工作的引导加载程序。它还可能导致引导循环,其中引导加载程序 A 将固件指向引导加载程序 B,后者将其指向回 A,然后事情开始花费非常非常长的时间……

无论如何,要查看您的 EFI 条目列表并查看需要清理的内容,请使用efibootmgr您的实时 CD/USB 软件包。您需要sudo apt-get install efibootmgr在终端中使用 安装它,然后使用 运行它sudo efibootmgr。默认情况下,您将获得如下所示的条目列表:

来自 efibootmgr 输出的 EFI Boot Manager 条目列表图片

当我第一次使用此工具时,在摆弄 EasyBCD 和 bcdedit 尝试以正确的顺序启动后,这里有超过一百个条目,其中大多数是重复的。

如果您的启动管理器列表不是太混乱,或者您不确定什么可以删除和什么不应该删除,请直接跳至步骤 4.2。

要清除不需要的条目,请使用efibootmgr -b <hex_number> -B,其中hex_number替换为引导条目中列出的编号。因此,要删除USB Drive (UEFI)条目(编号为 Boot2001),我会使用sudo efibootmgr -b 2001 -B。您会注意到我留下了一些重复项(所有 3000 多个编号条目)。您可以使用efibootmgr不同的选项来查看条目的其他属性,例如它们指向的文件路径。这些条目看起来像是重复项,但它们都指向我的 HP 笔记本电脑用于更新其 BIOS 的不同文件。请小心移除内容。此处的内容可能很难或不可能替换。您还可以使用 efibootmgr 来更改它所显示的 BootOrder。请参阅手册页了解有关此有用工具的更多信息。

步骤 4.2:安装 Ubuntu

清理完 EFI 启动管理器条目后(如果您选择这样做),终于可以安装 Ubuntu 了。加载实时 CD/USB 后,从引导加载程序菜单中选择安装选项,或者登录后从桌面启动它。在安装程序的第一页上选择您的选项。第二部分将如下所示:(我使用的是 Xubuntu 14.04,因此您的安装程序可能会有所不同,但选项应该非常相似。)

Xubuntu 14.04 安装选项的屏幕截图

如果您的安装程序没有检测到您的 Windows 安装(就像我的一样),您需要选择“其他”选项。从那里,您将看到一个类似于您用于设置分区的 gparted 菜单的屏幕。只需选择您创建的分区,然后选择分区并单击“更改”即可将它们分配给正确的挂载点。

  • 如果您要从头安装这两个操作系统,请执行相同的操作。不要使用自动安装选项。你需要确保 Ubuntu 安装在 ext2/ext3/ext4 分区中,不是FAT32 Windows 分区。

步骤 5:更新或安装 Windows

您应该有 Windows 10 的安装盘。在开始安装之前,请确保您附近有产品密钥,否则您将无法安装/升级。当您启动安装 CD/USB 时,安装程​​序非常简单。对我来说有点太简单了 - 唯一的按钮是“安装 Windows 10”或类似的按钮,而 Windows 8、8.1 和 10 因其幕后安装而臭名昭著,它只是说“我们正在准备”,并没有提供有关它实际上对您的系统做了什么的详细信息。如果您到目前为止一直遵循这些说明,那么定期开始安装应该没问题。

  • 如果您从 Windows 8 或 Windows 8.1 升级,则在安装过程中不需要做任何特殊操作。完成(非常长的)安装,然后继续执行步骤 6。

  • 如果您正在全新安装,安装程序将询问您要将 Windows 10 安装在哪里。请确保选择您在步骤 2 中创建的 FAT32 分区,而不是其他分区,否则该分区将被清除并格式化。由于 Ubuntu 已安装,Windows 10 应该尊重启动分区,而不是重新格式化它。清除 EFI 启动管理器列表中的垃圾条目还将释放 200 MB 的小启动分区中的空间,从而减少 Windows 感到困惑和愤怒并自行清除整个分区的可能性。

步骤 6:更新并(可选)自定义 GRUB

安装或升级到 Windows 10 后,您需要重新启动到 Ubuntu 来更新 GRUB,以便它在其列表中包含 Windows 启动管理器。在执行此操作之前,请再次禁用快速启动。这与第 2 步中的操作非常相似。控制面板和设置 UI 略有不同,但大多数选项仍然存在。

再次禁用快速启动后,重新启动计算机。

如果 Windows 默认启动,则需要按住笔记本电脑的特殊键才能进入系统的固件菜单。在我的 HP Touchsmart 上,该键是 Esc。其他常用键是 F12、Delete、F10... 您的计算机手册应该能够帮助您。从固件菜单启动到 GRUB。应该有一个“选择启动设备”或类似选项,Ubuntu 或 GRUB 应该列在那里。如果没有列出,请查找从 EFI 文件启动的选项,然后浏览到 /EFI/ubuntu/grubx64.efi 或(如果您启用了安全启动)EFI/ubuntu/shimx64.efi。这些文件的实际路径可能因您的选项以及启动分区的设置方式而异,但文件名应该相同。选择其中一个 .efi 文件应该会启动到 GRUB,然后您可以在那里启动到您的 Ubuntu 发行版。登录后,打开终端并输入sudo update-grub。这将运行 GRUB 用于编译 grub.cfg 的 os-prober 脚本,该脚本告诉 grub 的 EFI 文件要包含哪些条目、使用什么颜色等。os-prober 脚本应该识别 Windows 启动管理器,并自动将其添加到列表中。

或者,您可以安装 Grub Customizer 来更改菜单项的顺序并更改 GRUB 菜单的行为和颜色和背景。您可以使用 从终端安装它sudo apt-get install grub-customizer,然后运行sudo grub-customizer

在与 Windows 操作系统共享的 UEFI 系统上使用 GRUB 时,请勿安装到 MBR。一些教程将使用 Grub Customizer 的“文件”菜单下的“安装到 MBR”选项列为关键步骤。你应该不是在大多数 UEFI 系统上执行此操作。MBR(主引导记录)是为 BIOS 固件设计的,并且在某种程度上仍由 Windows 引导加载程序使用。当 GRUB 已经在 EFI 条目列表中时,将其添加到 MBR 可能会导致大量混乱。如果您需要确保 GRUB 是引导顺序列表中的第一个条目(即,如果 Windows 始终在引导,即使您做了所有正确的事情),请使用启动管理器(参见步骤 4.1)查看/编辑 EFI 管理器的启动顺序。

笔记

我没有提到安全启动完全不会,因为它通常不会影响 Ubuntu 的安装。许多双启动教程都谈到了禁用它,但对于当前的 64 位安装程序来说,这通常不是必需的。但是,每台 PC 都不同,而且安全启动相当新(2012 年),因此不同的固件可能会以不同的方式实现。例如,我的 HP 固件版本包含一个“传统启动”选项,该选项会禁用安全启动并将已安装的操作系统视为 BIOS 固件:有些人建议启用此功能以进行双启动安装。在我的系统上以传统启动模式安装 Ubuntu 会阻止 GRUB 将自己添加到 EFI 条目列表中,因此它所能做的就是将自己添加到 MBR,而 Windows 启动管理器可以完全控制 MBR。Windows 启动管理器甚至需要进行大量调整才能显示条目列表,而在这之后,它只会启动 Windows 条目,这使得 GRUB 无法使用,除非每次开机时手动选择其 EFI 文件。

这里有关 Ubuntu、安全启动和传统启动的更多信息,以及有关 UEFI 和 BIOS 安装之间的差异的一般信息。

答案2

我有一台三星笔记本电脑,上面已经安装了 Windows 10,我试图安装具有多个实例的 Linux;Ubuntu 12.04、14.04 和 16.04。我使用了 Boot-Repair 并在 BIOS 设置中更改了 Boot Priority,结果首先加载了功能齐全但混乱的 GRUB。用户 Michael Hoffmann 的回答对如何在空白驱动器上安装以及如何清理 GRUB 提供了很好的解释,但我不想删除我的 Windows 10 安装。

详细解释可以参见我的帖子

答案3

我可以向您介绍一种解决此问题的简单方法,如果所有合法解决方案都无法解决您的问题,请使用它。

由于 Windows 不断改变启动顺序,因此破解方法是欺骗 Windows 将 Ubuntu grub 识别为 Windows 启动文件,即启动引导文件

第 1 部分:访问 Windows 上的 EFI 文件夹

打开命令以管理员身份安装 EFI 文件夹并访问它。逐个执行以下命令。下面我已分配了字母G对于安装,请确保在您的电脑中分配一个未分配的字母。

mountvol g: /s
g:
cd EFI\

您应该在 EFI 中看到一个 Microsoft 文件夹和 Ubuntu 文件夹。

第 2 部分:复制启动grub2.efi从 Ubuntu 到 Microsoft\Boot\ 作为启动引导文件

首先创建启动引导文件

cd Microsoft\Boot\
rename bootmgfw.efi bootmgfw_.efi

现在进行复制并重命名。

copy g:\EFI\ubuntu\grubx64.efi g:\EFI\Microsoft\Boot\
rename grubx64.efi bootmgfw.efi

第 3 部分:卸载 EFI 文件夹

逐个执行以下命令。

c:
mountvol g: /d

现在重启你的电脑,你应该看到 Ubuntu GRUB 加载,其中应该有一个选项Windows UEFI 加载程序也可以启动 Windows。

答案4

我发现了一个很多更简单的解决方案,适用于安装了 Windows 10 的 HP 笔记本电脑 (355 G2)

  1. 启动时按 Esc
  2. 按 F9 查看启动选项
  3. 选择 USB 选项不是UEFI(在我的电脑上,它位于列表底部)并按 Enter
  4. 然后您将看到一个错误消息屏幕。但是,您只需输入“live”来试用操作系统或“live-install”并按回车键进行安装,一切都会顺利进行……

相关内容