如何创建 UEFI/BIOS 可启动 ISO

如何创建 UEFI/BIOS 可启动 ISO

我注意到 Ubuntu ISO 文件在具有 BIOS 和 UEFI 的系统上均可启动。我已经从头开始重新制作了 Ubuntu,我希望我的 ISO 文件在两种情况下均可启动。

我对 Ubuntu 的重新制作是先将 debootstrap 安装到 chroot jail 中,然后逐渐添加文件,直到我拥有所有想要的程序。但是,生成的 ISO 文件只能在具有 BIOS 的系统上启动。

我相信我需要 mkisofs 的一些不同魔法,但是 EFI/BOOT 中的文件怎么办?这些文件的来源是什么?我还需要什么吗?

谢谢!

安迪

答案1

您可以使用以下命令生成适合在 UEFI 上启动的 ESP(EFI 系统分区)映像:

#! /bin/sh

BOOT_IMG_DATA=$(mktemp -d)
BOOT_IMG=efi.img

mkdir -p $(dirname $BOOT_IMG)

truncate -s 4M $BOOT_IMG
mkfs.vfat $BOOT_IMG
mkdir -p $BOOT_IMG_DATA/efi/boot

grub-mkimage \
    -C xz \
    -O x86_64-efi \
    -p /boot/grub \
    -o $BOOT_IMG_DATA/efi/boot/bootx64.efi \
    boot linux search normal configfile \
    part_gpt btrfs fat iso9660 loopback \
    test keystatus gfxmenu regexp probe \
    efi_gop efi_uga all_video gfxterm font \
    echo read ls cat png jpeg halt reboot

mcopy -i $BOOT_IMG -s $BOOT_IMG_DATA/efi ::

这将生成一个 FAT 格式的文件(通过改变变量来改变文件的位置$BOOT_IMG),而该文件又是一个 ESP 映像。

-append_partition 2 0xef efi.img您可以通过在命令中添加标志来使用生成的图像xorriso

生成的xorriso命令可能如下所示:

xorriso -as mkisofs \
    -r -V <ISO_LABEL> \
    -o <OUTPUT_ISO_IMAGE> \
    -J -J -joliet-long -cache-inodes \
    -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
    -b isolinux/isolinux.bin \
    -c isolinux/boot.cat \
    -boot-load-size 4 -boot-info-table -no-emul-boot \
    -eltorito-alt-boot \
    -e --interval:appended_partition_2:all:: \
    -append_partition 2 0xef efi.img \
    -no-emul-boot -isohybrid-gpt-basdat \
    <ISO_DIRECTORY>

请记住,如果您希望映像在 BIOS 系统上启动,您还需要使用 ISOLINUX。GRUB2 适用于 UEFI。

此外,您应该使用最新版本xorriso(该标志--interval:appended_partition_2:all::是几年前添加的,因此旧版本不支持它)。

如需进一步指导,还请参阅问题。

相关内容