无忧启动论坛

标题: 请教UEFI模式下官方grub2.12怎么引导ISO文件? [打印本页]

作者: zx7jy    时间: 2025-4-21 22:28
标题: 请教UEFI模式下官方grub2.12怎么引导ISO文件?
请教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文件?



作者: 邪恶海盗    时间: 2025-4-21 23:55
一会GRUB2,一会GRUB4DOD_UEFI,一会又GRUB4DOS,你到底在干啥?


二○二五年四月二十一日
作者: wuju55392    时间: 2025-4-22 09:02
一会GRUB2,一会GRUB4DOD_UEFI,一会又GRUB4DOS,你到底在干啥?


二0二五年四月二十二日
作者: JOINT    时间: 2025-4-22 10:59
一会GRUB2,一会GRUB4DOD_UEFI,一会又GRUB4DOS,你到底在干啥?


二0二五年四月二十3
作者: liuzhaoyzz    时间: 2025-4-22 11:48
你所说的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命令的。

作者: guong    时间: 2025-4-22 12:17
来学习了
作者: zx7jy    时间: 2025-4-22 13:19
本帖最后由 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这种,可以借助外部引导并且支持参数的的启动程序。
作者: zx7jy    时间: 2025-4-22 13:21
liuzhaoyzz 发表于 2025-4-22 11:48
你所说的iso文件里面是PE,还是linux?
如果是PE,需要借助于wimboot,搞起来比较麻烦。建议直接用wintofl ...

魔改的grub确实挺好,可惜的是停止维护了,不是长久的解决方案
作者: liuzhaoyzz    时间: 2025-4-22 14:55
zx7jy 发表于 2025-4-22 13:21
魔改的grub确实挺好,可惜的是停止维护了,不是长久的解决方案

魔改版方案稳定了,没什么问题。你遇到问题了吗?
作者: wintoflash    时间: 2025-4-22 15:33
zx7jy 发表于 2025-4-22 13:21
魔改的grub确实挺好,可惜的是停止维护了,不是长久的解决方案

把我修改的grub封装一下不就行了吗
isoldr.zip (427.02 KB, 下载次数: 35)
用法:chainloader /isoldr.efi file=/xxx.iso
路径不能有空格/非ASCII字符。
作者: zx7jy    时间: 2025-4-22 17:50
wintoflash 发表于 2025-4-22 15:33
把我修改的grub封装一下不就行了吗

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

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

这个isoldr.efi是怎么封装的啊
作者: wintoflash    时间: 2025-4-22 19:12
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
复制代码


作者: zx7jy    时间: 2025-4-24 19:42
wintoflash 发表于 2025-4-22 19:12
执行grub-mkimage --help可以看到它支持嵌入内存盘。你可以把写好的菜单打包为 memdisk.cpio,嵌入到 EFI ...

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

不知道Grub4dos_for-UEFI 能不能支持配置文件带参数呢?
作者: wintoflash    时间: 2025-4-24 20:10
zx7jy 发表于 2025-4-24 19:42
请教一下,配置文件可以带参数,是魔改 grub 的特殊功能吗?我在官方的grub2中没有找到 getargs 这个命令 ...

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

不能。你为什么非得纠结于用grub4efi?它远不如grub2稳定。
作者: zx7jy    时间: 2025-4-24 22:19
wintoflash 发表于 2025-4-24 20:10
是。 https://a1ive.github.io/grub2_cmd_zh.html

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

非常感谢!!!

不是纠结g4d,只是想确认下是否标准功能
作者: zx7jy    时间: 2025-4-25 23:32
wintoflash 发表于 2025-4-22 19:12
执行grub-mkimage --help可以看到它支持嵌入内存盘。你可以把写好的菜单打包为 memdisk.cpio,嵌入到 EFI ...

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

我理解应该可以不内嵌任何模块,启动后通过insmod加载就可以,直接使用grub-install安装时制作的efi文件就特别小,但是不内嵌模块,总是会有各种问题
作者: wintoflash    时间: 2025-4-26 08:08
zx7jy 发表于 2025-4-25 23:32
请假一个问题,grub-mkimage制作启动镜像时,最少需要内嵌的模块,要怎么判断啊

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

要确保grub能找到并读取$prefix里面的模块,你需要:
磁盘驱动 (比如biosdisk, lvm等)
分区表支持模块 (part_msdos, part_gpt等)
文件系统支持模块 (fat, ntfs等)
从rescue模式进入normal模式必要的模块 (normal 等)
如果需要其他功能(比如搜索、基本命令 ls等),再额外加模块。
作者: 2011whp    时间: 2025-4-26 09:41
g4e.efi 可以用 外部命令cmdline接收参数:    http://wuyou.net/forum.php?mod=r ... &fromuid=413782
作者: zx7jy    时间: 2025-4-26 11:14
wintoflash 发表于 2025-4-26 08:08
要确保grub能找到并读取$prefix里面的模块,你需要:
磁盘驱动 (比如biosdisk, lvm等)
分区表支持模块  ...

非常感谢,学习一下
作者: lhl_hb    时间: 2025-4-29 22:03
不错的问题,学习




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