Ubuntu 安装程序会覆盖未安装它的磁盘上的 Windows 8 引导加载程序

Ubuntu 安装程序会覆盖未安装它的磁盘上的 Windows 8 引导加载程序

这一切都始于我将 Ubuntu 安装到外部硬盘上的一个分区上。在 Ubuntu LiveUSB 的安装程序中,配置是在外部硬盘 (/dev/sdc3) 上的空白空间中创建一个 ext4 分区,并将引导加载程序写入 /dev/sdc。安装顺利完成,我能够顺利启动到新的 Ubuntu 分区 - 只有一个问题。

重新启动后,我收到了安全启动的投诉(安全启动违规 - 无效签名),这很奇怪,因为我没有告诉安装程序触摸 /dev/sda 上的原始引导加载程序(或任何东西)。在忽略投诉后,我收到了 GRUB 提示,也很奇怪,因为我还没有到达可以选择启动顺序的地步。我重新启动时没有使用外部硬盘,以验证它是在主驱动器上而不是外部驱动器上,此时 GRUB 给了我一个终端而不是菜单。输入“退出”让我回到 Windows 8。

我尝试通过在命令提示符模式下启动 Windows 并使用bootrec /fixmbr和来删除 GRUB bootrec /fixboot,但是没有效果并且 GRUB 仍然存在。

我的问题是:

  1. 当我将 /dev/sdc 指定为引导加载程序分区并将 /dev/sdc3 指定为 Ubuntu 安装分区时,为什么 Ubuntu 的安装程序决定将 GRUB 写入 /dev/sda 和 /dev/sdc?
  2. 在恢复模式下,如何使用 Windows 以外的其他程序摆脱 GRUB?

答案1

忘记您所了解的有关引导加载程序安装的所有信息,至少是针对所讨论的计算机的信息。您尝试将 BIOS 假设应用于 EFI(非 BIOS)计算机,并且它们适用。(是的,我知道大多数人,甚至制造商,都将 EFI 称为 BIOS,但这只会造成混淆。请参阅Adam Williamson 关于此主题的博客文章了解更多详情。)Windowsbootrec /fixmbr命令用于处理 BIOS 模式启动,因此不适用于您。我不知道bootrec /fixboot;它在基于 EFI 的计算机上可能有用,也可能没用。

在 EFI 下,所有引导加载程序和相关程序都驻留在EFI 系统分区 (ESP),这是一个 FAT 分区,其目的是保存引导加载程序和相关文件。通常,一台计算机只有一个 ESP,尽管一台计算机有多个 ESP 是合法的。双磁盘计算机可能有一个、两个、三个或更多 ESP。对于多 ESP 计算机,不清楚 Ubuntu 安装程序将使用哪一个。理论上,Ubuntu 安装程序应该使用被标识为“EFI 启动分区”(它们自己的非标准名称安装程序中会显示 ESP 的安装信息;但是,我对 Ubuntu 是否始终如一地这样做表示怀疑。(我还没有机会深入研究这个问题。)无论如何,在 EFI 模式下安装时,Ubuntu 安装程序会保留一个 BIOS 模式提示,提示安装引导加载程序的位置,但它完全没用!我认为 Launchpad 上有一个关于此问题的错误报告,但快速搜索并没有找到它。

那么,理论上,基于 EFI 的计算机可以安装数十个引导加载程序。固件实际上使用哪一个?这是由一组 NVRAM 条目决定的,这些条目标识引导加载程序并列出应尝试它们的顺序。NVRAM 条目通过分区和文件名标识引导加载程序。

目前尚不清楚您是否拥有一个、两个或更多个 ESP;但是,由于 NVRAM 条目通过分区和文件名来识别引导加载程序,因此该细节基本上无关紧要。很可能发生的事情是 Ubuntu 将 GRUB 添加到 ESP,并在计算机的 NVRAM 中添加了一个条目,告诉它默认使用 GRUB。(事实上,它会指向 Shim,这是 Linux 处理安全启动的工具之一。Shim 将启动 GRUB。)我不确定为什么您会收到安全启动警告,然后是 GRUB。也许您有一个 NVRAM 条目,它直接指向 GRUB,而无需经过 Shim,后面还有一个指向 Shim 的条目。这可以解释它,但据我所知,Ubuntu 安装程序不会以这种方式设置。

在 EFI 下,您可以编辑 NVRAM 条目来控制启动顺序。在 Linux 中,该efibootmgr实用程序会执行此工作。在 Windows 中,您可以使用bcdedit或第三方工具,例如简易UEFI。使用efibootmgr,单独键入命令以查看启动项列表,然后使用选项-o设置启动顺序,例如efibootmgr -o 5,3,8让固件Boot0005首先尝试,然后启动(Boot0003如果失败),最后尝试Boot0008。(当然,您需要设置顺序你的系统,基于没有任何选项的输出efibootmgr。)大多数 EFI 都有自己的启动管理器,可让您选择启动加载程序。不过,具体细节因计算机而异。您通常必须在启动过程的早期按下功能键才能进入此启动管理器。

答案2

  1. 我认为您必须告诉它不要安装到 /dev/sda,因为那是默认安装的位置。

  2. 使用 Windows 修复磁盘按照以下说明操作http://www.fixedbyvonnie.com/2013/12/how-to-repair-the-efi-bootloader-in-windows-8/我相信您仍然需要重新创建启动配置数据 (BCD) 存储来修复您的问题(/fixmbr bootrec /fixboot 是不够的)。

相关内容