无忧启动论坛

标题: 对于一个较大的efi文件,该怎么让它可从光盘启动? [打印本页]

作者: hzyry2046    时间: 6 天前
标题: 对于一个较大的efi文件,该怎么让它可从光盘启动?
如题,我在把pseudo大佬之前的含grub2fm的efi启动模板和自制的winpe打包进iso(给虚拟机用)。
但是在处理引导时遇到问题。
ovmf对无引导区(引导区是一个1.44m或2.88m的fat32格式的raw镜像)的iso兼容性很差,所以要把efi放入引导区。
但是,带有grub2fm的efi,大小为7.73m,无法装进。没有grub2fm的,大小为2.85m(ultraiso仅能放入2663KB文件)
求大佬支招。
作者: seeimpact153    时间: 6 天前
虚拟机直接efi启动
作者: wintoflash    时间: 6 天前
ovmf对无引导区(引导区是一个1.44m或2.88m的fat32格式的raw镜像)的iso兼容性很差,所以要把efi放入引导区。

无引导区ISO是什么意思?根据UEFI规范,ISO必须要有FAT镜像才能启动的,但是镜像大小是可以任意设置的。


grubfm_multiarch.iso 就可以正常启动啊。它的efi.img是16MB。
  1. dd if=/dev/zero of=build/efi.img bs=1M count=16
  2. mkfs.vfat build/efi.img
  3. mmd -i build/efi.img ::EFI
  4. mmd -i build/efi.img ::EFI/BOOT
  5. mcopy -i build/efi.img grubfmx64.efi ::EFI/BOOT/BOOTX64.EFI
  6. mcopy -i build/efi.img grubfmia32.efi ::EFI/BOOT/BOOTIA32.EFI
  7. xorriso -as mkisofs -l -R -hide-joliet boot.catalog -b fmldr -no-emul-boot -allow-lowercase -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e efi.img -no-emul-boot -o grubfm_multiarch.iso build
复制代码

windows下可以用mkisofs替换命令中的xorriso -as mkisofs
作者: guong    时间: 5 天前
看看了
作者: hzyry2046    时间: 5 天前
本帖最后由 hzyry2046 于 2025-7-11 12:17 编辑
wintoflash 发表于 2025-7-10 20:18
无引导区ISO是什么意思?根据UEFI规范,ISO必须要有FAT镜像才能启动的,但是镜像大小是可以任意设置的。
...

我那里用ultraiso生成的软盘镜像超过2.88m就报错(3.64,5.76,20.8)硬盘镜像未测试这是报错:(参数由江南一根葱的包转圈iso工具修改)
命令:mkisofs.exe -udf -d -v -V MiniPE -no-emul-boot -boot-load-size 4 -b boot/grldr -eltorito-platform efi -b boot/EFISECTOR.bin -o MiniPE.iso -R -U iso
efisector.bin为ultraiso生成的20.8m 软盘镜像。
Warning: creating filesystem that does not conform to ISO-9660.
3.02a09 (i686-pc-cygwin)
Scanning iso
Scanning iso/boot
Scanning iso/boot/a64-x86
Scanning iso/boot/a64-x86/EFI
Scanning iso/boot/a64-x86/EFI/BOOT
Scanning iso/boot/Fonts
Scanning iso/boot/x64
Scanning iso/boot/zh-CN
Scanning iso/EFI
Scanning iso/EFI/BOOT
Scanning iso/EFI/MICROSOFT
Scanning iso/EFI/MICROSOFT/BOOT
Scanning iso/WXPE
Writing:   Initial Padblock                        Start Block 0
Done with: Initial Padblock                        Block(s)    16
Writing:   Primary Volume Descriptor               Start Block 16
Done with: Primary Volume Descriptor               Block(s)    1
Writing:   Eltorito Volume Descriptor              Start Block 17
Size of boot image is 4 sectors -> No emulation
Size of boot image is 40664 sectors -> mkisofs: Error - boot image 'iso/boot/EFISECTOR.bin' has not an allowable size.
说支持不好,是因为zenemu的efi64固件可以访问非fat部分,不知道别的固件有无此支持。
作者: 窄口牛    时间: 5 天前
那个img必须有dos引导才行,只是打包到img不行。
作者: 窄口牛    时间: 5 天前
另外今天有人挖出来的,讨论的img和ima的区别也不对,ima是分区镜像,img是磁盘镜像;并非单纯后缀名修改那么简单。
作者: hzyry2046    时间: 5 天前
hzyry2046 发表于 2025-7-11 12:07
我那里用ultraiso生成的软盘镜像超过2.88m就报错(3.64,5.76,20.8)硬盘镜像未测试这是报错:(参数由江 ...

解决了,之前的mkisofs可能版本太旧,用ubuntu livecd的mkisofs可以
作者: hzyry2046    时间: 5 天前
窄口牛 发表于 2025-7-11 12:27
那个img必须有dos引导才行,只是打包到img不行。

这个没有遇到
作者: wintoflash    时间: 5 天前
hzyry2046 发表于 2025-7-11 12:07
我那里用ultraiso生成的软盘镜像超过2.88m就报错(3.64,5.76,20.8)硬盘镜像未测试这是报错:(参数由江 ...

ultraiso生成的软盘镜像是用于bios启动的,随便弄一个大小是启动不了的。
一般都是用dd直接创建空文件,然后不创建分区表直接格式化,其实就是不带分区表的硬盘镜像。
另外,其实带分区表的硬盘镜像也可以嵌入ISO里面uefi启动的




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