如何创建UEFI可引导的ISO?

我正在尝试自定义ubuntu-14.04.2-server-amd64.iso,但是我无法使其支持uefi引导。
首先,我尝试使用原始的iso文件:
dd if=/path/to/iso/ubuntu-14.04.2-server-amd64.iso of=/dev/sdc bs=16M

一切都很好 - 我可以在UEFI中引导闪存。
我已经将ISO内容提取到/path/to/tmp文件夹,然后尝试重新创建ISO(目前未修改),但新的ISO与UEFI不兼容。
我正在使用以下命令重新创建ISO:
mkisofs -r -V "Custom Ubuntu Install CD" -cache-inodes \
        -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat \
        -no-emul-boot -boot-load-size 4 -boot-info-table \
        -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot \
        -o /path/to/tmp.iso /path/to/tmp

然后我使用相同的dd命令将新的ISO文件放入U盘。请问如何正确地使其支持UEFI启动?

有人在另一个帖子中发表了评论。如果只有UEFI模式,那么可以使用7-zip(或任何解压工具)将ISO文件提取到格式化为FAT32的驱动器上。 无法在BIOS模式下启动。 - oldfred
是我还是-e标志不存在 - lucidbrot
似乎在Fedora上,“-e”标志代表“-eltorito-boot”。来源:Syslinux Wiki - lucidbrot
2个回答

你可以使用xorriso。我不记得为什么,但我认为这在mkisofs中是不可能的。
尝试:
xorriso -as mkisofs \
  -isohybrid-mbr /usr/lib/syslinux/mbr/isohdpfx.bin \
  -c isolinux/boot.cat \
  -b isolinux/isolinux.bin \
  -no-emul-boot \
  -boot-load-size 4 \
  -boot-info-table \
  -eltorito-alt-boot \
  -e boot/grub/efi.img \
  -no-emul-boot \
  -isohybrid-gpt-basdat \
  -o /path/to/tmp.iso \
  /path/to/tmp

这将产生一个混合的MBR/EFI iso

http://www.syslinux.org/wiki/index.php/Isohybrid


4我不得不安装isolinux软件包才能获取isohdpfx.bin文件,而它位于不同的路径下 - /usr/lib/ISOLINUX/isohdpfx.bin。谢谢! - muktupavels
是的,我在运行14.10时使用过那个。你现在使用的是15.04。 - solsTiCe
3感谢您选择飞行xorriso。 从SYSLINUX的角度来看,只要您不用SYSLINUX安装中的文件替换ISO中的ISOLINUX文件,重复使用ISO镜像的前512字节是更安全的。通过以下方式获取MBR模板: dd if=ubuntu-14.04.2-server-amd64.iso bs=512 count=1 of=my_isohdpfx.bin在运行xorriso时提及它: -isohybrid-mbr my_isohdpfx.bin - Thomas Schmitt
谢谢,这解决了一个问题。当使用mkisofs生成的ISO文件在VirtualBox上以EFI方式引导时,无法在普通的闪存USB上通过dd命令引导。使用xorriso是个妙招,解决了这个头疼的问题 :) - t-bltg

您可以使用以下方法创建一个小型(2.8 MB软盘大小)的UEFI光盘:
mkfs.msdos -C /tmp/uefi.iso 2880
sudo mount /tmp/uefi.iso /mnt
sudo cp /tmp/your_uefi_files/* /mnt/
sudo umount /mnt

然后重新启动您的系统,按下ESC或F10或F11并选择UEFI shell。要切换到UEFI文件系统,请键入:
fs0: