无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: ma__jjuunn

[求助] Grub2 引导efi分区bootmgfw.efi菜单怎么写?

[复制链接]
发表于 2019-11-18 22:32:24 | 显示全部楼层 |阅读模式
本帖最后由 ma__jjuunn 于 2019-11-18 22:34 编辑

本机已经添加了efi的Grub2启动项。本机有一个单独的esp分区,gpt格式硬盘。请教各位,想引导(hd0,gpt4)上的win10,菜单怎么写?
或者引导efi分区上的某个efi文件,例如 efi\microsoft\boot\bootmgfw.efi。自己模仿的菜单执行不了,总是出错。先谢谢了!网上的菜单示例太少了。
发表于 2019-11-18 22:44:24 | 显示全部楼层
自己模仿的菜单执行不了,总是出错

怎么模仿的 出什么错
回复

使用道具 举报

发表于 2019-11-18 22:51:19 | 显示全部楼层
没有看到你的Grub2 引导efi分区bootmgfw.efi菜单。谁都不知道问题在哪里,
回复

使用道具 举报

 楼主| 发表于 2019-11-18 23:20:40 | 显示全部楼层
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
回复

使用道具 举报

 楼主| 发表于 2019-11-18 23:23:40 | 显示全部楼层
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分区的。是不是缺什么模块?
回复

使用道具 举报

 楼主| 发表于 2019-11-18 23:29:54 | 显示全部楼层
期待大神的再次出现,先感谢!
回复

使用道具 举报

发表于 2019-11-19 00:47:10 | 显示全部楼层
我一般这样引导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命令也是错的。

点评

很棒的菜单模板!  详情 回复 发表于 2019-11-19 09:38
回复

使用道具 举报

发表于 2019-11-19 01:23:16 | 显示全部楼层
menuentry "【 启动已安装的 Microsoft windows系统 】" --class win {
      search -s -f /efi/Microsoft/Boot/bootmgfw.efi
      chainloader /efi/Microsoft/Boot/bootmgfw.efi
}
回复

使用道具 举报

 楼主| 发表于 2019-11-19 08:16:34 | 显示全部楼层
本帖最后由 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能启动,估计还是菜单错了。
回复

使用道具 举报

发表于 2019-11-19 09:38:23 | 显示全部楼层
hilsonma 发表于 2019-11-19 00:47
我一般这样引导windows:
menuentry "Windows" "/Windows/Boot/EFI/bootmgfw.efi" {
        search --no-floppy  ...

很棒的菜单模板!
回复

使用道具 举报

 楼主| 发表于 2019-11-19 22:57:17 | 显示全部楼层
按照各位老师的指导,已经成功启动。

请教

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
}

这三个菜单为什么无效呢?是定位不到分区吗?

点评

第一个,意思是启动 (hd0,gpt4)的0扇区开始的一个扇区 扇区启动属于实模式,只能是bios启动。gpt硬盘一般只能基于文件的uefi启动,不能扇区启动,所以无效。 第二个,按菜单看是没有问题的,但bootmgr是属于bios  详情 回复 发表于 2019-11-19 23:43
回复

使用道具 举报

发表于 2019-11-19 23:43:03 | 显示全部楼层
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自己查找。
回复

使用道具 举报

发表于 2019-11-19 23:59:44 | 显示全部楼层
扇区启动有它的优点,但技术性太强了。
uefi基于文件启动是一个进步。
所以建议不再惦记扇区呀盘符呀,找到启动文件,启动它,这就OK了。

就连bios平台我都做了这样的转变,使用wee(硬盘)或fbinst(u盘)做为主引导(mbr),然后寻找grldr引导,再寻找其他启动文件引导。
回复

使用道具 举报

 楼主| 发表于 2019-11-20 06:44:30 | 显示全部楼层
多谢hilsonma老师的解释,很清楚。这么晚了还没睡啊?注意身体!
回复

使用道具 举报

发表于 2019-11-20 06:59:16 来自手机 | 显示全部楼层
自己到控制台下ls看看,应该是怎么描述盘区,那种方式有可能会被再接进来的盘区改变,所以不太好用。
回复

使用道具 举报

发表于 2020-3-9 13:41:15 | 显示全部楼层
这个路径不常见啊。
/efi/Windows10/
回复

使用道具 举报

发表于 2020-5-20 20:51:46 | 显示全部楼层
搜索找到这个帖子,学到了一些efi启动的相关知识,谢谢几位大大的留言
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-29 23:07

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表