Ubuntu 기반 사용자 정의 ISO가 있고 Bios 모드에서 제대로 부팅됩니다. "USB 레거시 에뮬레이션"이 활성화된 경우 UEFI 모드에서도 부팅됩니다. 머신이 UEFI 모드에 있고 "USB 레거시 에뮬레이션"이 비활성화되면 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 뒤에 "\"가 누락되었습니다. 해당 오류를 수정하면 문제가 해결되었습니다.