在 Windows 中运行“/bcdedit set {bootmgr} path \EFI\ubuntu\grubx64.efi”后,Ubuntu 20.04 无法启动

在 Windows 中运行“/bcdedit set {bootmgr} path \EFI\ubuntu\grubx64.efi”后,Ubuntu 20.04 无法启动

我在将 GRUB 引导程序设置为我的系统上的默认引导程序时遇到了问题,我的系统是 Windows 10 和 Ubuntu 20.04 之间的双引导程序。它没有出现在我的 UEFI/BIOS 中的任何位置,我在网上看到运行

bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi

将其设置为 Windows 中的默认 grub,这意味着每次启动系统时我都可以选择使用哪个操作系统,而不是像以前一样只默认使用 Windows 或 Ubuntu。但是,当我这样做时,在尝试启动 Ubuntu 时,我收到一条包含三行的错误消息,内容如下:

failed to open \EFI\UBUNTU\(gibberish characters including some chinese characters) -- invalid parameter
Failed to load image \EFI\UBUNTU\(gibberish characters including some Chinese) -- invalid parameter
start_image() returned invalid parameter

然后,它就会启动进入 Windows。GRUB 却不见了。

此外,如果我在启动时手动选择 Ubuntu,我根本无法启动它,并出现同样的错误。我试图撤消我在 Windows 中运行的命令,但没有成功。我担心我必须格式化包含 Ubuntu 的分区并重新开始,而我真的不想这样做。

在我运行 windows 命令之前,如果我在启动时按下 F11(我使用的是 MSI b550 PRO WIFI),然后在那里选择 ubuntu,我就可以启动到 Ubuntu。但是,GRUB 引导加载程序没有出现(并且 GRUB 也没有出现在 BIOS/UEFI 中的启动顺序中)。这就是我这样做的原因,现在看来我无法运行 Ubuntu,大概是因为我搞砸了 windows 命令。

更多信息:如果我跑

bcdedit \enum {bootmgr}

我发现 Windows 启动管理器的路径为“EFI\UBUNTU\SHIMX64.EFI”,这似乎很奇怪,因为我第一次输入的肯定不是这个。这可能与 Ubuntu 无法启动有关吗?

更新:几年前我就发现了类似的问题:无法在双启动中访问 Ubuntu 18.04,因为系统直接启动到 Windows 10

我尝试了第一个解决方案(其中设置目录表示文件路径不存在)和第三个解决方案,当我运行

cp -p .... \EFI\ubuntu

它告诉我我尝试挂载的文件不存在。

答案1

我有一台 Windows 机器,可以在 Windows 10 和 ubuntu 18.04 之间进行双启动。在 2022 年 2 月进行一些 Windows 升级后,该机器只能直接启动到 Windows 10。感谢上述答案以及在其他地方收集的答案,下面是我修复双启动失败的步骤。

步骤 1:使用 bcdedit 为 grubx64.efi 设置正确的 booloader 路径

首先,让我们检查当前的 BCD(启动配置数据)设置。在 Windows 中,以管理员身份打开命令提示符,然后输入

bcdedit

就我而言,

Windows Boot Manager
—-----------------------------
identifier    {bootmgr}
path          \EFI\ubuntu\shimx64.efi
...

由于我的电脑禁用了安全启动,我不应该使用 shimx64.efi。因此,我使用许多人推荐的命令将路径更改为 grubx64.efi

bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi

您可以再次输入 bcdedit 来仔细检查路径是否已更改为

Windows Boot Manager
—-----------------------------
identifier    {bootmgr}
path          \EFI\ubuntu\grubx64.efi
...

步骤 2:将 grubx64.efi 引导加载程序复制到 EFI 系统分区(ESP)

在我的 Windows 机器中,上次 Windows 升级后,grubx64.efi 引导加载程序不知何故丢失了。下面是检查引导加载程序是否存在于 EFI 系统分区 (ESP) 中的步骤。

在 Windows 中,以管理员身份打开命令提示符,然后键入以下命令以将启动分区挂载到驱动器 P: 上。如果 P: 是现有驱动器,则应选择另一个驱动器,例如 Z:。挂载系统分区后,将目录更改为驱动器以检查 \EFI\ubuntu 目录中有哪些文件。

mountvol P: /S
cd /d P:
cd EFI
cd ubuntu
dir

在我的例子中,该目录包含 shimx64.efi、mmx64.efi、grub.cfg 和 BOOX64.CSV。grub.cfg 还在,这很好。但是,没有 grubx64.efi。

因此,我所做的就是将 grubx64.efi 文件复制到此目录中。就我而言,我有一个装有 ubuntu 18.04(我的 ubuntu 映像版本)的 USB 驱动器。我将 USB 驱动器插入 Windows 机器。新驱动器似乎位于 F:。由于我已经在 P:\EFI\ubuntu 中,因此我复制了引导加载程序而没有指定目标路径。

copy "F:\efi\boot\grubx64.efi"

到目前为止,我已经做了两件事。

  1. 使用 bcdedit 为 grubx64.efi 设置正确的 booloader 路径。

  2. 将 grubx64.efi 引导加载程序文件复制到 EFI 系统分区 (ESP)。

我重启了 Windows 机器,双启动又可以正常工作了。现在我可以顺利地依次启动 Windows 或 ubuntu,没有任何问题。

答案2

我遇到了同样的问题,即使我之前没有在 Windows 中运行过任何命令。在互联网上搜索后,我发现其他人也遇到了同样的问题(例如。这里)。我不认为你在 Windows 中使用的命令是问题所在。

我发现我的问题可能是某种 Windows 问题导致 GRUB 加载错误。对我而言真正有用的方法是重新安装 GRUB 以进行 UEFI 启动(而不是 Legacy),继拱门维基并将我的 BIOS 设置从“Legacy+UEFI”更改为“UEFI”。

现在一切运行正常,没有任何问题。

我希望它有帮助!

相关内容