在 Ubuntu 之后安装/更新 Windows 8 UEFI - 恢复 GRUB

在 Ubuntu 之后安装/更新 Windows 8 UEFI - 恢复 GRUB

因此,我有一台装有 Windows 8 OEM 副本的笔记本电脑,显然是在 UEFI 配置中安装了 GPT 分区。不久前,我安装了 Ubuntu 13.xx(最新版本),幸运的是,GRUB 检测到了 Windows,到目前为止一切都很好。

昨天,我更新到了 Windows 8.1,它显然重写了引导加载程序,很自然地,我无法启动到 Ubuntu。它直接带我进入 Windows。

我该如何修复 GRUB?大多数帮助页面/文章都谈到了 MBR 分区,据我所知,这与 UEFI+GPT 的情况完全不同。而那些谈到 UEFI 的文章都是关于在安装 Linux 后修复无法启动的 Windows 安装,而我的情况并非如此。

有没有什么尝试过的方法可以让 Ubuntu 重新启动?

PS:在您推荐它之前,不行;如果 Windows 是使用 UEFI 安装的,EasyBCD 或类似工具无法将 Linux 添加到 Windows 引导加载程序。

答案1

使用 MariusMatutiae 建议的 Boot Repair 可能会奏效;但是,该程序有时会做得不明智,所以我宁愿避免使用它。至少有三个不太激进的解决方案:

解决方案 1:使用固件

许多 EFI 都提供内置的启动管理器,可让您调整启动顺序。您的 Ubuntu/GRUB 条目可能仍然存在,因此您需要做的就是使用固件调整启动顺序。这种方法的问题在于 EFI 设置实用程序差异很大,因此不可能提供通用的说明来说明如何执行此操作。但是,如果您的固件支持此功能,那么这可能是最简单的方法——只要您弄清楚如何获取该选项!

解决方案 2:bcdedit在 Windows 中使用

Windowsbcdedit工具可以将非 Windows 引导加载程序添加到引导列表中。诀窍是弄清楚文件是什么。您可以这样做:

  1. 启动到 Windows
  2. 打开行政人员命令提示符窗口。(不要为此使用第三方 shell;我见过一些报告说bcdedit其中一些无法正常工作。)
  3. 键入mountvol S: /S以将 ESP 安装为S:。 (如果您愿意,可以更改S:为其他内容。)
  4. 使用命令提示符,检查S:Ubuntu 引导加载程序的位置。可能是S:\EFI\ubuntu\grubx64.efiS:\ubuntu\shimx64.efi。如果您看到后者,则使用它应该是安全的,并且可能有必要使用它——shim 是 Ubuntu 处理安全启动 (SB) 的方式,但在非 SB 计算机上,它几乎没有作用。如果安全启动处于非活动状态,则 shim 可能已安装也可能未安装,因此您可能需要直接参考grubx64.efi
  5. 键入bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi,如果不存在shimx64.efi则更改为。如果是其他路径,则更改路径,这种情况不太可能发生。grubx64.efishimx64.efi
  6. 可选地,键入bcdedit /set {bootmgr} description "Ubuntu"以设置在 EFI 自己的启动管理器列表中显示的名称。更改Ubuntu为任何你喜欢的名称。

如果您已经知道引导加载程序的文件名,则可以跳过步骤 3 和步骤 4。(无需安装 ESP 即可以bcdedit这种方式使用。)

这种方法的优点是可以防止 Windows 干扰启动顺序——有时 Windows 会主动尝试调整启动顺序。不过,我不知道如果/当您升级到 Windows 8.1 之后的版本时,这是否能防止这个问题再次出现。

解决方案 3:启动 Linux 并使用efibootmgr

您可能可以使用固件自己的启动管理器启动 Linux,在大多数计算机上,您可以通过在启动时按 Esc 或功能键来访问它,尽管具体哪个键因计算机而异。或者,您也可以使用重新索引如果您的启动管理器不够用,可以使用 USB 闪存驱动器或 CD-R 作为启动管理器。您也可以使用 Linux 实时 CD 或紧急磁盘进行启动,但请确保以 EFI 模式启动——BIOS 模式启动不够用。进入 Linux 后,您可以使用以下方法efibootmgr来调整启动顺序:

  1. 打开终端窗口。
  2. 键入sudo efibootmgr -v以获取启动程序列表。其中一个是用于 Linux 的,它将启动 shim 或 GRUB。注意列表BootOrder。Windows 条目很可能排在第一位,而 Ubuntu 条目排在后面。有些条目可能会令人困惑。只需忽略它们;专注于查找 Ubuntu 条目并确定其编号(在行Boot####首的条目中)。
  3. 键入sudo efibootmgr -o {list},更改{list}为以逗号分隔的启动编号列表,例如,sudo efibootmgr -o 5,0如果Boot0005是针对 Ubuntu 的,则Boot0000是针对 Windows 的。您可以根据需要添加更多条目,但第一个条目是最重要的,因为它将首先启动。

如果 Ubuntu 条目确实不是存在,您可以使用 创建一个efibootmgr,例如:

efibootmgr -c -d /dev/sda -p 1 -l '\EFI\ubuntu\shimx64.efi' -L "Ubuntu"

更改-d /dev/sda为指向您的整个磁盘设备并-c 1指定分区号。(实际上,/dev/sda1是默认值,因此只有当您的 ESP 不是时您才真正需要这些/dev/sda1。)

答案2

对此有很多不同的解决方案。一组解决方案肯定需要使用 Linux Live 发行版,例如 Ubuntu。将 Ubuntu 映像刻录到 USB 记忆棒,从中选择启动无需安装即可试用 Ubuntu...,打开终端,然后安装并使用启动修复,按照 Ubuntu 官方文档网页上的说明进行操作。这通常足以修复大多数启动问题。

或者,你可以从终端挂载 HDD 磁盘,而不是下载 Boot-Repair,例如通过发出

   sudo mount /dev/sdaX /mnt

其中 X 是您放置 Ubuntu / 的分区编号。如果您不确定,请在上述命令之前,

   sudo fdisk -l

会告诉你哪个分区是哪个。然后发出以下命令:

   cd /mnt
   sudo chroot .
   sudo update-grub

完成后,按 Ctrl+D。

相关内容