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_custom
y agregue un menuentry
elemento (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 /opt
para 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 loopback
variable 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 -1
y la salida en mi máquina es: /dev/sdb2
.
Sin embargo, grub usa la hdX,Y
notació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 loopback
convierte (hd2,gpt2)$GPartedISOFile
en 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 linux
y initrd
en las máquinas de BIOS son llamados linuxefi
y linuxefi
en 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 ISO
y 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
}