¿Por qué mi ISO personalizada no arranca en EFI?

¿Por qué mi ISO personalizada no arranca en EFI?

Estoy construyendo una ISO personalizada usando xorriso en modo mkisofs. La compilación parece correcta, al inspeccionar la ISO posteriormente se muestran 2 imágenes de arranque (1 BIOS, 2 UEFI), pero al iniciar la ISO desde qemu usando el firmware OVMF no se puede encontrar ningún medio de arranque.

Si intento exactamente el mismo arranque en qemu pero usando una ISO de servidor ubuntu 16.04 limpia y descargada, arranca sin problemas.

Si uso BIOS (no UEFI), ambos arrancan bien.

comando 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/

Los detalles de examinar las 2 iso (ubuntu y mi versión personalizada) con xorriso -report_el_torito plainy cmdse encuentran en la siguiente esenciahttps://gist.github.com/deitch/e069268f92402d6a2b1c7e060ddba622

Respuesta1

Gracias por volar xorriso.

El problema está en el archivo de imagen que dejaste que xorriso marcara como partición del sistema EFI. Se supone que es una imagen del sistema de archivos FAT que contiene un archivo binario llamado /EFI/BOOT/BOOTX64.EFI(o... /BOOTIA32.EFIpara x86 de 32 bits) y posiblemente otros archivos. Monte el archivo /boot/grub/efi.img desde la ISO de Ubuntu para conocer su contenido.

Los sistemas de archivos FAT utilizados por Ubuntu y otros probablemente sean producidos por el programa GRUB2 grub-mkimage. El software ISOLINUX/SYSLINUX EFI no se puede utilizar porque falla al ver un dispositivo de CD-ROM.

Una forma bastante conveniente de obtener una ISO de arranque es mediante un programa grub-mkrescue. Si GRUB2 está configurado para BIOS y EFI (por ejemplo, instalando paquetes binarios grub-pc, grub-efi-amd64y grub-efi-ia32), grub-mkrescue producirá una ISO que arranca en BIOS y EFI de máquinas x86 de 32 y 64 bits: Imágenes de arranque de El Torito para BIOS y EFI, la imagen de EFI tiene BOOTX64.EFIy BOOTIA32.EFIMBR para BIOS desde el disco duro, GPT para EFI desde el disco duro.

Respuesta2

Una manera muy fácil de hacerlo es esta:

Agregue efi.img(desde ubuntu ISO en boot/grub/efi.img) a su ISO y se iniciará en todos los sistemas.

cat efi.img >> youriso.iso

Después de eso tu ISO funcionará tanto como cdrom como como pendrive USB. :D

Respuesta3

Ciertamente no sé tanto sobre xorriso como Thomas Schmitt, pero uso lo siguiente para crear una ISO solo para EFI.

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

Donde $ISO_NEW es el nombre de la ISO de salida y $DIR_EXTRACT es la versión pirateada xorriso ... -extract / $DIR_EXTRACT, en este caso, de Debian 10.

Casi todos los ejemplos que he visto utilizan un MBR/EFI híbrido, que es más flexible pero también complica los pasos del gestor de arranque. Esto esSOLOEFI, utilizando la imagen VFAT en formato efi.img. Utilizo el ISO generado, junto con el gestor de arranque OVMF, para ejecutar un instalador de Debian preconfigurado personalizado para crear una $DISKimagen que uso para la codificación QEMU.

Ejecute la instalación para crear el disco qcow2:

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

Configurar y realizar pruebas de regresión del DISCO vía SSH.

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

Para el desarrollo, ejecuto QEMU bajo gdb usando una línea de comando similar pero con más CPU y sin cabeza -nographic(y -Spara configurar, cargar archivos fuente de gdb, etc. antes cpu_exec).

Y, finalmente, así es como se ve el $DISK instalado dentro de la VM. Observe la partición del sistema EFI (ESP) en /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> 

información relacionada