내 사용자 정의 빌드 iso가 EFI에서 부팅되지 않는 이유는 무엇입니까?

내 사용자 정의 빌드 iso가 EFI에서 부팅되지 않는 이유는 무엇입니까?

mkisofs 모드에서 xorriso를 사용하여 사용자 정의 iso를 만들고 있습니다. 빌드가 올바른 것 같습니다. 이후 ISO를 검사하면 부팅 이미지 2개(BIOS 1개, UEFI 2개)가 표시되지만 OVMF 펌웨어를 사용하여 qemu에서 ISO로 부팅하면 부팅 가능한 미디어를 찾을 수 없습니다.

qemu에서 똑같은 부팅을 시도하지만 ubuntu 16.04 서버 iso를 새로 다운로드하면 부팅에 문제가 없습니다.

UEFI가 아닌 BIOS를 사용하면 둘 다 정상적으로 부팅됩니다.

xorriso 명령:

xorriso -as mkisofs \
   -l -J -R -V version \
   -no-emul-boot -boot-load-size 4 -boot-info-table \
   -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
   -isohybrid-mbr isohhdpfx.bin \
   -eltorito-alt-boot -e EFI/BOOT/BOOTX64.EFI -no-emul-boot \
   -isohybrid-gpt-basdat \
   -o testos.iso ./cddir/

xorriso -report_el_torito plain2개의 iso(ubuntu 및 제가 사용자 정의한 것) 사용 및 확인에 대한 자세한 내용은 cmd다음과 같습니다.https://gist.github.com/deitch/e069268f92402d6a2b1c7e060ddba622

답변1

비행해주셔서 감사합니다 xorriso.

문제는 xorriso가 EFI 시스템 파티션으로 표시하도록 한 이미지 파일에 있습니다. 이름이 지정된 바이너리 파일 /EFI/BOOT/BOOTX64.EFI(또는 /BOOTIA32.EFI32비트 x86의 경우...)과 기타 파일이 포함된 FAT 파일 시스템 이미지여야 합니다 . 내용을 이해하려면 Ubuntu ISO에서 /boot/grub/efi.img 파일을 마운트하세요.

Ubuntu 및 기타 운영 체제에서 사용되는 FAT 파일 시스템은 GRUB2 프로그램 grub-mkimage에 의해 생성되었을 수 있습니다. ISOLINUX/SYSLINUX EFI 소프트웨어는 CD-ROM 장치를 발견하면 튀어나오기 때문에 작동하지 않습니다.

부팅 가능한 ISO를 얻는 매우 편리한 방법은 프로그래밍 방식입니다 grub-mkrescue. GRUB2가 BIOS 및 EFI용으로 구성된 경우( 이미지grub-pcEFI: 바이너리 패키지 설치)예 하드 드라이브의 BIOS용 MBR 과 하드 드라이브의 EFI용 GPT가 있습니다.grub-efi-amd64grub-efi-ia32grub-mkrescueBOOTX64.EFIBOOTIA32.EFI

답변2

매우 간단한 방법은 다음과 같습니다.

ISO에 연결(boot/grub/efi.img의 우분투 ISO)하면 efi.img모든 시스템에서 부팅됩니다.

cat efi.img >> youriso.iso

그러면 ISO가 CDROM과 USB 플래시 드라이브로 모두 작동합니다. :디

답변3

나는 확실히 Thomas Schmitt만큼 xorriso를 모르지만 다음을 사용하여 EFI 전용 ISO를 만들었습니다.

xorriso -as mkisofs \
    -V 'deb10.5.0 preseed amd64 efi' \
    -e boot/grub/efi.img \
    -no-emul-boot \
    -o $ISO_NEW $DIR_EXTRACT

xorriso ... -extract / $DIR_EXTRACT여기서 $ISO_NEW는 출력 ISO의 이름이고 $DIR_EXTRACT는 이 예에서 Debian 10 버전에서 해킹된 것입니다.

내가 본 거의 모든 예는 더 유연하지만 부트로더 단계를 복잡하게 만드는 하이브리드 MBR/EFI를 사용합니다. 이것은오직EFI를 사용하여 efi.img생성된 ISO를 OVMF 부트로더와 함께 사용하여 사전 구축된 사용자 정의 데비안 설치 프로그램을 실행하여 $DISKQEMU 인코딩용 이미지를 생성했습니다.

설치를 실행하여 qcow2 디스크를 만듭니다.

   MACHOVMF="-machine q35,firmware=/usr/share/ovmf/OVMF.fd"
   $Q_P -m 4096 $MACHOVMF -hda $DISK -cdrom $ISO_NEW -vga std -monitor stdio

SSH를 통해 DISK를 구성하고 회귀 테스트합니다.

   NET_Q35="-nic user,hostfwd=tcp::10022-:22"
   $Q_P -m 4096 $MACHOVMF -hda $DISK $NET_Q35 -vga std -monitor stdio

개발을 위해 비슷한 명령줄을 사용하여 gdb에서 QEMU를 실행하지만 더 많은 CPU와 헤드리스를 사용합니다 -nographic(그리고 -Sgdb 소스 파일을 로드하기 전에 설정하는 등 cpu_exec).

마지막으로 $DISK가 가상 머신 내부에 설치된 모습입니다. 다음 위치에 있는 EFI 시스템 파티션(ESP)을 확인하십시오 /boot/efi.

q35efi-2:17> df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             2004028       0   2004028   0% /dev
tmpfs             403768    5420    398348   2% /run
/dev/vda2        3546736 1515520   1831336  46% /
tmpfs            2018840       0   2018840   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs            2018840       0   2018840   0% /sys/fs/cgroup
/dev/vda1         523248    5228    518020   1% /boot/efi
tmpfs             403768       0    403768   0% /run/user/1000
q35efi-2:18> blkid
/dev/vda1: UUID="DB4A-1458" TYPE="vfat" PARTUUID="7bac2a49-d394-444f-b4f7-7c822b842023"
/dev/vda2: UUID="caada636-4214-4c13-98eb-74367c1c380c" TYPE="ext4" PARTUUID="40d7e26a-1273-4af7-beb9-3ca3647a0dc5"
/dev/vda3: UUID="6d427317-3434-4425-a057-a987e847f0d2" TYPE="swap" PARTUUID="4d44decf-5237-4e81-8892-77e5e9e97a70"
q35efi-2:19> efibootmgr -v
BootCurrent: 0006
Timeout: 0 seconds
BootOrder: 0006,0000,0001,0003,0004,0005,0002
Boot0000* UiApp FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(462caa21-7614-4503-836e-8ab6f4662331)
Boot0001* UEFI QEMU DVD-ROM QM00005     PciRoot(0x0)/Pci(0x1f,0x2)/Sata(2,65535,0)N.....YM....R,Y.
Boot0002* UEFI Misc Device  PciRoot(0x0)/Pci(0x3,0x0)N.....YM....R,Y.
Boot0003* UEFI PXEv4 (MAC:525400123456) PciRoot(0x0)/Pci(0x2,0x0)/MAC(525400123456,1)N.....YM....R,Y.
Boot0004* UEFI HTTPv4 (MAC:525400123456)    PciRoot(0x0)/Pci(0x2,0x0)/MAC(525400123456,1)/IPv4(0.0.0.00.0.0.0,0,0)/Uri()N.....YM....R,Y.
Boot0005* EFI Internal Shell    FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(7c04a583-9e3e-4f1c-ad65-e05268d0b4d1)
Boot0006* debian    HD(1,GPT,7bac2a49-d394-444f-b4f7-7c822b842023,0x800,0x100000)/File(\EFI\debian\shimx64.efi)
q35efi-2:20> 

관련 정보