Desde GRUB2, arranque un ISO en un volumen lógico LVM2

8

tl; dr: ¿es posible arrancar desde un archivo .iso ubicado en un volumen lógico lmv2 sin cifrar? ¿Cómo?

Estoy tratando de configurar esto en una VM VirtualBox antes de hacerlo de verdad con mi computadora portátil. Tengo la siguiente configuración:

  • 4 particiones gpt
    • gpt1 - arranque bios ef02 2M
    • gpt2 - 5G sin cifrar no lvm, para datos misceláneos, iso, etc.
    • gpt3 - 5G lvm sin cifrar, para / boot, iso's, etc.
    • gpt4 - restante, lvm, encriptado con dm-crypt / luks, para root, swap, home, etc.
  • en gpt2, tengo copias de las iso de Arch y Xubuntu actuales
  • en gpt3, tengo un lvm2 lv con las mismas copias de las mismas iso

Tengo el siguiente trabajo:

  • en gpt4, instalaciones funcionales de Arch y Xubuntu (y me gustaría agregar otras distribuciones en otros volúmenes lógicos en algún momento)
  • grub2 instalado desde Arch en / dev / sda
  • usando el comando configfile de grub2, puede cambiar y arrancar desde el menú grub2 de la distribución
  • puede arrancar iso desde el menú de grub desde gpt2 no lvm

Lo que me gustaría hacer es arrancar desde las iso en gpt3 lvm (y, en última instancia, ni siquiera tener la partición gpt2 que no sea lvm).

Mi entrada de comida es:

menuentry "Xubuntu ISO" {
  set isofile="/xubuntu-12.04.1-desktop-amd64.iso"
  # from non-lvm
  loopback loop (hd0,gpt2)$isofile
  # from lvm
  #loopback loop (vgboot-iso)$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  initrd (loop)/casper/initrd.lz
}

Las 2 líneas de loopback apuntan a 2 copias diferentes de la misma iso. Verifiqué en la línea de comando de grub que ambas líneas de bucle de retorno funcionan.

Al arrancar desde la iso en la partición no lvm, todo funciona bien.

Al arrancar desde la iso en la partición lvm, se inicia el arranque y, finalmente, aparece este error:

(initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found

Para la entrada del arco:

menuentry "Arch ISO" {
  set isofile="/archlinux-2012.09.07-dual.iso"
  loopback loop (hd0,gpt2)$isofile
  #loopback loop (vgboot-iso)$isofile
  linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201209 img_dev=/dev/sda2 img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/x86_64/archiso.img
}

arrancar desde gpt2 iso funciona, pero no sé a qué cambiar el "/ dev / sda2" para el arranque de lvm.


EDITAR: ¿Se puede hacer esto? ¿Para cualquier archivo .iso oficial de la distribución de Linux actual? Fedora? Debian? openSUSE? CentOS?

¿Es esto imposible? ¿O es algo que nadie ha pensado probar antes?


EDIT2: Mi recompensa ha expirado hace mucho tiempo, y después de 9 meses, supongo que esto simplemente no es posible con ninguna distribución de Linux. Dejaré la pregunta abierta, pero dudo que haya una solución que funcione en un futuro cercano.

zapata
fuente

Respuestas:

1

Usando el ISO de Fedora 21, acabo de probar con éxito lo siguiente:

menuentry "Fedora 21 Live M6600" --class fedora {
    insmod part_gpt
    insmod lvm
    insmod ext2
    set vg='m6600'
    set lv='F21Live'
    set root="lvm/${vg}-${lv}"
    search --no-floppy --fs-uuid --set=root --hint=${root} 95e4eec8-c1de-4802-b821-5753de990cbe
    set isofile="/Fedora-Live-Workstation-x86_64-21-5.iso"
    echo "Using ${isofile}..."
    loopback loop $isofile
    linux (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-WS-x86_64-21-5 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 rd.auto=1
    initrd (loop)/isolinux/initrd0.img
}

rd.auto = 1 le indicará a Linux que cargue todos los LVM y las búsquedas iso-scan .

nxxy
fuente
El UUID en la línea que comienza searches el del volumen lógico que contiene el archivo iso, ¿verdad? Para conseguirlo, tienes que hacerlo sudo blkid.
erik
Esto podría hacerse mucho más fácil, vea mi respuesta para arrancar Fedora y Ubuntu desde LVM.
erik
1

Inspirado por esta solución simple para Ubuntu , utilicé lo siguiente, que funciona para cargar una iso Fedora 27 KDE y una iso Ubuntu 17.10.

Acabo de agregar las siguientes líneas en el archivo /etc/grub.d/40_custom

menuentry "Live Fedora KDE 27" --class fedora {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/isolinux/vmlinuz iso-scan/filename=${iso_path} root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rootfstype=auto rd.live.image quiet
  initrd (loop)/isolinux/initrd.img
}

menuentry "Ubuntu 17.10.1" --class ubuntu {
  insmod part_msdos
  insmod lvm
  set iso_path="/erik/Downloads/transmission/ubuntu-17.10.1-desktop-amd64.iso"
  search --no-floppy --fs-uuid --set=root 6340d364-fc09-44d1-914f-b902a6394a55
  loopback loop ($root)$iso_path
  linux (loop)/casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=${iso_path} quiet splash ---
  initrd (loop)/casper/initrd.lz
}

Explicación

  • La línea que comienza set iso_pathdefine la ruta, donde se puede encontrar el archivo iso en el volumen lógico. Cuando inicio mi sistema, se encuentra en /home/erik/Downloads/transmission/Fedora-KDE-Live-x86_64-27/Fedora-KDE-Live-x86_64-27-1.6.iso", pero /homees el volumen lógico montado, así que lo dejo afuera y comienzo la ruta con/erik/Downloads/…
  • La línea que comienza searchtiene una extraña variable alfanumérica (un llamado UUID) al final, que comienza con 6340. Obtuve este número del comando

    sudo blkid
    

    lo que me dio, junto con otros, la siguiente línea

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Luego, otra cosa importante si desea arrancar otros archivos iso, son las líneas que comienzan con linuxy initrd. Los obtuve abriendo el archivo iso con file-roller(gui para extraer archivos comprimidos) o mc(administrador de archivos de consola).

    • Fedora y similares: allí vas al directorio /isolinux, donde encontrarás un archivo llamado isolinux.cfg. Allí encontré algunas líneas que comienzan con label, y debajo de ellas las siguientes líneas importantes

      kernel vmlinuz
      append initrd=initrd.img root=live:CDLABEL=Fedora-KDE-Live-27-1-6 rd.live.image quiet
      

      que usarás para llenar las dos últimas líneas de mi grub2 menuentry.

    • Ubuntu y similares: allí vas al directorio /boot/grub, donde encontrarás un archivo llamado grub.cfg. Aquí encontrará algunas líneas que comienzan con menuentry, y debajo de ellas las siguientes líneas importantes

      linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash ---
      initrd  /casper/initrd.lz
      

      que puedes copiar

erik
fuente
0

Creo que no es posible para el archivo iso oficial de la mayoría de las distribuciones.

El error que obtienes:

 (initramfs) /scripts/casper-premount/20iso_scan: line 46: can't open /dev/sr0: No medium found

significa que al arrancar, el sistema en vivo que está iniciando está buscando una unidad de CD / DVD y no encuentra ninguna.

Los CD en vivo no están configurados para buscar su iso de origen en un LVM; tal vez pueda modificar los scripts de arranque de la imagen para hacerlo, pero no creo que ningún archivo .iso oficial de distribución actual lo haga. ¿Puede intentar ponerse en contacto con los desarrolladores de su distribución favorita para tener eso integrado tal vez?

alphatiger
fuente
Que es posible, ver a mi respuesta simple, donde arranco desde Fedora 27 y Ubuntu 17.10.
Erik
0

Podrías probar esto:

Agregue esto al comienzo de la menuentry:

insmod lvm

Luego, especifique su partición LVM con:

set lvmpart=lvm/<lvm_group_name>-<lvm_logical_partition_name>

Entonces su entrada Xubuntu ISO sería así:

menuentry "Xubuntu ISO" {
  insmod lvm
  set lvmpart=lvm/<lvm_group_name>-<lvm_logical_partition_name>
  set isofile="/xubuntu-12.04.1-desktop-amd64.iso"
  loopback loop $lvmpart$isofile
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  initrd (loop)/casper/initrd.lz
}

Por favor, haga las correcciones necesarias.

Esto debería hacer que GRUB reconozca el volumen lvm2, haciendo posible leer el archivo ISO en él. Sin embargo, probablemente todavía no se encuentre el ISO ...

Leonardo Dagnino
fuente
Intenté tus sugerencias, pero como dijiste, la iso todavía no se encuentra.
zapata
0

Solo un punto:

El ISO al arrancar debe montar el iso, por lo que debe saber cómo encontrarlo.

Grub2 puede ver el ISO con comandos insmod ..., pero eso no hace más que dejar que Grub2 lea dentro del ISO, montarlo en bucle, etc., pero tan pronto como el Linux dentro del ISO inicia el LVM / LUKS / loop / etc es no está allí (no montado), los scripts de arranque dentro de ISO deben saber cómo montar ese LVM / LUKS / loop; así que si ese Linux no está preparado para hacerlo, no será posible arrancar desde él.

Muestra sin LVM, LUKS, etc ... si un ISO LiveCD de Linux normal no está diseñado para buscar y montar un bucle en un archivo .iso durante el arranque, nunca será posible iniciarlo desde Grub2 (con .iso como archivo).

Para tales casos, necesita un emulador de CD / DVD de hardware (si está en hardware real), o simplemente monte el .iso en la unidad de CD / DVD virtual de una máquina virtual.

La otra opción, por supuesto, es 'editar' tal ISO para incorporar en el arranque algunos scripts para buscar y montar LVM / LUKS / etc.

Anónimo
fuente