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 plain
2개의 iso(ubuntu 및 제가 사용자 정의한 것) 사용 및 확인에 대한 자세한 내용은 cmd
다음과 같습니다.https://gist.github.com/deitch/e069268f92402d6a2b1c7e060ddba622
답변1
비행해주셔서 감사합니다 xorriso
.
문제는 xorriso가 EFI 시스템 파티션으로 표시하도록 한 이미지 파일에 있습니다. 이름이 지정된 바이너리 파일 /EFI/BOOT/BOOTX64.EFI
(또는 /BOOTIA32.EFI
32비트 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-pc
EFI: 바이너리 패키지 설치)예 하드 드라이브의 BIOS용 MBR 과 하드 드라이브의 EFI용 GPT가 있습니다.grub-efi-amd64
grub-efi-ia32
grub-mkrescue
BOOTX64.EFI
BOOTIA32.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 부트로더와 함께 사용하여 사전 구축된 사용자 정의 데비안 설치 프로그램을 실행하여 $DISK
QEMU 인코딩용 이미지를 생성했습니다.
설치를 실행하여 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
(그리고 -S
gdb 소스 파일을 로드하기 전에 설정하는 등 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>