因此,我有一台装有 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 引导加载程序添加到引导列表中。诀窍是弄清楚文件是什么。您可以这样做:
- 启动到 Windows
- 打开行政人员命令提示符窗口。(不要为此使用第三方 shell;我见过一些报告说
bcdedit
其中一些无法正常工作。) - 键入
mountvol S: /S
以将 ESP 安装为S:
。 (如果您愿意,可以更改S:
为其他内容。) - 使用命令提示符,检查
S:
Ubuntu 引导加载程序的位置。可能是S:\EFI\ubuntu\grubx64.efi
或S:\ubuntu\shimx64.efi
。如果您看到后者,则使用它应该是安全的,并且可能有必要使用它——shim 是 Ubuntu 处理安全启动 (SB) 的方式,但在非 SB 计算机上,它几乎没有作用。如果安全启动处于非活动状态,则 shim 可能已安装也可能未安装,因此您可能需要直接参考grubx64.efi
。 - 键入
bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi
,如果不存在shimx64.efi
则更改为。如果是其他路径,则更改路径,这种情况不太可能发生。grubx64.efi
shimx64.efi
- 可选地,键入
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
来调整启动顺序:
- 打开终端窗口。
- 键入
sudo efibootmgr -v
以获取启动程序列表。其中一个是用于 Linux 的,它将启动 shim 或 GRUB。注意列表BootOrder
。Windows 条目很可能排在第一位,而 Ubuntu 条目排在后面。有些条目可能会令人困惑。只需忽略它们;专注于查找 Ubuntu 条目并确定其编号(在行Boot####
首的条目中)。 - 键入
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/sda
和1
是默认值,因此只有当您的 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。