我在 MBR 分区磁盘上的三个不同分区上安装了三重启动系统(Windows 10 Home 21H1/Windows 7 Pro/Debian 11),在启动时我可以毫无问题地启动每个系统。但是在 GRUB 菜单中,所有 Windows 系统都可以从一个名为“Windows 10”的条目访问(由于第一次安装),它运行Windows 引导管理器,让我选择我想要引导的 Windows 系统。因此显示 2 个菜单用于引导每个 Windows 系统。这是不实用的。
我问自己是否有一种解决方案可以直接从 GRUB 菜单访问 WBM 的 Windows 条目,而无需通过 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 的帮助下解决了我的问题,在那里我详细说明了我的实现。
您的 GRUB
ntldr
命令当前正在寻找一个名为bootmgr
第一个 HDD 的第二个分区的文件,但该文件不存在。Windows 10 和 Windows 7 都可以使用相同的 Windows 启动管理器:在您的系统中,它们当前配置为执行此操作,并且启动管理器配置为显示可用操作系统的菜单。现代 Windows 操作系统的安装程序会寻找现有的 Windows 启动管理器,如果存在,会将新安装的操作系统添加到现有启动管理器的菜单中,而不是安装它的另一个实例。由于 GRUB 无法将任何操作系统选择信息传递给 Windows 引导管理器(或者更确切地说,WBM 无法接受来自任何其他引导加载程序的输入,只能直接来自用户),您需要在系统上有两个实例:一个配置为仅启动 Windows 10,另一个配置为仅启动 Windows 7。然后您可以使用 GRUB 菜单选择要使用的引导管理器,然后选择 Windows 版本。
安装 Windows 启动管理器的第二个副本将超出此 Unix&Linux.SE 的范围:如果您需要这方面的建议,您可能想在SuperUser.SE上询问。