我在 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反而。