
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 plain
y cmd
se 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.EFI
para 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-amd64
y 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.EFI
y BOOTIA32.EFI
MBR 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 $DISK
imagen 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 -S
para 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>