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

Mic*_*ann 117 boot dual-boot hp uefi windows-10

我有一台 Windows 8 附带的 HP Pavilion Touchsmart 笔记本。我已经升级到 8.1,现在我想用 Windows 10 双启动一个 Ubuntu 发行版。使用 Windows 8.1 双启动时,Windows 启动管理器总是优先,即使在安装 GRUB 之后。我需要做什么才能让 GRUB 成为默认引导加载程序而不是 Windows 引导管理器?

Mic*_*ann 207

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

经过多次头痛、两次意外的硬盘驱动器重新格式化以及对 HP 有缺陷的固件实施的诸多挫折之后,我终于让 Xubuntu 和 Windows 10 很好地并排运行。我已经在 Windows 10 上做到了这一点,但它也应该在 Windows 8.1 上工作。这两个较新的操作系统都使用新的(ish)UEFI 固件系统,而不是传统的 BIOS 系统,这是与双引导最容易混淆的地方。我从很多地方阅读了很多关于使用 BIOS 系统进行双引导的说明,其中谈到 UEFI,就好像它只是一种不同类型的 BIOS,或者 BIOS 和操作系统之间的可选层。UEFI 和 BIOS 不是一回事;UEFI 不是 BIOS,BIOS 也不是 UEFI。他们完全不同。

首先,不要使用 EasyBCD。我看过很多过时的推荐 EasyBCD 的双引导教程,但它旨在与 Windows 7 和 Windows Vista 使用的传统 BIOS 固件配合使用,并且不适用于较新的 UEFI 固件(Windows 8、8.1 或 10)。如果您已经使用过 EasyBCD,请不要担心 - 它可能做的最糟糕的事情是通过将内容写入 MBR 来弄乱您的 EFI 引导条目。我们将在第 4 步中清理它。说到 MBR,避免像瘟疫一样。主引导记录是在传统 BIOS 固件中用作引导加载程序列表的内容,这些引导加载程序存储在硬盘驱动器的引导分区(或者,如果由 Windows 写入,则在任何一个分区中的第一个分区)中。它的目的是列出硬盘驱动器上的操作系统,并告诉固件哪个首先启动。这不适用于 HP 的 UEFI 固件。好像如果有'

你需要什么:

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

第 1 步:进行备份

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

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

第 2 步:禁用快速启动,然后关闭计算机

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

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

Windows 8、8.1 和 10 使用这种称为“快速启动”的奇特新事物,它告诉您的固件加载一个特殊的引导加载程序,可以非常快速地将系统恢复到关闭前的状态。很酷吧?好吧,因为它更改了 EFI 系统的下次启动选项,所以在您安装 GRUB 时必须禁用此功能。这可以通过执行以下操作来完成:

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

可以在此处找到更详细的说明。您可以在安装 GRUB 后重新启用 Fast Startup,这似乎不会导致 Ubuntu/GRUB 启动出现任何问题。只要确保它在安装过程中被禁用。

禁用快速启动后,关闭计算机。由于禁用了快速启动,Windows 将完全关闭,并且不会更改固件 EFI 管理器中的下次启动选项。(外行的术语:Windows 不会告诉您的 HP 系统在下次打开时引导其快速启动文件,因此它将使用 EFI 引导管理器的列表,因为它应该。GRUB 会将自己放在此列表的第一个位置。)

第 3 步:使用 gparted 设置分区

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

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

要制作分区,您需要启动到您的 Live CD/USB,然后打开 gparted。有很多关于使用 gparted 的教程,而且很容易弄清楚,所以我将把细节留给你和互联网。

  • 您将需要 4 个分区:

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

      • 如果您正在执行全新安装,并且想要从头开始一切(这将清除您的所有数据),请继续删除驱动器上的所有分区,然后创建此分区。它应该是第一个分区;它的格式应该是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 会警告您潜在的数据丢失——缩小分区不应破坏或损坏任何数据,只要您不将其缩小到正在使用的空间。

      • 如果从头开始安装这两个操作系统(同样,这将清除您的所有数据),Microsoft 表示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 分区,请记住为 linux-swap 分区留出空间。它应该被格式化为ext4。ext2 或 ext3 也应该工作,如果你出于某种原因更喜欢那些。
      • 如果从头开始安装,请按照上述方法制作 Ubuntu 分区。确保其格式为ext4、ext3 或 ext2。这将允许 Ubuntu 使用它,但阻止 Windows 10 安装程序识别它,这应该会导致它默认为您在步骤 3 中创建的 FAT32 分区,它可以读取。
    4. 可选,但推荐:一个linux-swap 分区至少物理 RAM 大小的一半是一个好的开始,但我建议阅读详细信息。我有 8 GB 的 RAM 和一个 1TB 的硬盘驱动器,所以我只是让这个分区与我的物理 RAM 大小相同。

第 4 步:首先安装 Ubuntu

无论您是从现有的 Windows 操作系统升级到 Windows 10,还是将 Windows 10 和 Ubuntu 发行版都安装到新的或新分区的硬盘驱动器,首先安装 Ubuntu 会容易得多。Ubuntu 使用 GRUB 2 作为其引导加载程序,它以 EFI 引导加载程序应有的方式执行操作。Windows 10 使用 Windows 启动管理器,它可以做一些事情......好吧,Windows 的方式......如果你先安装 Windows,你可能无法在引导过程中不按住特殊键的情况下引导到 Ubuntu停止加载 Windows 启动管理器,因为 Windows 启动管理器在添加到其引导加载程序列表时不尊重 GRUB。因此,请先安装 Ubuntu 和 GRUB,然后为 Windows 引导管理器向 GRUB 添加一个条目。

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

请注意这里。删除错误的东西会导致巨大的问题。

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

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

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

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

如果您的启动管理器列表不太杂乱,或者您不方便决定哪些可以删除,哪些不应该删除,只需跳到步骤 4.2。

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

步骤 4.2:安装 Ubuntu

在您清理了 EFI 启动管理器条目之后,如果您选择这样做,那么最后是安装 Ubuntu 的时候了。加载 Live 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 定制器的“安装到 MBR”选项的关键步骤。你应该不是这样做的最UEFI系统。MBR(主引导记录)是为 BIOS 固件设计的,在某种程度上仍然被 Windows 引导加载程序使用。将 GRUB 添加到 MBR,当它已经在 EFI 条目列表中时,可能会导致很多毛球。如果您需要确保 GRUB 是引导顺序列表中的第一个条目(即,如果 Windows 始终在引导,即使您做的一切都正确),请使用efibootmgr(请参阅步骤 4.1)查看/编辑 EFI 管理器的引导顺序.

笔记

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

有关Ubuntu 和安全启动和传统启动的更多信息,以及有关 UEFI 和 BIOS 安装之间的一般差异的信息,请参见此处

  • +1 是我读过的有关 UEFI 的最佳解释。我以为这是一种“新BIOS” (27认同)
  • 这是一个令人难以置信的指南。我理解前面提到的简化这个问题的愿望,但我认为这个问题没有简单的答案。是的,您可以假设将其缩小为“做这个,然后做这个”的要点列表,但我认为这没有必要。必须非常小心地处理驱动器;不希望普通用户尝试遵循项目符号列表并在中间某处失败。 (14认同)
  • 恕我直言,太长了,无法在本网站上给出一个好的答案。不要忘记你写给的听众:不知道 GPU 和 CPU 之间区别的普通用户......关心我是否把它弄得有点傻?(你知道如何恢复编辑吗?) (12认同)
  • 我见过的最好的答案之一。很快就会在即将推出的 Ubuntu 上试用。 (6认同)
  • 请继续!奥卡姆剃刀,嗯?我努力简化这个而不觉得我遗漏了关键细节,所以任何帮助表示赞赏。 (5认同)
  • 您*必须*使用 gparted 用 boot + esp 标志标记引导分区;我没有这样做,Windows 拒绝与 Ubuntu(安装在传统引导模式下)共享磁盘。使用这些标志标记分区后,Ubuntu 安装程序将自动使用它并以 EFI 模式安装。然后 Windows 不会拒绝安装在同一个磁盘上并显示错误“无法创建新分区”.. (4认同)
  • 很棒的教程,留着以后用。非常感谢@MichaelHoffmann (3认同)
  • 很棒的指示。但我错过了一些重要的东西。如果您必须使用 GParted 从头开始​​创建表分区,**设置 gpt 模式非常重要,而不是 msdos(GParted 默认)** 如果在 msdos (MBR) 模式下创建分区,Windows 10 将拒绝安装! (3认同)
  • @The1nk,我以前从未见过,所以它可能是 16.10 的新功能,或者特定于您的硬件。如果我是你(如果它坏了不要怪我)我会选择 /dev/sda 并让 Ubuntu 做它的事情。根据经验,Ubuntu 会尝试与 Windows 配合得很好,但 Windows 对所有其他操作系统来说都是一个混蛋。因此,如果 Windows 正在使用该引导分区,Ubuntu *应该* 优雅地处理它并将自己添加到 MBR。再说一次,我从来没有处理过这个,所以我不确定。如果您正在对两者进行全新安装,那么现在是进行试验的好时机,所以一定要记录您的结果,如果失败再试一次! (2认同)

小智 8

我不想复制潜在违反政策的帖子,因此我将链接我对这个问题的回答。简而言之,我有一台已经安装Windows 10的三星笔记本电脑,我正在尝试使用多个实例安装 linux;Ubuntu 12.04、14.04 和 16.04。我在我的设置 BIOS 中使用了引导修复并更改了引导优先级,这导致首先加载功能正常但混乱的GRUB用户 Michael Hoffmann 的回答为在空白驱动器上安装以及如何清理 GRUB提供了很好的解释,但我不想删除我的 Windows 10 安装。

详细的解释在我的帖子中找到这里


Env*_*nvy 7

对于这个问题,我可以向您展示一个简单的技巧,如果没有任何合法的解决方案可以解决您的问题,请使用它。

随着 Windows 不断改变引导顺序,黑客是欺骗 Windows 将 Ubuntu grub 识别为 Windows 引导文件,即bootmgfw.efi

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

以管理员身份打开cmd并挂载 EFI 文件夹以访问它。一一执行以下命令。下面我已将字母g分配给安装座,请确保在您的 PC 中分配了一个未分配的字母。

mountvol g: /s
g:
cd EFI\
Run Code Online (Sandbox Code Playgroud)

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

第 2 部分:将grubx64.efi从 Ubuntu复制到 Microsoft\Boot\ 作为bootmgfw.efi

首先创建bootmgfw.efi的备份

cd Microsoft\Boot\
rename bootmgfw.efi bootmgfw_.efi
Run Code Online (Sandbox Code Playgroud)

现在进行复制和重命名。

copy g:\EFI\ubuntu\grubx64.efi g:\EFI\Microsoft\Boot\
rename grubx64.efi bootmgfw.efi
Run Code Online (Sandbox Code Playgroud)

第 3 部分:卸载 EFI 文件夹

一一执行以下命令。

c:
mountvol g: /d
Run Code Online (Sandbox Code Playgroud)

现在重启你的电脑,你应该会看到 Ubuntu GRUB 加载,它应该有一个选项Windows UEFI 加载器来启动 Windows。