使用双引导机器时如何防止 Windows 覆盖 GRUB

使用双引导机器时如何防止 Windows 覆盖 GRUB

我读了很多关于双引导的文章,看起来就像加载 Windows,然后用 GRUB 加载 Linux 一样简单,但每个人都说 Windows 一有机会就喜欢丢弃 GRUB。我可以采取哪些步骤来防止这种情况发生(除了使用 Windows 的引导加载程序之外,我希望使其尽可能简单)?

答案1

每当您安装 Windows、将其升级到新版本或使用、 或旧版bootrec /fixmbr等工具时,Windows 都会覆盖引导扇区。一般来说,先安装Windows,然后安装Linux。引导扇区将保持不变,直到您执行上述操作之一。 (也许还有其他方法可以写入 MBR。)但是,如果您丢失了 GRUB,它很容易恢复:bootrec /fixbootfdisk /mbr

  • 从 Live CD(CD/DVD 或闪存驱动器)启动。
  • 成为 root 或使用sudo以下命令。
  • 如果需要,列出可用分区:fdisk -l
  • Windows 几乎肯定会存在于 /dev/sda1 上:mount /dev/sda1 /mnt
  • 在 MBR 中重新安装 GRUB:grub-install --root-directory=/mnt/ /dev/sda
  • 重启:shutdown -r now
  • 恢复 GRUB 菜单:update-grub

如果计算机足够强大,您还可以安装 100% Unix、Linux 或 BSD,并在虚拟机中简单地运行 Windows。

另外:您计算机的 BIOS 可能有一个保护引导扇区的选项。

答案2

我找到的一个解决方案在线某个地方(unix.stackexchange.com) 涉及停用 Windows 启动管理器。进入 Linux(如果可以的话,可以是原始安装,也可以是 live CD/DVD)并运行以下命令:

efibootmgr

请注意,此方法仅在 Linux 以 UEFI 模式安装时才有效,因此如果 Linux 以 Legacy 模式安装,您将收到错误消息。如果您在 UEFI 模式下安装它,您将获得一些信息和列表。您会注意到列表中某处有 Windows 引导加载程序/管理器和 Linux。 Windows 可能具有更高的优先级(启动顺序位于列表上方)。

一些(如果不是全部)条目旁边还有星星*,将它们标记为活动状态。

查看 Windows 条目旁边的 4 位启动号并运行

sudo efibootmgr --bootnum #### --inactive

这将停用 Windows 条目。另外,请确保现在停用的 Windows 具有更高的优先级(如果还没有):

sudo efibootmgr --bootorder ####,$$$$,&&&&,%%%%

其中 #### 是 Windows 启动号。

如果您现在重新启动,您将启动到 grub(如果以最高优先级启用 Linux 选项)。

请注意,Windows 似乎无法识别它已被停用,因此这不会通过启动 Windows 或更新来恢复。

我参加了一个本地 Linux 安装节,我们为感兴趣的人安装 Linux,最常见的是作为 Windows 旁边的辅助操作系统。我还没有看到这种方法失败,并且我已经在几个发行版(主要是 Ubuntu 和 Mint)和几个供应商(华硕、宏碁、惠普、联想)上尝试过。

答案3

我确实尝试了上面的一些好的建议,但没有效果。我认为 MS 变得更加棘手。

2021 年对我来说最有效的是遵循启动修复摘要中列出的建议,该建议建议启动 Windows 并在命令提示符中运行以下命令(我需要以管理员身份运行命令才能使其正常工作)

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

注意:上面的命令是根据我的 UEFI 安全启动情况定制的,因此如果您想遵循此方法,那么您需要运行boot-repair并记下他们建议的修复。

除了运行之外,boot-repair您还可以在 Linux 中使用以下命令来获取正确的 efi 路径(如果无法访问 Linux 发行版,您可能需要安装它和/或使用 live-usb):

efibootmgr -v

在 Windows 中运行该bcdedit命令后,我总是会得到 grub 菜单,如果我启动到 Windows,它似乎不会破坏我的 grub,并且在重新启动时我会再次得到 grub 菜单,默认为 Linux。这是一件很美好的事情,

答案4

这是我使用的解决方法,它适用于 Windows 更新,无需干预:将 EFI/Microsomething 中的 EFI/Microsoft 重命名,将 grub.cfg 中的 Windows 引导路径替换为 EFI/Microsomething/bootmfgw.efi,如下所示:

menuentry "Microsoft Windows UEFI-GPT" {
    insmod part_gpt
    insmod fat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --set=root <PROVIDE YOUR EFI DRIVE UUID>
    chainloader /EFI/Microsomething/Boot/bootmgfw.efi
}

相关内容