当我在外部硬盘驱动器的分区上安装 Ubuntu 时,这一切就开始了。在 Ubuntu LiveUSB 的安装程序中,配置是在外部硬盘 (/dev/sdc3) 的空白空间中创建一个 ext4 分区,并将引导加载程序写入 /dev/sdc。安装顺利完成,我能够很好地启动到新的 Ubuntu 分区 - 只需一次。
重新启动后,我收到了来自 Secure Boot 的投诉(Secure Boot Violation - Invalid signature),这很奇怪,因为我没有告诉安装程序在 /dev 上触摸原始引导加载程序(或任何与此相关的东西) /sda。在驳回投诉后,我收到了 GRUB 提示,这也很奇怪,因为我还没有达到可以选择引导顺序的地步。我在没有外部 HDD 的情况下重新启动以验证它是在主驱动器上而不是外部驱动器上,此时 GRUB 给了我一个终端而不是菜单。输入“退出”让我回到 Windows 8。
我试图通过在命令提示符模式下启动 Windows 并使用bootrec /fixmbr
and来擦除 GRUB bootrec /fixboot
,但它没有效果,GRUB 仍然存在。
所以我的问题是:
- 当我将 /dev/sdc 指定为引导加载程序分区并将 /dev/sdc3 指定为 Ubuntu 安装分区时,为什么 Ubuntu 的安装程序决定将 GRUB 写入 /dev/sda 和 /dev/sdc?
- 我怎样才能在恢复模式下用 Windows 以外的东西摆脱 GRUB?
请忘掉你所知道的关于引导加载程序安装的一切,至少关于正在讨论的计算机。您正在尝试将 BIOS 假设应用于 EFI(非 BIOS)计算机,但它们不适用。(是的,我知道大多数人,甚至制造商,都将 EFI 称为 BIOS,但这只会引起混淆。有关此主题的更多详细信息,请参阅 Adam Williamson 的博客文章。)Windows
bootrec /fixmbr
命令旨在处理 BIOS 模式启动,因此不适用于您。我不知道bootrec /fixboot
; 它在基于 EFI 的计算机上可能有用也可能没用。在 EFI 下,所有引导加载程序和相关程序都驻留在EFI 系统分区 (ESP) 中,这是一个 FAT 分区,其目的是保存引导加载程序和相关文件。通常,一台计算机只有一个 ESP,但一台计算机拥有多个 ESP 是合法的。双磁盘计算机可能有一个、两个、三个或更多 ESP。在多 ESP 计算机的情况下,不清楚 Ubuntu 安装程序将使用哪一个。理论上, Ubuntu 安装程序应该使用标识为“EFI 引导分区”的分区(它们自己的非标准名称对于 ESP)在安装程序中;但是,我怀疑 Ubuntu 是否始终如一地这样做。(我还没有机会深入了解这一点。)无论如何,Ubuntu 安装程序在以 EFI 模式安装时保留了一个 BIOS 模式提示,提示在何处安装引导加载程序,但它完全没有用!我认为 Launchpad 上有关于此的错误报告,但快速搜索没有找到它。
那么,理论上,基于 EFI 的计算机可以安装数十个引导加载程序。固件实际使用哪一个?这是由一组 NVRAM 条目确定的,这些条目标识引导加载程序并列出它们应该被尝试的顺序。NVRAM 条目通过分区和文件名识别引导加载程序。
不清楚您是否拥有一个、两个或更多 ESP;然而,因为 NVRAM 条目通过分区和文件名识别引导加载程序,所以该细节基本上是无关紧要的。有可能发生的事情是 Ubuntu 将 GRUB 添加到 ESP,并在计算机的 NVRAM 中添加了一个条目,告诉它默认使用 GRUB。(事实上,它会指向 Shim,它是 Linux 处理安全启动的工具之一。Shim 然后将启动 GRUB。)我不确定为什么你会收到安全启动警告,然后是 GRUB。也许您有一个直接指向 GRUB 的 NVRAM 条目,而无需经过 Shim,然后是一个指向 Shim 的条目。这可以解释它,但 AFAIK Ubuntu 安装程序不会以这种方式设置。
在 EFI 下,您可以编辑 NVRAM 条目来控制引导顺序。在 Linux 中,该
efibootmgr
实用程序完成这项工作。在 Windows 中,您可以使用EasyUEFIbcdedit
等第三方工具。使用,单独键入命令以查看引导条目列表,然后使用该选项设置引导顺序,例如让固件首先尝试,如果失败则启动,最后尝试。(当然,您需要根据输出为您的系统设置顺序efibootmgr
-o
efibootmgr -o 5,3,8
Boot0005
Boot0003
Boot0008
efibootmgr
没有任何选项。)大多数 EFI 都有自己的引导管理器,使您能够选择引导加载程序。但是,细节因一台计算机而异。您通常必须在引导过程的早期按功能键才能进入此引导管理器。我认为您必须告诉它不要安装到 /dev/sda,因为这是默认安装的位置。
使用 Windows 修复盘按照以下说明操作http://www.fixedbyvonnie.com/2013/12/how-to-repair-the-efi-bootloader-in-windows-8/我相信您仍然需要重新创建引导配置数据 (BCD) 存储来解决您的问题(/fixmbr bootrec /fixboot 是不够的)。