¿Cómo inicio un archivo ISO desde mi disco usando grub2 en máquinas UEFI?

12

Tengo un montón de archivos ISO en vivo como GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32 bit , ... descargados en /optmi vieja máquina BIOS, solía poder agregarlos al menú de grub y arrancarlos . :-)

Ahora tengo una máquina UEFI y toda la información que puedo encontrar es para máquinas BIOS.

¿Cuáles son los pasos para iniciar estos archivos ISO desde grub?

Estoy cansado de "quemar" todo esto en una memoria USB todo el tiempo, ya que nunca puedo encontrar la memoria que necesito, mientras que mi computadora en sí es mucho más difícil de perder en el caos total a mi alrededor ... ) :-(

Fabby
fuente
1
Fui por aquí hace un tiempo y es increíble.
Mármol orgánico
1
Me gusta usar una partición separada, una en cada unidad para facilitar la instalación en otra unidad o la instalación de la unidad completa en unidades flash. help.ubuntu.com/community/Grub2/ISOBoot Ejemplos: help.ubuntu.com/community/Grub2/ISOBoot/Examples Me parece que obtener la ruta correcta tal como está antes de que se monten las particiones y obtener parámetros de arranque detallados como los dos problemas principales para obtener a trabajar La ruta incluso puede cambiar si la unidad flash está conectada. Y mirar ISO para ver su sección y ruta de arranque puede ayudarlo a descubrir detalles.
oldfred
1
Utilicé este método 'grub-n-iso' mucho antes, y funciona bien :-) pero ahora pruebo los archivos iso en una computadora separada para probar, y clono desde los archivos iso para acelerar pendrives USB3 o crear live persistente Pendrives USB con mkusb . (
Guardo
VBox ejecuta archivos ISO OK, use guardar el estado de la máquina al salir, MultiBootUSB tiene una opción para arrastrar y soltar el arranque ISO y QEMU con el administrador de la máquina virtual ejecutará rápidamente una iso.
CSCameron
1
Por el momento, solo use grub2 2.02 para montar en bucle ISO. Grub2 2.04 da error de memoria insuficiente. bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311 Ubuntu 18.04 todavía tiene grub 2.02.
oldfred

Respuestas:

14

Hay un error en grub 2.04, así que asegúrese de tener una versión anterior o posterior.

Bueno, los conceptos básicos para agregar un archivo ISO a grub son los mismos para un UEFI que para una máquina BIOS: edite /etc/grub.d/40_customy agregue un menuentryelemento (GParted se usa en este ejemplo) en la parte inferior del archivo:

menuentry "GParted Live ISO" {
}

Ahora vamos a agregar una variable que contiene el directorio donde almacenamos el ISO (hasta ahora, todo bien: no hay diferencias con las máquinas BIOS):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
}

Estoy usando /optpara almacenarlos, ya que no me gusta crear directorios en la raíz de mi máquina y de acuerdo con la Jerarquía del sistema de archivos de Linux, ahí es donde debería residir el software opcional de todos modos.

Antes de añadir la loopbackvariable que necesitamos para averiguar en qué disco duro está almacenado el archivo, por lo que hacemos un: df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1y la salida en mi máquina es: /dev/sdb2.

Sin embargo, grub usa la hdX,Ynotación ( ) y aquí es donde entra la diferencia entre las máquinas UEFI y BIOS. Así que ahora que reiniciar la máquina, entrar en el menú de grub y pulse C: Esto le llevará a la orden grub rápido con diferentes comandos de lo que estamos acostumbrados a , pero el único que se necesita es: ls.

En mi máquina, la salida es:

(hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...

¿Eh? 4 unidades? ¡Solo tengo 3! ¡Y no está en (hd1,4)línea en un BIOS sino (hd1,gpt3)en UEFI y (hd0)no tiene particiones en absoluto!

¡Bueno, aparentemente cuando parte de la NVRAM se usa como almacenamiento y aparece cuando (hd0) necesita comenzar a numerar sus unidades en 1!   Mientras que toda la información que encuentra al arrancar archivos ISO dice que debe comenzar a numerar desde 0 (en máquinas BIOS esto siempre es cierto , ¡esto no es necesariamente el caso en algunas máquinas UEFI !)

Entonces, el valor para se loopbackconvierte (hd2,gpt2)$GPartedISOFileen el archivo ISO en mi máquina /dev/sdb2(segunda unidad hd2, segunda partición gpt2):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
}

Otra diferencia es que el linuxy initrden las máquinas de BIOS son llamados linuxefiy linuxefien las máquinas UEFI, que nos da nuestro resultado final:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$GPartedISOFile ip=frommedia toram=filesystem.squashfs union=overlay username=user
  initrdefi (loop)/live/initrd.img
}

Así que ahora guarde ese archivo y actualice grub con:

update-grub

Después de todo lo anterior, reinicie, vaya al menú de grub , elija GParted Live ISOy ahora puede arrancar fácilmente su ISO sin tener que buscar una memoria USB nunca más.

:-)

Ejemplo de CloneZilla Live (para esta pregunta )

menuentry "CloneZilla ISO" {
  set ISOFile="/opt/Live-ISOs/clonezilla-live-20170905-zesty-amd64.iso"
  loopback loop (hd2,gpt2)$ISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$ISOFile ip=frommedia toram=filesystem.squashfs union=overlay
  initrdefi (loop)/live/initrd.img
}
Fabby
fuente
¿Ya configuraste Clonezilla? Es un poco diferente, puedo publicar eso si aún no lo has descubierto.
Mármol orgánico
1
Voy a publicar otra respuesta para todas las que agregaré mañana para el tipo de personas "dame el codez" ... @OrganicMarble
Fabby
+1 pero probablemente sea seguro dejarlo 2en update-grub2estos días.
WinEunuuchs2Unix
@ WinEunuuchs2Unix Está en mi historia ... Simplemente escribo upd↑y luego copio y pego. Gracias por el recordatorio Actualizado!
Fabby
6

Una alternativa es simplemente agregar un archivo de configuración a 40_custom así:

menuentry 'Live ISOs on SSD' {
configfile (hd0,3)/ISO/livecdimage.cfg
} 

menuentry 'Live ISOs on HDD (boot on SSD)' {
configfile (hd1,3)/ISO/livecdimage.cfg
} 

Hago esto porque cuando actualizo un ISO, siempre me olvido de ejecutar sudo update-grub. Las entradas anteriores nunca tienen que cambiar y solo puedo editar livecdimage.cfg que tiene el mismo formato que cualquier 40_custom pero sin líneas de encabezado, y está en mi carpeta / ISO en mi partición ISO.

Agrego toram como otro parámetro de arranque y en el sistema con Nvidia agrego el parámetro de arranque nomodeset. Pero todavía a menudo tiene que desmontar el / isodevice.

No se puede desmontar isodevice desmontar ISO https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216

sudo umount -l -r -f /isodevice

Y esto es parte de mi archivo livecdimage.cfg

# livecdimage.cfg
# Add this to 40_custom to load this file:
# menuentry 'Live ISOs' {
# configfile (hd1,3)/iso/livecdimage.cfg
#} 
# Add iso names to livecdimage.cfg
#for i in `ls *.iso`;do echo "# "$i>>livecdimage.cfg; done;

menuentry "Ubuntu 16.04.4 xenial amd64" {
    set isofile="/ISO/ubuntu-16.04.4-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

menuentry "Ubuntu 18.04 Bionic amd64" {
    set isofile="/ISO/bionic-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

# spacer line
menuentry " " {
set root= 
}

menuentry "Reboot" {
    reboot
}

menuentry "Halt" {
    halt
}
oldfred
fuente
Me gusta el reinicio y detener los! :-) +1 ¿Por qué agrega el insmod? También puedes enviarme un ping en el chat
Fabby
inmod probablemente no sea necesario. Con grub2 se incorporaron algunas características y algunas se agregaron (el insmod). Probablemente al principio necesitaba el insmod gpt cuando comencé a usar gpt en 2010 o antes de que la PC fuera UEFI y grub2 era nuevo y solo para BIOS / MBR, aunque arrancaría desde gpt con BIOS.
oldfred
Gracias por la respuesta. ¿No sería mejor eliminar esas líneas de la respuesta entonces?
Fabby
1
Déjame editar mi propia estrofa y ver si arranca 18.04. Espero que lo haga. También quería actualizar mi entrada de arranque ISO dividida que ahora es muy antigua, por lo que volveré en un momento.
oldfred
1
Arrancó bien. Olvidé que tenía mi unidad flash 18.04 conectada y se convierte en hd0 en mi sistema, por lo que al arrancar tengo que editar manualmente la entrada en un hdX para tener la unidad correcta. Mi arranque de .25 dividido no funcionó simplemente cambiando a .30. Tuve que buscar en ISO y ver su grub.cfg y usar esos parámetros y comandos de bucle de grub, y luego funcionó.
oldfred
5

mkusb MULTIBOOT HACK

Mkusb es una excelente base para proyectos de unidades de arranque personalizadas debido a sus capacidades con BIOS y UEFI.

Este truco arranca múltiples archivos ISO, incluido el instalador de Windows, y tiene un menú grub2.

Los menús de Grub2 para la mayoría de los sistemas operativos están disponibles mediante la Búsqueda de Google y están fuera del alcance de esta respuesta.

mkusb por defecto

Utilice los valores predeterminados de mkusb al crear la unidad USB persistente.

mkusb usa los valores predeterminados nuevamente

Utilice los valores predeterminados de persistencia mkusb si tiene dudas, el tamaño de la partición se puede ajustar más tarde pero lleva tiempo.

Consola DUS

La consola DUS después de la instalación.

GParted Antes

GParted antes de la modificación de la partición.

Gparted después

Separado después de la modificación: sobrescriba sdb4, la partición ISO9660 OS y sdb5, la partición ext2 casper-rw, con una partición FAT32 para archivos de persistencia.

Partición de persistencia

Partición de persistencia: cree una carpeta de nombres exclusiva para cada sistema operativo (que requiere persistencia)

Carpeta de persistencia

Carpeta de persistencia: agregue un archivo casper-rw y un archivo home-rw opcional a cada carpeta de persistencia. Se puede crear un archivo home-rw cambiando el nombre de un archivo casper-rw. Un archivo home-rw es como una partición doméstica separada en una instalación completa, se puede reutilizar después de las actualizaciones de la versión.

Carpeta ISO

Cree una carpeta para los archivos ISO en la partición usbdata NTFS.

Contenido de la carpeta ISO

Agregue algunos ISO a la carpeta ISO.

Ubicación GRUB

ubicación grub.cfg

grub.cfg

Edite grub.cfg para montar en bucle los archivos ISO. Incluye: persistent persistent-path=/<persistent-folder-name>/si quieres persistencia.

EDITAR 18.04+ En grub, especifique vmlinuz no vmlinuz.efi e initrd no initrd no initid.lz

sudo se separó -ls / dev / sdb

sudo se separó -ls / dev / sdb

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Si se requiere un instalador de Windows, posiblemente sea más fácil comenzar con la función mkusb "extraer el instalador de Windows" (tuve que extraer el ISO de Windows a TAR manualmente),

Instalador de Windows mkusb

Después de la instalación, cree una carpeta para ISO y, si es necesario, carpetas para persistencia (similar al procedimiento anterior).

mkusb Windows grub

Edite /boot/grub/grub.cfg para montar en bucle cualquier ISO y especificar las carpetas de persistencia.

(no he encontrado una manera de montar en bucle un archivo ISO de Windows).

Si lo anterior se usa como una memoria USB, se puede usar para arrancar los ISO almacenados en una computadora solo con Windows. Grub no es necesario en la unidad interna.

CSCameron
fuente
¿Y cómo recuperas esto en el HDD / SDD? La pregunta es sobre ahora quererlos en una memoria USB, ¿o me perdí algo?
Fabby
1
@Fabby, esto no es solo para memorias USB. Si tiene una nueva unidad SATA, puede comenzar como se describe en esta respuesta y dejar que mkusb instale su robusto sistema de arranque, que funciona tanto en modo UEFI como BIOS. Esta unidad SATA puede instalarse internamente o conectarse externamente a través de USB o eSATA. Es posible agregar tanto 'sistemas instalados convencionalmente' como nuevos archivos iso para arrancar a través de 'grub-n-iso'.
sudodus
OK, todavía no lo entiendo: quiero estos ISOs /opt/. ¿Cómo puedo hacer eso? (+1 mientras tanto por esfuerzo ...)
Fabby
1
@Fabby: creo que en lugar de crear una nueva carpeta para los ISO como se muestra arriba, señale la ubicación del ISO en / opt /, en grub.cfg, grub en un pendrive puede arrancar un ISO en el disco duro. Voy a intentar esto.
CSCameron
@Fabby: si los ISO están en / opt / de la unidad interna, la misma entrada de menú que está utilizando en la unidad interna funcionará en la unidad externa. Puede haber ventajas al arrancar grub en una memoria USB, como no sobrecargar o corromper el menú interno de grub.
CSCameron
3

Tres sencillos pasos

para agregar ISO al menú de grub y arrancar desde él.

Primero, instale grml-rescueboot

Abra una terminal e ingrese:

sudo apt install grml-rescueboot

En segundo lugar, mueva los archivos iso a /boot/grml/

En la misma terminal ingrese:

sudo mv ~/Downloads/<filename.iso> /boot/grml/

Tercero, actualizar grub

En la misma terminal ingrese:

sudo update-grub

Repita los pasos segundo y tercero cuando sea necesario

No olvides eliminar los archivos ISO obsoletos de /boot/grml.

Referencia: ayuda de Ubuntu en el arranque ISO de Grub2

Espero que esto ayude

usuario68186
fuente
/bootEs el peor lugar para ponerlos. Lo siento, examiné grml, debería haberlo mencionado. +1 por esfuerzo, sin embargo
Fabby
¡Gracias @Fabby por el +1! Puede que esta no sea la mejor manera de hacerlo, pero parece ser la más fácil, en mi humilde opinión.
user68186
1
Es por eso que +1: buena respuesta para usuarios no técnicos.
Fabby
2

MultiBootUSB - QEMU

Si desea iniciar archivos ISO con la menor molestia y no necesita persistencia, MultiBootUSB incluye una opción QEMU:

  • Inicie MultiBootUSB y seleccione la pestaña Boot ISO / USB.

  • Arrastre y suelte el ISO en el espacio Seleccionar imagen.

  • Seleccione el tamaño de RAM y presione el botón Boot ISO.

No necesita editar grub.cfg o incluso cerrar sesión.

MultiBootUSB-QEMU

CSCameron
fuente
¡Hábil! ¡Voy a probar esto más tarde!
Fabby
@Fabby: hay una versión para Windows de MBUSB y una versión para Linux. No pude obtener la versión de Windows para arrancar ISO, solo USB. La versión de Linux 9.2.0 funciona muy bien para mí.
CSCameron
2

SIMPLE mkusb ISO multibooter

Si no necesita persistencia múltiple, es fácil reiniciar ISO del sistema operativo en una unidad flash mkusb.

Use mkusb para hacer una unidad USB persistente utilizando un sistema operativo predeterminado de su elección, https://help.ubuntu.com/community/mkusb

Haga una carpeta en la partición usbdata sdx1, llamada ISOs.

Agregue los ISO que se iniciarán en esta carpeta.

Agregue menuentries a /sdx3/boot/grub/grub.cfg para montar en bucle los ISO.

Muestras:

menuentry "Ubuntu-18.04 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/ubuntu-18.04-desktop-amd64.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile splash --
        initrd (loop)/casper/initrd.lz
}

menuentry "GParted 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/gparted-live-0.31.0-1-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live union=overlay username=user config components noswap noeject toram=filesystem.squashfs ip='' nosplash findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}

menuentry "Clonezilla 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/clonezilla-live-2.5.5-38-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live live-config nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\"   ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"\" vga=788   ip=frommedia nosplash toram=filesystem.squashfs findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}
CSCameron
fuente