Tengo Linux (Debian Jessie) instalado en un disco duro. Drive - sda1
, ext4fs y sda2
- swap
Tengo una /chroot
carpeta Hay instalado otro sistema, en la /chroot
carpeta.
Pregunta:
¿Cómo decirle al administrador de arranque que arranque no el sistema primario (principal, Debian Jessie), sino el sistema en / chroot ? Probablemente, cambio /menu.lst
y /chroot/etc/fstab
? ( vmlinuz root=/dev/sda1/chroot
?)
O otra variante de la pregunta: ¿es posible tener Linux instalado no en el directorio raíz de la partición, sino en la carpeta? ( /another_linux/bin
` /another_linux/home
` /another_linux/etc
, ...)
vmlinuz root=/dev/sda1/chroot
no funciona Probablemente se podría simular esto con un método similar al que se usainitrd
. Ver, por ejemplo, aquí . Se monta/new_root
como se describe allí, luego en lugar decd /new_root
hacercd /new_root/chroot
y continuar.Respuestas:
Esto no lo puede hacer el gestor de arranque o el kernel. El parámetro de la
root
opción del núcleo , como en,root=/dev/sda1
parece un nombre de ruta estándar de Unix, pero dichos nombres de ruta se interpretan de acuerdo con el sistema de archivos actualmente montado. En el momento en queroot
se interpreta la opción, no hay sistemas de archivos montados. Bueno, casi ninguno. En el momento de la inicialización del núcleo hay una instancia de unramfs
sistema de archivos mínimo llamadorootfs
montado como la raíz del proceso inicial en ejecuciónstart_kernel()
. La interpretación real delroot
parámetro de opción se realiza en una rutina llamadaname_to_dev_t()
. Una de las sintaxis compatibles es el/dev/name
formato, donde el nombre se interpreta haciendo un montaje temporal delsysfs
sistema de archivos en elrootfs
root, y buscando una entrada de dispositivo de bloque que coincida con el nombre debajo/sys/block
. Este proceso se explica con más detalle aquí .La configuración, tal como se describe, deberá realizarse iniciando primero en un entorno mínimo, como el proporcionado por un
initrd
, monte el sistema de archivos raíz real desde/dev/sda1
un punto de montaje temporal, por ejemplo/mnt/rootfs
, luego cambie el directorio raíz para/mnt/rootfs/chroot
usarpivot_root(8)
.Esto es algo similar a cómo se configuran los sistemas de archivos raíz para LinuX Containers ( LXC ). LXC es una implementación de virtualización a nivel de sistema operativo para Linux. La virtualización a nivel de sistema operativo se usa comúnmente en entornos de alojamiento virtual como una alternativa ligera a la virtualización completa administrada por un hipervisor. En la virtualización a nivel del sistema operativo, un solo núcleo del sistema operativo se comparte entre varias instancias aisladas de espacio de usuario. Cada instancia, a menudo llamada contenedor, cárcel, Servidor Privado Virtual (VPE) o Entorno Virtual (VE), es esencialmente una instalación de sistema operativo separada alojada en un directorio propio en el sistema host.
fuente
Encontré el mismo problema y terminé escribiendo esto para que funcione sin problemas en diferentes sistemas (debian, ubuntu actualmente):
Ejecute el
make_chroot_initrd
script para crear una nueva imagen initrd habilitada para chroot a partir de la existente:La nueva imagen será exactamente la misma, excepto que ahora puede manejar un
chroot=
parámetro de arranque.Con grub2 como gestor de arranque puede agregar una entrada a
/boot/grub/grub.cfg
:(o tal vez mejor
/etc/grub.d/40_custom
)(cambie archivos / particiones para que coincidan con los suyos)
Instalación en todo el sistema
Una vez que esté satisfecho con él, puede hacer que los cambios sean permanentes
(hasta que se actualice el paquete initramfs-tools).
En el sistema chrooteado:
De ahora en adelante, la imagen initrd regular admitirá el arranque chroot.
No es necesario usar un initrd.chroot separado que puede no estar sincronizado con él.
Ver boot_chroot para más detalles.
fuente
Sí, puedes hacer el truco usando subvolúmenes Btrfs .
Primero necesita convertir ext4 a btrfs como se describe aquí .
Convierta su chroot a subvilume si aún no lo está:
Ahora tiene un subvolumen llamado ruta / a / chroot . Puedes consultarlo con
sudo btrfs subvol list /
Ahora puede crear un registro de arranque a subvolumen en grub. Simplemente agregue
rootflags=subvol=path/to/chroot
a la cadena de carga del kernel de Linux en el elemento del menú grub o use esto para sondear automáticamente.fuente