使用 GRUB 的三重引导 MBR 避免 Windows 引导管理器

使用 GRUB 的三重引导 MBR 避免 Windows 引导管理器

我在 MBR 分区磁盘上的三个不同分区上安装了三重启动系统(Windows 10 Home 21H1/Windows 7 Pro/Debian 11),并且在启动时我可以毫无问题地启动每个系统。但在 GRUB 菜单中,所有 Windows 系统都可以从名为“Windows 10”的单个条目访问(由于第一次安装),该条目运行Windows 启动管理器让我选择我想要启动的 Windows 系统。因此,每个 Windows 系统启动时都会显示 2 个菜单。这是不实用的。

我问自己是否有一种解决方案可以使 WBM 中的 Windows 条目直接从 GRUB 菜单访问,而无需通过 WBM。我搜索并测试了很多不同的解决方案,但没有一个有效。

我相信这是可能的,但我不知道如何......

我尝试的最后一次尝试:

root@host:~# lsblk -lo NAME,FSTYPE,LABEL,UUID
NAME FSTYPE LABEL UUID
sda               
sda1 ntfs   W10H  7A42F6E942F6A8D1
sda2 ntfs   W7P   0628B81B28B80C25
sda3 ext4         a696a4ab-3120-4028-bd87-c2aaa40499bd
...  
root@host:~# cat /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
...
menuentry "Windows 7" --class windows --class os {
   insmod part_msdos
   insmod ntfs
   insmod ntldr
   set root='(hd0,msdos2)'   
   search --no-floppy --set=root --fs-uuid 0628B81B28B80C25
   ntldr ($root)/bootmgr
   chainloader +1
}
root@host:~# update-grub

当我启动这个条目时,我得到: error : /bootmgr file not available


正如 @telcoM 所建议的,我在 SE 的全球部分寻求帮助。我终于在@oldfred和@Tom Yan的帮助下解决了我的问题那里我在其中详细介绍了我的实现。

答案1

您的 GRUBntldr命令当前正在查找bootmgr第一个 HDD 的第二个分区上指定的文件,但该文件在那里不存在。 Windows 10 和 Windows 7 都可以使用相同的 Windows 启动管理器:在您的系统中,它们当前配置为执行此操作,并且启动管理器配置为显示可用操作系统的菜单。现代 Windows 操作系统的安装程序会查找现有的 Windows 启动管理器,如果存在,会将新安装的操作系统添加到现有启动管理器的菜单中,而不是安装它的另一个实例。

由于 GRUB 无法将任何操作系统选择信息传递给 Windows 启动管理器(或者说,WBM 无法接受来自任何其他启动加载程序的输入,只能直接从用户那里接受输入),因此您需要在系统上安装两个实例:一个配置为仅启动 Windows 10,另一个配置为仅启动 Windows 7。然后,您可以使用 GRUB 菜单选择要使用的启动管理器,然后选择 Windows 版本。

安装 Windows 启动管理器的第二个副本超出了 Unix&Linux.SE 的范围:如果您需要这方面的建议,您可能想询问超级用户SE反而。

相关内容