Grub2 引导efi分区bootmgfw.efi菜单怎么写?
本帖最后由 ma__jjuunn 于 2019-11-18 22:34 编辑本机已经添加了efi的Grub2启动项。本机有一个单独的esp分区,gpt格式硬盘。请教各位,想引导(hd0,gpt4)上的win10,菜单怎么写?
或者引导efi分区上的某个efi文件,例如 efi\microsoft\boot\bootmgfw.efi。自己模仿的菜单执行不了,总是出错。先谢谢了!网上的菜单示例太少了。 自己模仿的菜单执行不了,总是出错
怎么模仿的 出什么错 没有看到你的Grub2 引导efi分区bootmgfw.efi菜单。谁都不知道问题在哪里, menuentry "Windows" --class os {
insmod part_gpt
insmod ext2
(hd0,gpt1)/efi/Windows10/boot/bootmgfw.efi
search --no-floppy --set --file $2
chainloader $2
}
menuentry 'Windows10 Boot' {
insmod part_gpt
insmod ext2
set root='hd0,gpt1'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
boot
}
这两个菜单都执行不了! menuentry "Linux Mint" --class linuxmint --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-34ec19bb-4b1f-4e22-b252-5238c010cb45' {
insmod part_gpt
insmod ext2
set root='hd0,gpt6'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt634ec19bb-4b1f-4e22-b252-5238c010cb45
else
search --no-floppy --fs-uuid --set=root 34ec19bb-4b1f-4e22-b252-5238c010cb45
fi
linux /boot/vmlinuz-4.15.0-38-generic root=UUID=34ec19bb-4b1f-4e22-b252-5238c010cb45 ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.15.0-38-generic
}
我的电脑上还装了一个 Linux Mint,这个菜单是ubuntu(以前装的)系统生成的菜单,我直接copy过来的,可以执行,能启动到Mint系统。说明Grub2是可以找到gpt分区的。是不是缺什么模块? 期待大神的再次出现{:1_193:},先感谢! 我一般这样引导windows:
menuentry "Windows" "/Windows/Boot/EFI/bootmgfw.efi" {
search --no-floppy --set --file $2
chainloader $2
}
如果要引导efi区的efi文件:
menuentry "Windows" "/efi/microsoft/boot/bootmgfw.efi" {
search --no-floppy --set --file $2
chainloader $2
}
以上变量$2 是指menuentry 后面的第2个参数,使用这个变量可以避免重复输入路径。你要确定放在这个位置的路径是真实存在。一般是不存在/efi/Windows10/boot/bootmgfw.efi这样的,除非你自己专门建立。
如果你的grub2启动文件(efi文件)没有包含part_gpt模块而要识别gpt硬盘,就要加上这个模块,如
menuentry "Windows" "/Windows/Boot/EFI/bootmgfw.efi" {
insmod part_gpt
search --no-floppy --set --file $2
chainloader $2
}
这时,grub2安装文件夹中要有part_gpt.mod这个模块文件。
windows是不会在ext2分区的,所以引导windows不需要insmod ext2
你的菜单中有这句(hd0,gpt1)/efi/Windows10/boot/bootmgfw.efi 都没有包含grub2命令也是错的。 menuentry "【 启动已安装的 Microsoft windows系统 】" --class win {
search -s -f /efi/Microsoft/Boot/bootmgfw.efi
chainloader /efi/Microsoft/Boot/bootmgfw.efi
} 本帖最后由 ma__jjuunn 于 2019-11-19 08:20 编辑
多谢各位的耐心解释,有空我再试一下,正好对$2这个参数搞不懂呢,谢谢7楼的兄弟解释这么清楚。windows10这个目录是我自己把微软microsoft的目录改名的,原来的microsoft目录的bootmgfw.efi我用rEFInd替换了,开机windows boot manager默认就变成rEFInd引导了,发现这个rEFInd自动探测功能很强大,本机的win10、mint、macos都能识别出来,而且能启动。
后面有时间用wintoflash老大的最新版自己定制一个文件试一下。像我这样一直潜水的菜鸟水平不高,平时有空就喜欢折腾一下,遇到自己解决不了的问题能得到大家的帮助真的太好了,{:1_195:}。按理说不应该是gpt识别不了,因为命令行下能看到分区,而且mint能启动,估计还是菜单错了。 hilsonma 发表于 2019-11-19 00:47
我一般这样引导windows:
menuentry "Windows" "/Windows/Boot/EFI/bootmgfw.efi" {
search --no-floppy...
很棒的菜单模板! 按照各位老师的指导,已经成功启动。
请教
menuentry "test" --class windows {
set root='hd0,gpt4'
chainloader +1
}
menuentry "test2" --class windows {
search -s -f /bootmgr
chainloader /bootmgr
}
menuentry "test3" --class windows {
set root='hd0,gpt1'
chainloader /Efi/Windows10/boot/bootmgfw.efi
}
这三个菜单为什么无效呢?是定位不到分区吗? ma__jjuunn 发表于 2019-11-19 22:57
按照各位老师的指导,已经成功启动。
请教
第一个,意思是启动 (hd0,gpt4)的0扇区开始的一个扇区
扇区启动属于实模式,只能是bios启动。gpt硬盘一般只能基于文件的uefi启动,不能扇区启动,所以无效。
第二个,按菜单看是没有问题的,但bootmgr是属于bios平台的,如果是在uefi平台下当然无效。
第三个,意思是启动 (hd0,gpt1)/Efi/Windows10/boot/bootmgfw.efi
看着也没有问题,但要确定存在 (hd0,gpt1)/Efi/Windows10/boot/bootmgfw.efi
一般我不会自己指定设备,让grub2自己寻找,这样比较稳妥,如
search -s -f /Efi/Windows10/boot/bootmgfw.efi
chainloader /Efi/Windows10/boot/bootmgfw.efi
这样grub2会将找到指定文件的第一个设备设为root,然后启动指定文件。
当使用u盘启动时,系统会将这个u盘当做hd0,其他u盘hd1,hd2等等,然后才是硬盘
当使用硬盘启动时,系统会将这个硬盘当做hd0,其他硬盘hd1,hd2等等,然后才是u盘
还有可能固态硬盘的情况。
还有mbr硬盘的主分区和逻辑分区,一不小心就会搞错分区编号。
所以我一般不指定设备,让grub2自己查找。 扇区启动有它的优点,但技术性太强了。
uefi基于文件启动是一个进步。
所以建议不再惦记扇区呀盘符呀,找到启动文件,启动它,这就OK了。
就连bios平台我都做了这样的转变,使用wee(硬盘)或fbinst(u盘)做为主引导(mbr),然后寻找grldr引导,再寻找其他启动文件引导。 多谢hilsonma老师的解释,很清楚。这么晚了还没睡啊?注意身体! 自己到控制台下ls看看,应该是怎么描述盘区,那种方式有可能会被再接进来的盘区改变,所以不太好用。 这个路径不常见啊。
/efi/Windows10/ 搜索找到这个帖子,学到了一些efi启动的相关知识,谢谢几位大大的留言
页:
[1]