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_path
define 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/home
es el volumen lógico montado, así que lo dejo fuera y comienzo la ruta con/erik/Downloads/…
La línea que comienza con
search
tiene una extraña variable alfanumérica (llamada UUID) al final, que comienza con6340
. Obtuve este número del comandosudo 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
linux
yinitrd
. los conseguí porabriendo el archivo isoconfile-roller
(gui para extraer archivos comprimidos) omc
(administrador de archivos de consola).Fedora y similares:Allí vas al directorio
/isolinux
, donde encontrarás un archivo llamadoisolinux.cfg
. Allí encontré algunas líneas que comenzaban conlabel
y debajo de ellas las siguientes líneas importanteskernel 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 llamadogrub.cfg
. Aquí encontrará algunas líneas que comienzan conmenuentry
y debajo de ellas las siguientes líneas importanteslinux /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.