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

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

tl;dr: ¿Es posible arrancar desde un archivo .iso ubicado en un volumen lógico lmv2 no cifrado? ¿Cómo?

Estoy intentando configurar esto en una máquina virtual VirtualBox antes de hacerlo realmente con mi computadora portátil. Tengo configurado lo siguiente:

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

Tengo lo siguiente funcionando:

  • 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 ambas distribuciones
  • puede arrancar iso desde el menú grub desde gpt2 que no sea 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 grub 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 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 invertido funcionan.

Al arrancar desde iso en una partición que no es lvm, todo funciona bien.

Al arrancar desde la iso en la partición lvm, el arranque se inicia 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 "/dev/sda2" para el arranque lvm.


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

¿Es esto imposible? ¿O es algo que a nadie se le había ocurrido antes?


EDITAR 2: Mi recompensa expiró 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 el futuro cercano.

Respuesta1

Usando la ISO de Fedora 21, probé 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=1le dirá a Linux que cargue todos los LVM yescaneo isolos busca.

Respuesta2

Inspirado poresta sencilla solución para Ubuntu, Usé lo siguiente, que funciona para cargar una iso de KDE de Fedora 27 y una iso de 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 con 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 fuera y comienzo la ruta con/erik/Downloads/…
  • La línea que comienza con searchtiene una extraña variable alfanumérica (llamada UUID) al final, que comienza con 6340. Obtuve este número del comando

    sudo blkid
    

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

    /dev/mapper/fedora_pluto-home: UUID="6340d364-fc09-44d1-914f-b902a6394a55" TYPE="ext4"
    
  • Luego, otra cosa importante si quieres arrancar otros archivos iso, son las líneas que comienzan con linuxy initrd. los conseguí porabriendo el archivo isocon 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 comenzaban con labely 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 completar 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 menuentryy 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 simplemente copiar.

Respuesta3

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

El error que estás recibiendo:

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

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

Los Live CD no están configurados para buscar su ISO de origen en un LVM; tal vez puedas modificar los scripts de arranque de la imagen para hacerlo, pero no creo que ningún archivo .iso oficial de la distribución actual haga eso. ¿Puedes intentar ponerte en contacto con los desarrolladores de tu distribución favorita para integrarlo?

Respuesta4

Sólo un punto al respecto:

La ISO al arrancar debe montar la ISO, por lo que debe saber cómo encontrarla.

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

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

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

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

información relacionada