如何防止引导加载程序消失?

如何防止引导加载程序消失?

我在使用 Bitlocker 和安全启动的 Lenovo Yoga C930 上通过 Grub 和 UEFI 双启动 Manjaro 和 Windows。如果我在 BIOS 中禁用安全启动,我可以成功启动到 Manjaro,如果我在 BIOS 中重新启用安全启动,我也可以启动到 Windows。由于未知的原因,而且似乎是随机的,我会丢失我的 Linux 引导加载程序。我不知道它是否被删除,或者突然无法识别,或者什么,但我无法从它启动,并且它没有显示为 BIOS 中的选项。

我可以按照 Wiki 上的说明设法重新安装 Grub,但最终它会消失。这是怎么回事,我该如何防止这种情况发生?

答案1

我认为 Windows 正在让您的系统保持“无癌”状态。

[编辑] 您有两种解决方案,具体取决于您使用的引导方法:传统引导方法和 UEFI。

遗产:

您可以用作bcd启动管理器来启动 Windows 或 Linux。

假设您已安装 grub/dev/sda并且/dev/sda1是 Windows EFI 分区

在Linux中:

mount /dev/sda1 /mnt
dd if=/dev/sda of=/mnt/linux.bin bs=512 count=1

在 Windows 中:

bcdedit /create /d "Linux" /application bootsector

BCDEdit 将返回该条目的字母数字标识符,我将在其余步骤中将其称为 {ID}。您需要将 {ID} 替换为实际返回的标识符。 {ID} 的示例为 {d7294d4e-9837-11de-99ac-f3f3a79e3e93}。接下来,让我们指定哪个分区托管 linux.bin 文件的副本:

bcdedit /set {ID} device partition=c:

我们的 linux.bin 文件的路径:

bcdedit /set {ID}  path \linux.bin

启动时显示的菜单条目:

bcdedit /displayorder {ID} /addlast

最后,让我们指定菜单选项的显示时间:

bcdedit /timeout 30

就是这样!现在重新启动,您将看到菜单,您可以在其中选择启动到 Windows 或 Linux。当您选择 Linux 时,您将进入 it 引导加载程序菜单,您可以在其中选择引导 Linux。

https://www.iceflatline.com/2009/09/how-to-dual-boot-windows-7-and-linux-using-bcdedit/

[编辑] UEFI

您的 Windows 系统有一个 EFI 分区,可以从该分区启动。在 Linux 中,您将其安装到/boot.然后,确保您grub.cfg使用 uuid 查找根分区(默认情况下是这样):例如: linux /vmlinuz-4.4.0-1-default root=UUID=6159e15d-f224-499d-88e0-437b5538f0f1 quiet splash=silent,如果没有,您可以使用blkid列出根分区的 UUID 并在 中调整 grub 配置/etc/grub.d

您将 grub 配置写入/boot/boot/efi/EFI/manjaro/grub.cfg

grub2-mkconfig -o /boot/boot/efi/EFI/manjaro/grub.cfg

重新启动,你“应该”就可以开始了。

答案2

大约两年前,我遇到了类似的问题,使用 Trisquel Linux 和 Windows 8 双重启动。我发布了一个问题/答案这里关于超级用户(当时有人告诉我,出于某种原因,双启动问题在 U&L 上是题外话)。

正如您将在这些帖子中看到的,问题不是 Windows 删除或覆盖 GRUB,而是它定期更改 UEFI 设置以告诉它使用 Windows 引导加载程序,而不是 GRUB。解决方案是在Windows中使用bcdedit,将默认引导加载程序路径设置为GRUB,这解决了我的问题。

我不知道相同的解决方案是否适合您,但也许值得一试?

(另外,我认为您不需要启用安全启动来启动 Windows。我在禁用它的情况下启动到 Windows 8 就可以了。)

答案3

我实际上自己解决了这个问题。结果我不得不手动efibootmgr创建一个新的启动项,并给它一个高优先级。到目前为止,一切都很好。

相关内容