我在将 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"
到目前为止,我已经做了两件事。
使用 bcdedit 为 grubx64.efi 设置正确的 booloader 路径。
将 grubx64.efi 引导加载程序文件复制到 EFI 系统分区 (ESP)。
我重启了 Windows 机器,双启动又可以正常工作了。现在我可以顺利地依次启动 Windows 或 ubuntu,没有任何问题。