如何解决一个驱动器上有两个 EFI 分区的情况?

如何解决一个驱动器上有两个 EFI 分区的情况?

我有一台笔记本电脑,有两个 EFI 分区,一个用于 Windows,一个用于 PopOS(我现在知道这不是一个稳定的配置)。一段时间以来,它运行良好 - 我能够在两者之间切换(如果我没记错的话,在 BIOS 中)。

但是,在一段时间没有使用 Windows 之后,在进行了一些 BIOS 更新之后,我升级了 PopOS。我不知道发生了什么,但升级后笔记本电脑启动进入 Windows。然后我进入 BIOS,发现我只能选择启动驱动器,而不能选择 EFI 分区。

所以,我现在剩下两个 EFI 分区(在一个驱动器上),并且我只能启动其中一个。

我该怎么做才能解决这个问题?理想情况下,我希望能够继续启动两者,但如果我可以启用 PopOS 分区并删除 Windows,我会很高兴。

答案1

拥有两个 EFI 分区本身并不是问题(尽管这肯定不是故意的设置,它可能会在升级过程中使 Windows 感到困惑,但从技术上讲这是合法的)。

但之前你不是从 EFI 分区中选择,而是从固件的 NVRAM 中定义的启动条目中进行选择,指向具体文件在某些或其他分区中。无论文件位于同一分区还是单独的分区,该机制的工作方式都相同。

Linux 有efibootmgr用于编辑 EFI 启动项的功能;重新运行grub-installbootctl install(无论 PopOS 使用哪个)都会自动创建正确的条目。

如果您只有 Windows,请使用bcdedit它来创建 EFI 启动项(不要将其与 Windows 启动管理器项混淆 - 同一个工具可以同时完成这两项操作)。假设 Pop!OS 分区当前已分配,Z:您应该能够执行以下操作:

bcdedit /create /d "Pop!OS" /application firmware
[note down the GUID of the new entry]
bcdedit /set [THE_GUID] device partition=Z:
bcdedit /set [THE_GUID] path \EFI\whatever\grubx64.efi

bcdedit /enum firmware应同时显示 Windows 和 Linux 条目。)

合并两个 EFI 分区应该很简单,只需从旧分区中删除 PopOS 引导加载程序并将其重新安装到 Windows 分区即可。我认为你可以只需移动文件并通过 bcdedit 创建正确的 EFI 启动项即可做到这一点,但我可能建议在 Linux 内部执行此操作 - 挂载 Windows EFI 分区并让 grub-install 放置所有内容(而不是手动移动文件)。

相关内容