系统跳过 grub 并加载到 Windows (UEFI)

系统跳过 grub 并加载到 Windows (UEFI)

这是我第一次在使用 UEFI 而不是 BIOS 的计算机上安装 Linux(Debian 测试)。我先安装了 Windows,然后安装了 Debian(就像我一直做的那样),但无论如何,系统都会直接启动到 Windows 10。

我尝试过很多解决方案:禁用安全启动,尝试多种BIOS设置(CSM支持启用-禁用,仅UEFI启动,UEFI和Legacy等),禁用Windows fastboot,尝试安装rEFInd,尝试从Windows shell使用bcdedit,尝试完全重装系统..

引导至 GRUB(已安装且正常工作)的唯一方法是使用 rEFInd USB。通过这种方式,我设法使用 efibootmgr EFI/debian/grubx64.efi 命令将 GRUB 添加到 EFI(缺少),但它仍然无法正常工作。

我的电脑是 Thinkpad T470。

答案1

除了您已经提到的尝试之外,我想到了两种可能性,都涉及系统固件:

  1. 固件实际上并没有正确实现 UEFI,忽略各种 UEFI 启动变量,只是无条件加载(\EFI\Microsoft\Boot\bootmgfw.efi如果存在)。如果是这种情况,那么除了 Windows 之外,您实际上无法执行任何操作来正确地双启动系统上的任何内容。许多较旧的技嘉主板都因这一点而臭名昭著,但我认为联想从未在任何 Thinkpad 上这样做过。
  2. UEFI 引导加载程序变量是只读的,但其实现方式与 UEFI 规范不匹配。我知道至少有一些 THinkpad(例如我曾经拥有的 L540)具有允许用户“锁定”这些变量的固件,以便它们无法更改,据说是为了保护系统免受启动时恶意软件的侵害(而且我使用它来阻止 Windows 重写启动顺序很长一段时间,直到我了解了这个bcdedit技巧)。

区分这两种情况实际上并不难。要检查第二种情况是否发生:

  1. 启动进入 Linux。
  2. 使用该efibootmgr命令添加虚拟启动项或更改启动顺序。
  3. 完全关闭系统(不要重新启动,实际上是关闭系统)。
  4. 再次启动进入 Linux。

如果您在步骤 2 中所做的更改仍然存在,那么第一种情况可能是您的问题,并且您可能无法更改任何内容以使该系统双引导 Windows 和 Linux。否则,就是第二种情况,您可能可以在固件设置中找到一个选项来禁用此行为(我不记得我的 L540 上的选项是什么,但它应该位于“启动”或“安全”选项卡中) 。

答案2

我在 ideapad 330 (Arch linux) 上遇到了同样的问题。使我的系统可双重启动的最简单有效的方法是更改​​ Windows efi 文件的路径。恢复 grub 后,只需重命名“Microsoft”目录,并在 /boot/grub/grub.cfg 文件中进行相同的更改。现在固件将无法找到 Windows 并且应该启动 grub。唯一的问题是当你想升级内核时。由于 grub 会自动重新配置,因此您必须在升级之前改回原始目录名称。在其他情况下,os-prober 将无法找到窗口。

相关内容