Windows menuentry 的两种写法
Windows menuentry 的两种写法
以下两个 menuentry 是用于引导加载程序(如 GRUB)的配置文件,用于启动 Windows 操作系统的菜单项。
第1种
menuentry "Windows" {
insmod ntfs
set root=(hd0,X)
chainloader +1
}
# 或
menuentry 'Windows 10 (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-3022DA4B125A1D42' {
insmod part_msdos
insmod ntfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 3022DA4B125A1D42
else
search --no-floppy --fs-uuid --set=root 3022DA4B125A1D42
fi
parttool ${root} hidden-
drivemap -s (hd0) ${root}
chainloader +1
}
第1种第1个 menuentry:
- 名称为
"Windows"
的菜单项。 - 使用
insmod ntfs
加载 ntfs 模块,以便支持 NTFS 文件系统。 - 使用
set root=(hd0,X)
设置根目录为硬盘的第一个分区(hd0)的第 X 个分区。 - 使用
chainloader +1
加载 Windows 操作系统的引导加载程序(通常是 ntldr 或 bootmgr)。
第1种的第2个 menuentry
menuentry 'Windows 10 (on /dev/sda1)'
: 这是菜单项的名称,显示在 GRUB 菜单中。--class windows --class os
: 这是菜单项的类别,用于分类和样式化。$menuentry_id_option 'osprober-chain-3022DA4B125A1D42'
: 这是菜单项的唯一标识符,用于识别操作系统。
接下来是 menuentry 中的命令:
insmod part_msdos
: 加载 part_msdos 模块,以支持 MBR 分区表。insmod ntfs
: 加载 ntfs 模块,以支持 NTFS 文件系统。set root='hd0,msdos1'
: 将 /dev/sda1 分区设置为根分区。
然后是条件语句:
if [ x$feature_platform_search_hint = xy ]
: 检查是否支持平台搜索提示。search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 3022DA4B125A1D42
: 如果支持平台搜索提示,则搜索指定 UUID 的分区,并设置为根分区。搜索提示提供了 BIOS、EFI 和裸机(baremetal)的搜索选项。else
: 如果不支持平台搜索提示,则执行以下命令。search --no-floppy --fs-uuid --set=root 3022DA4B125A1D42
: 搜索指定 UUID 的分区,并将其设置为根分区。
其他命令包括:
parttool ${root} hidden-
: 将根分区的隐藏标志位清除,以确保分区可见。drivemap -s (hd0) ${root}
: 映射 (hd0) 到根分区,以便后续的 chainloader 命令可以正确加载。chainloader +1
: 加载 Windows 10 操作系统的引导加载程序。
第2种
menuentry 'Windows Boot Manager (on /dev/nvme0n1p1)' --class windows --class os $menuentry_id_option 'osprober-efi-3876-F8BB' {
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root 3876-F8BB
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
第2种 menuentry:
- 名称为
"Windows Boot Manager (on /dev/nvme0n1p1)"
的菜单项。 - 通过
insmod part_gpt
加载 GPT 分区表模块。 - 通过
insmod fat
加载 fat 模块,以便支持 FAT 文件系统。 - 使用
search --no-floppy --fs-uuid --set=root 3876-F8B
B 在文件系统中搜索具有 UUID “3876-F8BB” 的分区,并将其设置为根分区。search
: 这是 GRUB 的命令,用于在文件系统中搜索分区。--no-floppy
: 这是一个选项,告诉 GRUB 不要搜索软盘驱动器。--fs-uuid
: 这是一个选项,指示 GRUB 使用分区的 UUID 进行搜索。--set=root
: 这是一个选项,指示 GRUB 将搜索到的分区设置为根分区。- 在这个
search
命令中,3876-F8BB 是一个示例分区的 UUID。UUID(Universally Unique Identifier)是一个唯一标识符,用于在文件系统中标识不同的分区。你需要将 3876-F8BB 替换为你要搜索的具体分区的 UUID
- 使用
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
加载 Windows Boot Manager 的引导程序(bootmgfw.efi)。
如果第2种方式启动不了,尝试直接设置root分区,并指定引导程序的路径,如下:
menuentry 'Windows Boot Manager (on /dev/nvme0n1p1)' {
insmod part_gpt
insmod fat
set root=(hd0,1)
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}