我有一张由 Windows 10 以 GPT 模式分区的磁盘,遗憾的是在那里创建了 Windows 10 安装。
/dev/sda1 2048 206847 204800 100M EFI System
/dev/sda2 206848 239615 32768 16M Microsoft reserved
/dev/sda3 239616 1240977398 1240737783 591.6G Microsoft basic data
/dev/sda4 1240977408 1242068991 1091584 533M Windows recovery environment
sda
├─sda1 vfat FAT32 AC47-5B68
├─sda2
├─sda3 ntfs 343642ED3642AFA2
└─sda4 ntfs E2C4D5BFC4D5965F
然后我有一张单独的光盘,Linux 安装在 MBR 中,并带有普通的 grub。
如果 Windows 是 BIOS 中的第一启动设备,则 Windows 启动正常。如果 linux 光盘是 BIOS 中的引导设备,则 Grub 可以正常引导。如何从 grub 启动 Windows?
os-prober
生成以下grub.cfg
内容grub-mkconfig
:
menuentry 'Windows 10 (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-AC47-5B68' {
insmod part_gpt
insmod fat
set root='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 AC47-5B68
else
search --no-floppy --fs-uuid --set=root AC47-5B68
fi
drivemap -s (hd0) ${root}
chainloader +1
}
然而这不起作用。机器没有启动 Windows,而是重新启动,在 BIOS POST 屏幕之后,我再次进入 grub。注意:在 grub 中,/dev/sda1 可见为 (hd1,gpt1),但它不应该影响任何内容,因为搜索应该找到它。
对于 MBR,对于 EFI/GPT 必须是: menuentry 'Windows Boot Manager' --class windows --class os $menuentry_id_option 'osprober-efi-ABCD-EFGH' { insmod part_gpt insmod fat search --no-floppy -- fs-uuid --set=root ABCD-EFGH chainloader /EFI/Microsoft/Boot/bootmgfw.efi } – Artem S. Tashkinov
尝试以下操作:
menuentry 'Windows Boot Manager' --class windows --class os $menuentry_id_option 'osprober-efi-ABCD-EFGH' {
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root AC47-5B68
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
结果屏幕显示:
Booting a command list
Invalid signature
Press any key to continue