您可以使用以下方法生成适用于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镜像。
您可以通过在
xorriso
命令中添加标志
-append_partition 2 0xef efi.img
来使用生成的镜像。
生成的
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::
是几年前添加的,所以旧版本不支持它)。
如需进一步指导,请参阅
this问题。