无忧启动论坛

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

[分享] UEFI/BIOS双启ISO制作脚本(mkisofs)

    [复制链接]
跳转到指定楼层
1#
发表于 2020-4-1 11:49:30 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hilsonma 于 2021-4-20 01:50 编辑
  1. @echo off
  2. set bios=-no-emul-boot -boot-load-size 4 -b grldr
  3. set uefi=-eltorito-alt-boot -no-emul-boot -eltorito-platform efi -b efi.img
  4. set iso=-o z.iso
  5. set dir=%1
  6. if %1a==a set dir=iso1
  7. set iso9660x=-U -max-iso9660-filenames -D
  8. set RR=-R
  9. set joliet=-J -joliet-long -hide-joliet boot.catalog
  10. pushd %~dp0
  11. bin\mkisofs %iso9660x% %RR% %joliet% %bios% %uefi% %iso% %dir%
复制代码


支持拖放,将要打包成iso的内容放到独立的文件夹,将文件夹拖放到脚本上,即会将文件夹打包成iso
没有拖放就默认将iso1文件夹打包成iso,iso1是pe打包模板,将wim镜像改名boot.wim替换到iso1\boot运行脚本即可打包
默认打包生成的文件名为z.iso

要打包的文件夹里必须有grldr和efi.img这两个启动文件

grldr的内置菜单可以使用bootice修改,可以链接其他引导。
不建议跳过grldr直接使用其他引导,因为mkisofs+grldr的兼容性更好,成功率更高。

efi.img的内容可以使用WinImage修改,将其他efi文件改名为bootx64.efi来替换,也可添加32位引导文件bootia32.efi,efi.img的内容越简单越好。

mkisofs.7z (2.54 MB, 下载次数: 1489)

WinImage_Portable.7z (1.69 MB, 下载次数: 1078)

点评

辛苦了  发表于 2024-4-17 17:49

评分

参与人数 8无忧币 +50 收起 理由
yyz2191958 + 2 赞一个!
cuicongyuan + 5 赞一个!
smartcowboy + 3 很给力!
wuxin9712 + 5
shan + 15 很给力!
879792799 + 5 很给力!
wbzzzzj + 5 很给力!
20090101 + 10 很给力!

查看全部评分

2#
 楼主| 发表于 2020-4-7 00:00:14 | 显示全部楼层
本帖最后由 hilsonma 于 2020-4-10 00:05 编辑
longpanda 发表于 2020-4-6 20:40
给楼主反馈一个问题哈。
这个 mkisofs的版本做出来的 ISO在UEFI下虽然能启动,但是并不是100%符 ...

已更新1楼脚本代码,但附件一直不能更新,不知论坛什么问题,明天再试。(附件已更新)

你可以按照1楼的代码修改之前的版本,就是添加了一个参数 -eltorito-platform efi
请添加此参数后再试生成的iso是否符合规范。

我不懂使用你的查看方式,试过 010-editor 也看不到你说的信息。

点评

修改过之后就OK了。多谢楼主! 用010Editor, 直接Ctrl+F 搜索,选择 Hex Bytes类型, 搜索 91EF010000000000 这个二进制串, 能搜到的(唯一一处)就是符合的。 [attachimg]415553[/attachimg]  详情 回复 发表于 2020-4-7 09:41
大佬厉害!我用你更新的代码 问题完美解决!期待你更多更好的作品!你这个脚本打包出来的ISO 体积很小!非常好!!!!! http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=419840&pid=4027576&fr  详情 回复 发表于 2020-4-7 02:26
回复

使用道具 举报

3#
 楼主| 发表于 2020-4-7 00:05:22 | 显示全部楼层

我之前也是使用oscdimg,但后来发现bios启动,mkisofs+grldr比oscdimg更容易成功,而且mkisofs打包比oscdimg快得多。

点评

貌似 oscdimg+bootmgr 的启动成功率也是蛮高的  详情 回复 发表于 2020-4-7 10:23
回复

使用道具 举报

4#
 楼主| 发表于 2020-4-7 13:24:58 | 显示全部楼层
longpanda 发表于 2020-4-7 09:41
修改过之后就OK了。多谢楼主! 那个查看的方式是我自己写的小程序解析的。
可以用010Editor, 直接Ctrl+F ...

谢谢。
找到了。010editor 和 winhex 都找得到,查找十六进制数值 91EF010000000000
不同的iso偏移地址可能会不一样
回复

使用道具 举报

5#
 楼主| 发表于 2020-4-8 12:01:33 | 显示全部楼层
窄口牛 发表于 2020-4-8 09:53
我还是觉得oscdimg的好
主要这个参数太复杂
oscdimg打包g4d你要用那个引导的bin打包。给你个单文件的mkio ...

谢谢。
回复

使用道具 举报

6#
 楼主| 发表于 2020-12-1 16:47:35 | 显示全部楼层
vuthang12345 发表于 2020-12-1 14:46
Can you change the path?

@echo off

When you build an iso from a directory with mkisofs, the boot file(s) should be in the root of that directory.
Or you should get an error: file could not be found in the target tree.
So, let it be -b grldr and -b efi.img,do not make changes.
回复

使用道具 举报

7#
 楼主| 发表于 2020-12-30 15:41:41 | 显示全部楼层
本帖最后由 hilsonma 于 2020-12-30 15:57 编辑
likehell 发表于 2020-12-30 15:27
关于可以启动的iso文件的引导信息,除了使用ultraiso,是否还有其他方法获取?提取的iso引导文件是*.bif文 ...

你把win7pe.wim提取出来,改名为boot.wim,替换到我的打包模板中,运行一次打包脚本,就可以生成z.iso
你可以将生成的z.iso改名成新的 win7pe.iso

注:1楼的附件mkisofs.7z是iso打包脚本带模板,里面的iso1文件夹就是打包模板,已经包含引导信息,只要将wim文件改名为boot.wim替换到 iso1/boot/ 里后,执行一次mkiso.cmd就会生成z.iso

你这个win7pe.iso是不支持uefi启动的,如果要支持uefi启动,就要将win7pe.wim解包到一个文件夹,添加uefi支持,再重新打包成新的win7pe.wim
如果需要iso,就将新的win7pe.wim改名为boot.wim替换到iso打包模板中,重新生成新的 win7pe.iso
这样,新的win7pe.wim 和 win7pe.iso 就支持bios/uefi 双启了。

其实我一般是使用wim文件的,很少使用iso文件。
你既然对iso文件有兴趣,就用以上方法尝试亲自制作一个iso文件,制作成功后,如果有兴趣,可以尝试直接使用wim文件。

点评

好的。  详情 回复 发表于 2020-12-31 10:52
回复

使用道具 举报

8#
 楼主| 发表于 2020-12-31 11:33:54 | 显示全部楼层
本帖最后由 hilsonma 于 2020-12-31 12:00 编辑
likehell 发表于 2020-12-31 10:52
好的。,一下解决了很多的问题。直接使用wim? 是指做成u盘挂载么?

你要pe是做什么用的呢?应该是做维护用的吧。
维护电脑一般要准备一个启动U盘,以备电脑硬盘无法启动时使用。
我就把这个pe的wim文件放到U盘上,做成启动U盘,使用U盘开机就进入这个pe系统。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=419354

电脑可以开机进入操作系统的话,我就会放这个pe的wim文件到硬盘上,并修改启动菜单,设定默认开机进常规系统,按键选择菜单项进入这个pe
这样,经过自己维护的电脑,只要硬盘不坏,进不了常规系统也能进pe进行维护,不需要使用启动u盘。
启动U盘是备用的,遇到无法进系统(常规系统和pe系统)的电脑要进行维护时使用。

我就是这样直接使用wim,不用打包成iso.

按我的理解,iso文件原先是用来刻录到光盘上的。后来也用来量产启动U盘。再后来就有一些启动U盘制作工具也使用iso文件来制作启动U盘。这些都是要将U盘初始化的,会丢失U盘数据。

我现在制作启动U盘是无损制作的,只是添加引导代码,让U盘能启动,能引导wim文件就行了。
回复

使用道具 举报

9#
 楼主| 发表于 2021-3-2 15:06:59 | 显示全部楼层
本帖最后由 hilsonma 于 2021-3-2 15:08 编辑
9001 发表于 2020-5-8 00:11
由grldr转bootmgr感觉有点多余,能否提取bios下引导bootmgr的引导代码出来替换grldr,这样做应该不难吧

你可以尝试将 set bios=-no-emul-boot -boot-load-size 4 -b grldr 改成
set bios=-no-emul-boot -b bootmgr_cd.bin
并将 bootmgr_cd.bin 放到模板文件夹中 (将grldr删去,改用bootmgr_cd.bin)

不过我没有试过,不知能不能成功,而且由于bootmgr的光盘引导程序(bootmgr_cd.bin)是4K,不知能不能使用 -boot-load-size 4 参数,不使用此参数的话可能会有一些老电脑无法启动此光盘镜像。

如果喜欢直接使用bootmgr,建议使用另一个iso制作工具oscdimg.
回复

使用道具 举报

10#
 楼主| 发表于 2021-3-11 01:42:07 | 显示全部楼层
xuming98 发表于 2021-3-10 18:45
请教大师,有些ISO支持双启,但用siso模块启动卡1,命令如下

command siso ISO="/BOOT/10PE.ISO  "    F ...

这个问题我也不清楚。我对iso也不是很了解,我一般是直接使用wim文件的。

如果怀疑iso不够标准,可以尝试用本贴的方法重新制作一次。

或者你尝试改变一下siso的命令参数,看是不是参数的原因。
回复

使用道具 举报

11#
 楼主| 发表于 2021-4-18 10:59:53 | 显示全部楼层
kuer 发表于 2021-4-18 07:42
从去年到现在一直用你这个脚本打包iso,体积小,启动顺利,很不错!但昨天用19043.21354镜像制作PE,打包wi ...

你可以尝试将新的bootmgr替换到模板中,然后再打包,看看是否能正常启动。
或者将你的pe发一个文叔叔链接给我试试。

点评

替换新的bootmgr 问题解决了!谢谢!  详情 回复 发表于 2021-4-18 20:05
回复

使用道具 举报

12#
 楼主| 发表于 2021-6-28 11:32:05 | 显示全部楼层
2011wolfsina 发表于 2021-6-27 09:27
制作成功,但是efi里面bootx64.efi大于2.8M如何处理?有没有efi启动直接指向ISO内部/efi/boot/bootx64.efi ...

据我所知是没有直接指向iso内部的bootx64.efi,都是引导镜像内的bootx64.efi
如果bootx64.efi大于2.88M可以使用winimage制作非标镜像,不限大小。但还是建议尽量使用小些的,担心启动兼容问题,虽然我也没有测试过。我只试过大于2.88M的非标镜像,在我的电脑可以启动。
回复

使用道具 举报

13#
 楼主| 发表于 2021-7-29 21:50:33 | 显示全部楼层
AndyChen 发表于 2021-7-29 17:30
复制boot.wim到指定文件夹,执行脚本,运行启动出错,如图。

1.检查这个boot.wim本身的文件结构,里面是否有 \Windows\System32\boot\winload.efi
如果没有的话需要添加这个文件才能支持UEFI启动

2.如果有这个文件的话检查一下这个boot.wim是不是比较新版的,如果是比较新的pe,可能我的制作模板里的bootmgfw.efi 版本太旧不匹配,请用新版的bootmgfw.efi替换。
回复

使用道具 举报

14#
 楼主| 发表于 2022-12-11 21:07:24 | 显示全部楼层
春梦无痕 发表于 2022-12-9 21:03
求教个问题,怎么去掉那个加载的进度条

加载的进度条是winpe本身的,也就是bootmgfw.efi/bootmgr的,我也不懂怎么去掉。
回复

使用道具 举报

15#
 楼主| 发表于 2024-4-24 02:50:29 | 显示全部楼层
本帖最后由 hilsonma 于 2024-4-24 03:00 编辑
liuzhaoyzz 发表于 2024-4-23 17:51
请问下-b efi.img,这个参数,必须接img镜像吗?怎么我试了-b "iso1\EFI\boot\bootx64.efi"不行啊?

是的。-b efi.img 后面的efi.img 不能换成其他格式的文件,必须是img镜像(或ima镜像),这个镜像里放置用于uefi启动的efi文件。

iso内作uefi引导的efi文件也必须放在这个镜像里,而不是直接放在iso里。

使用oscdimg制作的iso里,efisys.bin其实就是这样的镜像文件,只不过文件名不同而已,打开里面内容是一样的,同样是 \efi\boot\bootx64.efi
当然,oscdimg制作的iso里,bootx64.efi一般是ms的bootmgfw.efi
而使用mkisofs制作的iso里,bootx64.efi不一定是bootmgfw.efi 。

点评

感谢回复,明白了。 有个问题啊,efi.img里面已经有了EFI\boot\bootx64.efi,那打包的时候,iso1\EFI\boot\bootx64.efi还要再放一个是吗?我试了,不放一个好像无法启动?  详情 回复 发表于 2024-4-24 17:33
回复

使用道具 举报

16#
 楼主| 发表于 2024-4-24 23:49:49 | 显示全部楼层
本帖最后由 hilsonma 于 2024-4-25 00:09 编辑
liuzhaoyzz 发表于 2024-4-24 17:33
感谢回复,明白了。

有个问题啊,efi.img里面已经有了EFI\boot\bootx64.efi,那打包的时候,iso1\EFI\ ...

iso1\EFI\boot\\bootx64.efi 不需要,只需要efi.img,里面有就可以了。
你试了不放在iso1\EFI\boot里好象无法启动,这个应该是有其他问题,不会是这个文件的原因。

UEFI默认引导文件是EFI\boot\bootx64.efi,但iso的引导机制不一样,它不是fat32,UEFI是不认放在iso里的\efi\boot\bootx64.efi的。你可以搜索"可引导光盘"来了解可引导光盘规范,iso的引导是通过镜像文件实现的,传统引导光盘是使用一个2048字节的镜像,uefi引导光盘使用的是更大的镜像,这个镜像里是符合uefi规范的格式。只要注意观察生成的可启动iso,都会发现这样的镜像文件(在[BOOT]文件夹)。

只需要将efi文件放在镜像文件内\efi\boot\bootx64.efi 就可以了,配置文件(菜单文件)直接放在iso里,比如直接在iso里放 \efi\microsoft\boot\bcd,不需要bcd放在镜像文件里。

注:其实传统引导光盘的2048字节的镜像并不真的是镜像,而是相当于一个光盘扇区,里面是引导代码,指示着下一阶段的引导。
回复

使用道具 举报

17#
 楼主| 发表于 7 天前 | 显示全部楼层
Su_jacc 发表于 2024-4-27 19:53
直接找壳替换可以启动吗

看用什么软件替换。
软件中有处理启动代码的选项的。
需要设置好启动选项。
因为生成的ISO再用不同软件处理很容易破坏启动代码的,需要重新处理启动代码。

比如较多人使用的ultraiso,如果本来是这个软件生成的iso,再用它来修改,一般是不会破坏启动代码的。
但如果是其他软件生成的iso,再用这个软件来修改,通常都会破坏启动代码。

从引导扇区到启动条目,再到启动项,再到启动文件(或镜像),这中间的链接关系,使用不同的软件来修改iso内容的话,是很容易受到破坏的。需要重建正确的链接,这样才能启动。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-4 18:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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