GRUB Arranque ISO/imagen de disco desde la partición NTFS

GRUB Arranque ISO/imagen de disco desde la partición NTFS

Estoy intentando iniciar un ISO que contiene un sistema Linux en vivo desde una partición NTFS existente en una PC. La PC tiene UEFI y el disco duro está particionado con GPT, por lo que GRUB4DOS no es una opción. ¿Se puede hacer esto?

Sé que la pregunta se ha hecho antes:Grub: inicie el archivo iso de Debian desde la partición ntfs e instálelo, pero no hay respuestas aprobadas allí, por eso vuelvo a preguntar. También me gustaría usar mi propio kernel en lugar de uno fijo y precompilado.

De las otras respuestas parece que necesitaría incluir algún tipo de archivo de kernel personalizado (supongo que lo colocaré en la partición EFI), que luego es capaz de cargar el resto del ISO(?) desde el propio NTFS.

Esto ya se puede hacer en la partición FAT, simplemente haciendo una entrada GRUB

menuentry "Boot LINUX FROM ISO FILE" {
  set iso_path=/path_to/image_on_FAT_filesystem.iso
  loopback loop (hdX,msdosY)$iso_path
  linux (loop)/path_to/vmlinuz nomagic base_only norootcopy from=$iso_path
}

Respuesta1

Entonces, como solución;

Antecedentes: estoy usando Arch Linux. Usamkinitcpiopara generar su initramfs (y el espacio de usuario inicial (!)). Debido a que estamos arrancando una imagen del sistema de archivos desde NTFS, necesitamos modificar initramfs. Podemos usar GRUB y su módulo ntfs para leer (el módulo ntfs de GRUB es ro afaik) el kernel e initramfs de la partición NTFS. Después de esto, todavía necesitamos montar la partición NTFS desde initramfs para obtener acceso completo de lectura/escritura.

Teoría de funcionamiento de la solución: Agregué paquetes ntfs-3g y fusefs al initramfs, para que se pueda montar la partición NTFS. También creé un nuevogancho mkinitcpioque debe cargarse antes del gancho de montaje real. El gancho es un script de shell simple que obtiene los parámetros (estos se proporcionan como argumentos del núcleo de GRUB) como

menuentry "Boot LINUX FROM ISO FILE" {
  insmod ntfs
  set root='(hdX,Y)'
  linux /in_ntfs/vmlinuz-linux root=UUID=*GPT_UUID_OF_ROOTFS_ON_DISK_IMAGE* image_path=*path_to_disk_image_on_NTFS* image_hd=*GPT_UUID_OF_NTFS_DISK*
  initrd /in_ntfs/initrd.img
}
  1. Ubicación de la imagen del disco dentro de la partición NTFS (image_path)
  2. Partición NTFS GPT GUID (image_hd)
  3. Si la imagen del disco contiene varias particiones, el UUID de rootfs (raíz)

El procedimiento de arranque con respecto a los montajes de disco:

  1. El gancho initcpio monta la partición NTFS
  2. El gancho initcpio monta la imagen del disco desde la partición NTFS como un dispositivo de bucle.
  3. Ahora se ejecuta el gancho de montaje normal, se le proporciona ext4 o cualquier partición que contenga rootfs de Linux dentro de esa imagen de disco montada en el paso 2.
  4. El sistema sale del espacio de usuario inicial; newroot está configurado en la partición rootfs del archivo de imagen montado en bucle NTFS.
  5. Ta-dah, tenemos un sistema Linux en ejecución con permisos de lectura y escritura desde una imagen de disco/imagen ISO dentro de una partición NTFS.

información relacionada