Me gustaría intentar configurar una computadora para que tenga varias instalaciones de Linux en el mismo sistema de archivos. Por ejemplo, el sistema de ficheros tendría 3 carpetas: /Ubuntu_Precise
, /Ubuntu_Oneiric
, y /Ubuntu_Natty
.
(Sé que puedes hacer esto con BTRFS y subvolúmenes, pero me gustaría usar EXT4 para la velocidad).
Una vez configuré varias instalaciones de diferentes distribuciones usando BTRFS, y al hacer que eso funcione, sé que Grub funciona bien al arrancar la imagen vmlinuz e initrd desde rutas 'no estándar'. Pero cuando estaba haciendo lo de BTRFS, estaba el rootflags=subvol=@<subvolume_name>
que le decía al núcleo que montara ese subvolumen como / en el sistema de archivos. ¿Hay algún argumento de que podría pasar el kernel que lo obligaría a montar una subcarpeta en una partición como / y luego iniciar?
Creo que para las otras partes, estoy bastante cerca. Sé cómo especificar un montaje de enlace /etc/fstab
. Además, desde que configuré mi sistema con múltiples instalaciones de Linux en subvolúmenes BTRFS, estoy acostumbrado a instalar una distribución en una VM y luego migrarla usando rsync, así que no estoy demasiado preocupado por lo que tendría que hacer para obtener la configuración correcta, solo estoy tratando de averiguar cuál sería la configuración correcta. Una vez que sepa eso, debería poder migrar a las subcarpetas y editar archivos con bastante facilidad.
Ya sé sobre virtualización y particiones, pero eso no es lo que estoy buscando. La computadora de destino no tiene suficiente potencia para realizar la virtualización y las particiones no comparten espacio libre. Estoy buscando configurar un sistema que dual / triple / quad / etc inicie las distribuciones de Linux, pero que lo haga con un sistema de archivos, de modo que no haya ningún caso de "¡Tengo espacio libre, pero está en la partición incorrecta!"
Si alguien tiene sugerencias sobre cómo editar mi pregunta o su título para que quede más claro, soy todo oídos.
fuente
Respuestas:
Respuesta corta: hasta donde yo sé, no existe una solución de trabajo lista para usar para sus requisitos específicos. Tendrá que ajustar cada initramfs de cada distribución para satisfacer sus necesidades específicas.
Respuesta larga: sí, es posible. Hoy en día, la mayoría de las distribuciones de Linux usan un initramfs que el gestor de arranque cargará en la memoria y luego el núcleo desempacará. Allí se ejecutará
/sbin/init
el responsable de configurar el espacio de usuario temprano (ejecutar udev, cargar módulos, iniciar plymouth, solicitar una frase de contraseña criptográfica, configurar la red para montajes de red, ... lo que sea). Como puede ejecutar sus propios scripts y evaluar parámetros de arranque personalizados.Ejemplo para Debian
Si está utilizando Debian (debería ser lo mismo con Ubuntu), debería poder colocar un script en el
/etc/initramfs-tools/scripts/init-bottom/
que se ejecutará antes de iniciar init. Para obtener más información sobre el script, los diferentes directorios y el diseño tienen un vistazo a man initramfs-tools . Tendrá que ajustarrootmnt
y agregar el directorio de destino.Script de muestra (no probado) que debe instalarse como
/etc/initramfs-tools/scripts/local-bottom/00-myroot
o/usr/share/initramfs-tools/scripts/init-top/00-myroot
:La idea es ajustar
rootmnt
cuál se usa en elinit
script initramfs para iniciar / ejecutar el init real. Como el dispositivo raíz ya está montado en lainit-bootom
etapa, solo puede ajustar / modificar el directorio de destino.Para usar este script simplemente agregue un nuevo parámetro de arranque, copie el script, hágalo ejecutable, regenere sus initramfs y agregue un parámetro de arranque para su distribución de Linux, por ejemplo
rootdir=/Ubuntu_Precise
.fuente
mount /dev/rootdevice /mountpoint
después de que el sistema se esté ejecutandoAquí hay dos formas que funcionan en ubuntu bionic (y posiblemente en otros lugares). no tengo suficiente representante para comentar, pero bionic: / usr / share / initramfs-tools / init busca en / etc / fstab / usr justo después de llamar a mountroot y antes de llamar a los scripts * -bottom, por lo que agrega un init- La secuencia de comandos inferior (como se sugiere en otra respuesta aquí) es "demasiado tarde". en cambio, recomiendo estos:
fuente
Arrancar diferentes Linux sin jugar con la tabla de particiones es interesante para diferentes propósitos, una solución alternativa a un sistema de archivos compartido es usar volúmenes de bucle, aquí los pocos cambios necesarios suponiendo que tenga un / archivo de volumen / debian en el sistema de archivos / dev / sdb1 (Estoy usando GNU / Debian sid / inestable para los sistemas operativos principales y de bucle).
Los argumentos definidos en grub como línea de comando de linux se establecen en env por initrd / init, por lo que:
el bucle permite montar el volumen sobre "sí mismo", el flujo de script predeterminado hace un
mount /dev/sdb1 /root
opcionalmente solo volvemos a montar el / dev / sdb1 como rw si era ro y siempre agregamos amount -o loop /root/debian /root
.También necesita precargar algún módulo en el initram (luego no olvide ejecutar update-initramfs)
No sé cuánto usar el rendimiento de la influencia del bucle o desperdiciar recursos, me pregunto si montar ext4 sobre ext4 duplica las probabilidades de una falla del sistema de archivos, pero supongo que se podría hacer un ajuste. Tal vez hay una mejor manera de usar el bucle, menos hack, si hay, por favor avíseme porque no lo he encontrado.
fuente
Esta no es una respuesta, pero quiero aclarar algún punto sobre la respuesta y los comentarios de Ulrich (no puedo comentar más arriba).
La solución que Ulrich propone "puede" funcionar (aún no se ha probado) pero luego obtendrá un sistema de archivos no desmontable . Como solución alternativa (en mi humilde opinión), puede montar el fs como rw antes del chrooting ( como se sugiere aquí ) pero tenga cuidado con los scripts de inicio rotos. Supongo que esta solución tiene más efectos secundarios (como fs rotos que intentan volver a montar ro y fallan).
Estoy usando el kernel 3.2 con ext4 y montar un desarrollador ya montado dentro del chroot todavía da EBUSY como comentó psusi.
fuente