无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 1018|回复: 18
打印 上一主题 下一主题

请教UEFI模式下官方grub2.12怎么引导ISO文件?

[复制链接]
跳转到指定楼层
1#
发表于 6 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教UEFI模式下官方grub2.12怎么引导ISO文件?

MBR模式下,可以通过引导grub.exe的方式,实现grub2引导iso文件,如下所示:
set g4d_cfgfile="find --set-root --ignore-floppies --ignore-cd uuid "${boot_fs_uuid}";"
set g4d_cfgfile="${g4d_cfgfile}map ()"${ISO_File_FullPath}" (0xff);"
set g4d_cfgfile="${g4d_cfgfile}map --hook;"
set g4d_cfgfile="${g4d_cfgfile}root (0xff);"
set g4d_cfgfile="${g4d_cfgfile}chainloader"

linux /tools/grub4dos/grub.exe --config-file=${g4d_cfgfile}
boot

但是在UEFI模式下,如何引导iso文件呢?
不想用loopback命令,这个命令只能把文件映射为设备,但是不能直接使用chainloader引导

目前只发现,在grub2中通过chainloader /tools/grub4dos/bootx.efi可以引导进入grub4dos-for_UEFI环境,
但是不能像MBR模式一样组合grub4dos的引导菜单

请教在grub2中,有没有更好的方式引导iso文件?


2#
发表于 6 天前 | 只看该作者
一会GRUB2,一会GRUB4DOD_UEFI,一会又GRUB4DOS,你到底在干啥?


二○二五年四月二十一日
回复

使用道具 举报

3#
发表于 5 天前 | 只看该作者
一会GRUB2,一会GRUB4DOD_UEFI,一会又GRUB4DOS,你到底在干啥?


二0二五年四月二十二日
回复

使用道具 举报

4#
发表于 5 天前 | 只看该作者
一会GRUB2,一会GRUB4DOD_UEFI,一会又GRUB4DOS,你到底在干啥?


二0二五年四月二十3
回复

使用道具 举报

5#
发表于 5 天前 | 只看该作者
你所说的iso文件里面是PE,还是linux?
如果是PE,需要借助于wimboot,搞起来比较麻烦。建议直接用wintoflash魔改的grub版本即可,直接map PE.ISO启动之即可。
GRUB2 UEFI 下的磁盘仿真 - GRUB2 - 无忧启动论坛 - Powered by Discuz!
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
如果是linux,只能用loopback。
GNU grub2是不支持map命令的。

点评

魔改的grub确实挺好,可惜的是停止维护了,不是长久的解决方案  详情 回复 发表于 5 天前
目的想启动任意类型的IOS镜像。 loopback的使用场景非常有限,一般只能启动本身就是grub引导的iso镜像,而且启动命令非常麻烦,不如map好用; grub官方确实没有map命令,不知道grub4dos-for_UEFI里面有没有类  详情 回复 发表于 5 天前
回复

使用道具 举报

6#
发表于 5 天前 | 只看该作者
来学习了
回复

使用道具 举报

7#
 楼主| 发表于 5 天前 | 只看该作者
本帖最后由 zx7jy 于 2025-4-22 13:31 编辑
liuzhaoyzz 发表于 2025-4-22 11:48
你所说的iso文件里面是PE,还是linux?
如果是PE,需要借助于wimboot,搞起来比较麻烦。建议直接用wintofl ...

目的想启动任意类型的IOS镜像。

loopback的使用场景非常有限,一般只能启动本身就是grub引导的iso镜像,而且启动命令非常麻烦,不如map好用;

grub官方确实没有map命令,但是在MBR模式下,可以通过grub启动grub4dos里面的grub.exe,然后使用grub4dos的map指令启动iso文件,不知道grub4dos-for_UEFI里面有没有类似grub.exe这种,可以借助外部引导并且支持参数的的启动程序。
回复

使用道具 举报

8#
 楼主| 发表于 5 天前 | 只看该作者
liuzhaoyzz 发表于 2025-4-22 11:48
你所说的iso文件里面是PE,还是linux?
如果是PE,需要借助于wimboot,搞起来比较麻烦。建议直接用wintofl ...

魔改的grub确实挺好,可惜的是停止维护了,不是长久的解决方案

点评

把我修改的grub封装一下不就行了吗 用法:chainloader /isoldr.efi file=/xxx.iso 路径不能有空格/非ASCII字符。  详情 回复 发表于 5 天前
魔改版方案稳定了,没什么问题。你遇到问题了吗?  详情 回复 发表于 5 天前
回复

使用道具 举报

9#
发表于 5 天前 | 只看该作者
zx7jy 发表于 2025-4-22 13:21
魔改的grub确实挺好,可惜的是停止维护了,不是长久的解决方案

魔改版方案稳定了,没什么问题。你遇到问题了吗?
回复

使用道具 举报

10#
发表于 5 天前 | 只看该作者
zx7jy 发表于 2025-4-22 13:21
魔改的grub确实挺好,可惜的是停止维护了,不是长久的解决方案

把我修改的grub封装一下不就行了吗
isoldr.zip (427.02 KB, 下载次数: 21)
用法:chainloader /isoldr.efi file=/xxx.iso
路径不能有空格/非ASCII字符。

点评

这个方案不错,请教哪里有文档可以参考吗?在github没看到相关资料 这个isoldr.efi是怎么封装的啊  详情 回复 发表于 5 天前
回复

使用道具 举报

11#
 楼主| 发表于 5 天前 | 只看该作者
wintoflash 发表于 2025-4-22 15:33
把我修改的grub封装一下不就行了吗

用法:chainloader /isoldr.efi file=/xxx.iso

这个方案不错,请教哪里有文档可以参考吗?在github没看到相关资料

这个isoldr.efi是怎么封装的啊

点评

执行grub-mkimage --help可以看到它支持嵌入内存盘。你可以把写好的菜单打包为 memdisk.cpio,嵌入到 EFI 文件中。 模块列表 mods.lst 构建脚本 内置菜单 (memdisk)/grub.cfg  详情 回复 发表于 5 天前
回复

使用道具 举报

12#
发表于 5 天前 | 只看该作者
zx7jy 发表于 2025-4-22 17:50
这个方案不错,请教哪里有文档可以参考吗?在github没看到相关资料

这个isoldr.efi是怎么封装的啊

执行grub-mkimage --help可以看到它支持嵌入内存盘。你可以把写好的菜单打包为 memdisk.cpio,嵌入到 EFI 文件中。

模块列表 mods.lst
  1. all_video blocklist boot btrfs chain configfile cpio echo efiload efi_gop exfat ext2 extcmd fat fb file font f2fs getargs getkey gzio halt iso9660 jpeg ls lzopio map memdisk newc normal ntfs ntfscomp part_gpt part_msdos probe reboot search tar terminal test udf vhd xfs xzio
复制代码

构建脚本
  1. set /p modules= < mods.lst
  2. grub-mkimage.exe -d x86_64-efi -m memdisk.cpio -p (memdisk)/ -o isoldr.efi -O x86_64-efi %modules%
复制代码

内置菜单 (memdisk)/grub.cfg
  1. clear
  2. if getargs --value type t; then
  3.         set cmd_o="--first --type=$t"
  4. else
  5.         set cmd_o="--first"
  6. fi
  7. if getargs --value file f; then
  8.         if [ -f "$f" ]; then
  9.                 set cmd_f="$f"
  10.         else
  11.                 search --set=d --file "$f"
  12.                 set cmd_f="($d)$f"
  13.         fi
  14. else
  15.         echo "Missing arguments"
  16.         getkey
  17.         reboot
  18. fi
  19. map $cmd_t "$cmd_f"
  20. boot
复制代码

点评

请假一个问题,grub-mkimage制作启动镜像时,最少需要内嵌的模块,要怎么判断啊 我理解应该可以不内嵌任何模块,启动后通过insmod加载就可以,直接使用grub-install安装时制作的efi文件就特别小,但是不内嵌模块  详情 回复 发表于 前天 23:32
请教一下,配置文件可以带参数,是魔改 grub 的特殊功能吗?我在官方的grub2中没有找到 getargs 这个命令 不知道Grub4dos_for-UEFI 能不能支持配置文件带参数呢?  详情 回复 发表于 3 天前
回复

使用道具 举报

13#
 楼主| 发表于 3 天前 | 只看该作者
wintoflash 发表于 2025-4-22 19:12
执行grub-mkimage --help可以看到它支持嵌入内存盘。你可以把写好的菜单打包为 memdisk.cpio,嵌入到 EFI ...

请教一下,配置文件可以带参数,是魔改 grub 的特殊功能吗?我在官方的grub2中没有找到 getargs 这个命令

不知道Grub4dos_for-UEFI 能不能支持配置文件带参数呢?

点评

是。 https://a1ive.github.io/grub2_cmd_zh.html 不能。你为什么非得纠结于用grub4efi?它远不如grub2稳定。  详情 回复 发表于 3 天前
回复

使用道具 举报

14#
发表于 3 天前 | 只看该作者
zx7jy 发表于 2025-4-24 19:42
请教一下,配置文件可以带参数,是魔改 grub 的特殊功能吗?我在官方的grub2中没有找到 getargs 这个命令 ...

是。 https://a1ive.github.io/grub2_cmd_zh.html

不能。你为什么非得纠结于用grub4efi?它远不如grub2稳定。

点评

非常感谢!!! 不是纠结g4d,只是想确认下是否标准功能  详情 回复 发表于 3 天前
回复

使用道具 举报

15#
 楼主| 发表于 3 天前 | 只看该作者
wintoflash 发表于 2025-4-24 20:10
是。 https://a1ive.github.io/grub2_cmd_zh.html

不能。你为什么非得纠结于用grub4efi?它远不如grub ...

非常感谢!!!

不是纠结g4d,只是想确认下是否标准功能
回复

使用道具 举报

16#
 楼主| 发表于 前天 23:32 | 只看该作者
wintoflash 发表于 2025-4-22 19:12
执行grub-mkimage --help可以看到它支持嵌入内存盘。你可以把写好的菜单打包为 memdisk.cpio,嵌入到 EFI ...

请假一个问题,grub-mkimage制作启动镜像时,最少需要内嵌的模块,要怎么判断啊

我理解应该可以不内嵌任何模块,启动后通过insmod加载就可以,直接使用grub-install安装时制作的efi文件就特别小,但是不内嵌模块,总是会有各种问题

点评

要确保grub能找到并读取$prefix里面的模块,你需要: 磁盘驱动 (比如biosdisk, lvm等) 分区表支持模块 (part_msdos, part_gpt等) 文件系统支持模块 (fat, ntfs等) 从rescue模式进入normal模式必要的模块 (normal  详情 回复 发表于 昨天 08:08
回复

使用道具 举报

17#
发表于 昨天 08:08 | 只看该作者
zx7jy 发表于 2025-4-25 23:32
请假一个问题,grub-mkimage制作启动镜像时,最少需要内嵌的模块,要怎么判断啊

我理解应该可以不内嵌 ...

要确保grub能找到并读取$prefix里面的模块,你需要:
磁盘驱动 (比如biosdisk, lvm等)
分区表支持模块 (part_msdos, part_gpt等)
文件系统支持模块 (fat, ntfs等)
从rescue模式进入normal模式必要的模块 (normal 等)
如果需要其他功能(比如搜索、基本命令 ls等),再额外加模块。

点评

非常感谢,学习一下  详情 回复 发表于 昨天 11:14
回复

使用道具 举报

18#
发表于 昨天 09:41 | 只看该作者
g4e.efi 可以用 外部命令cmdline接收参数:    http://wuyou.net/forum.php?mod=r ... &fromuid=413782
回复

使用道具 举报

19#
 楼主| 发表于 昨天 11:14 | 只看该作者
wintoflash 发表于 2025-4-26 08:08
要确保grub能找到并读取$prefix里面的模块,你需要:
磁盘驱动 (比如biosdisk, lvm等)
分区表支持模块  ...

非常感谢,学习一下
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-4-27 15:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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