我有一个基于 Ubuntu 的自定义 iso,它可以在 Bios 模式下正常启动。如果启用“USB Legacy Emulation”,它也将以 UEFI 模式启动。当机器处于 UEFI 模式并且禁用“USB Legacy Emulation”时,无法识别 USB。这是我用来在 iso 中构建 fat 分区的代码:
#! /bin/sh
############################
# Make UEFI partition #
############################
BOOT_IMG_DATA="$PWD"
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 ::
这是我用来构建 iso 的代码:
############################
# Create the new ISO image #
############################
# The example names get mapped to their roles here
orig_iso="$HOME"/foxclone/foxclone025-01.iso
new_iso="$HOME"/foxclone/foxclone025-02.iso
new_files="$PWD"
mbr_template=/usr/lib/ISOLINUX/isohdpfx.bin
# Extract MBR template file to disk
dd if="$orig_iso" bs=1 count=432 of="$mbr_template"
xorriso -as mkisofs "$new_files" \
-o "$HOME"/foxclone/foxclone025-02.iso \
-isohybrid-mbr /usr/lib/ISOLINUX/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 \
-m grub.cfg
"$new_files"
这是 fdisk -lu 的结果
larry@larry-Satellite-C55-A:~/foxclone$ fdisk -lu foxclone025-02.iso
Disk foxclone025-02.iso: 549 MiB, 575668224 bytes, 1124352 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1e64812c
Device Boot Start End Sectors Size Id Type
foxclone025-02.iso1 * 0 1124351 1124352 549M 0 Empty
foxclone025-02.iso2 288 5215 4928 2.4M ef EFI (FAT-12/16/32)
任何帮助表示赞赏
答案1
在构建脚本中,-m grub.cfg 之后缺少“\”。纠正该错误就解决了问题。