无忧启动论坛

标题: Grub2 引导efi分区bootmgfw.efi菜单怎么写? [打印本页]

作者: ma__jjuunn    时间: 2019-11-18 22:32
标题: 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。自己模仿的菜单执行不了,总是出错。先谢谢了!网上的菜单示例太少了。
作者: wintoflash    时间: 2019-11-18 22:44
自己模仿的菜单执行不了,总是出错

怎么模仿的 出什么错
作者: 2011cwj6958    时间: 2019-11-18 22:51
没有看到你的Grub2 引导efi分区bootmgfw.efi菜单。谁都不知道问题在哪里,
作者: ma__jjuunn    时间: 2019-11-18 23:20
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
}

这两个菜单都执行不了!

捕获.PNG (199.29 KB, 下载次数: 143)

捕获.PNG

作者: ma__jjuunn    时间: 2019-11-18 23:23
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,gpt6  34ec19bb-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分区的。是不是缺什么模块?
作者: ma__jjuunn    时间: 2019-11-18 23:29
期待大神的再次出现,先感谢!
作者: hilsonma    时间: 2019-11-19 00:47
我一般这样引导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命令也是错的。
作者: 2011cwj6958    时间: 2019-11-19 01:23
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:16
本帖最后由 ma__jjuunn 于 2019-11-19 08:20 编辑

多谢各位的耐心解释,有空我再试一下,正好对$2这个参数搞不懂呢,谢谢7楼的兄弟解释这么清楚。windows10这个目录是我自己把微软microsoft的目录改名的,原来的microsoft目录的bootmgfw.efi我用rEFInd替换了,开机windows boot manager默认就变成rEFInd引导了,发现这个rEFInd自动探测功能很强大,本机的win10、mint、macos都能识别出来,而且能启动。
后面有时间用wintoflash老大的最新版自己定制一个文件试一下。像我这样一直潜水的菜鸟水平不高,平时有空就喜欢折腾一下,遇到自己解决不了的问题能得到大家的帮助真的太好了,。按理说不应该是gpt识别不了,因为命令行下能看到分区,而且mint能启动,估计还是菜单错了。
作者: liuzhaoyzz    时间: 2019-11-19 09:38
hilsonma 发表于 2019-11-19 00:47
我一般这样引导windows:
menuentry "Windows" "/Windows/Boot/EFI/bootmgfw.efi" {
        search --no-floppy  ...

很棒的菜单模板!
作者: ma__jjuunn    时间: 2019-11-19 22:57
按照各位老师的指导,已经成功启动。

请教

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
}

这三个菜单为什么无效呢?是定位不到分区吗?
作者: hilsonma    时间: 2019-11-19 23:43
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自己查找。
作者: hilsonma    时间: 2019-11-19 23:59
扇区启动有它的优点,但技术性太强了。
uefi基于文件启动是一个进步。
所以建议不再惦记扇区呀盘符呀,找到启动文件,启动它,这就OK了。

就连bios平台我都做了这样的转变,使用wee(硬盘)或fbinst(u盘)做为主引导(mbr),然后寻找grldr引导,再寻找其他启动文件引导。
作者: ma__jjuunn    时间: 2019-11-20 06:44
多谢hilsonma老师的解释,很清楚。这么晚了还没睡啊?注意身体!
作者: 窄口牛    时间: 2019-11-20 06:59
自己到控制台下ls看看,应该是怎么描述盘区,那种方式有可能会被再接进来的盘区改变,所以不太好用。
作者: linyuuki    时间: 2020-3-9 13:41
这个路径不常见啊。
/efi/Windows10/
作者: aliaaaa    时间: 2020-5-20 20:51
搜索找到这个帖子,学到了一些efi启动的相关知识,谢谢几位大大的留言




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3