Documentación
Cómo: Chroot en un sistema roto a través de CD/ISO en vivo o sistema Linux alternativo
En ocasiones, es posible que necesite rescatar un servidor TurnKey roto/inbootable. Tal vez has tenido un fallo de hardware, o tal vez has roto algo inadvertidamente, o tal vez has instalado una actualización de buggy que ha roto cosas?
A menudo estos problemas se pueden fijar "arrastrando" en el sistema roto de un sistema funcional (Linux), luego tomando los pasos necesarios para resolver el problema (reinstalar grub, reinstalar un núcleo, reconstruir un initramfs, etc. Obviamente los pasos para arreglar un sistema roto dependerán de lo que realmente haya roto. Si no estás seguro, entonces probablemente será mejor que empieces un nuevo hilo en el foros (requiere cuenta de usuario gratuita para iniciar un nuevo hilo) para que podamos ayudar a diagnosticar el problema.
En este doc, sólo le aconsejaré hasta el punto en el que entras en el chroot, y no entrará en los detalles de cómo resolver cualquier problema específico (aunque, si/cuando obtengo un oportunidad, quizás escribiré páginas de doc para algunos de los problemas más comunes?!).
Nota: Esta guía supone que se ha iniciado sesión con la cuenta de usuario raíz. Si no, la mayoría (si no todos) los comandos que se ejecutan fuera del chroot pueden necesitar ser prefabricados por 'sudo'. Si entras en el chroot vía sudo, entonces no se debe exigir una vez dentro del chroot.
Así que primero, un poco de fondo, si prefieres saltar directamente hacia la configuración de chrootPor favor, siéntete libre.
¿Qué es una "chroot"
Según Wikipedia, a chroot:
cambia el directorio raíz aparente para el proceso de funcionamiento actual y sus hijos. Un programa que se ejecuta en un entorno tan modificado no puede nombrar (y por lo tanto normalmente no puede acceder) archivos fuera del árbol de directorio designado.
Como usuario de Linux, hay 2 tipos de chroot que puedes encontrar. Lo que llamo un chroot "estándar" (lo que cubre esta página doc), entonces también hay una "caja de raíz".
El propósito de una cárcel de chroot para bloquear a un usuario o proceso dentro de una parte determinada de un árbol de directorios. un programa puede ser "arraigado" en su propio directorio (Postfix se establece como este por ejemplo), sin acceso al resto del sistema de archivos. O un usuario limitado puede ser "chrooted" en su directorio de inicio, por lo que pueden utilizar (por ejemplo) SFTP, pero no pueden navegar por todo el sistema de archivos.
Un chroot "estándar" puede ser utilizado para investigar y posiblemente reparar un sistema inbootable. También se utiliza comúnmente para construir nuevos sistemas Linux. Por ejemplo, TurnKey utiliza un chroot "estándar" (on TKLDevPara construir el TurnKey appliances, ese es el tipo de chroot que documentaré aquí.
Configurar un chroot
Preparación
Lo primero que hay que hacer es asegurar que el sistema de archivos del sistema roto sea accesible desde el sistema de trabajo. En el caso de una instalación de metal desnudo o un VM, la forma más fácil de hacer esto es a menudo para arrancar de un CD/USB/ISO en vivo. Como regla general, es generalmente mejor utilizar el mismo sistema operativo que el sistema roto. En el caso de TurnKey, puede utilizar B. (o cualquier otro servidor; sólo Core es el más pequeño) de la misma versión principal. E.g. v15.0 Core está bien para usar para fijar cualquier v15.x appliance. Si esa no es una opción, un sistema Debian Live también es una buena opción. En el peor de los casos, podrías escaparte con cualquier distro Linux relativamente reciente, aunque TurnKey (o Debian) de una versión coincidente es preferible.
Lo que sea que hagas DO NOT ¡Instalar sobre la parte superior de tu sistema roto! ¡Eso hará que sea inalcanzable!
Alternativamente, podría mover el disco (físico o virtual) a otra máquina (trabajando) (con TurnKey/Debian/etc como encima de correr). Para un servidor AWS que es también esencialmente lo que necesitará hacer (es decir, desvincular el volumen primario del sistema roto y reajustar a un sistema de trabajo).
Encontrar el volumen adecuado para montar
Después de haber adjuntado el volumen primario roto a un sistema de trabajo, el siguiente paso es montarlo. Para montarlo, necesitará asegurarse de que tiene una ubicación de montaje limpia y también tendrá que resolver qué disco/volumen/partition(s) necesita montar.
Una manera fácil de asegurar que usted tiene una ubicación limpia de montaje para utilizar, es para crearlo! Así que algo como esto:
mkdir /rescue
Asegurarse de que usted encuentra el disco correcto / volumen / partición(s) puede ser un poco más difícil, pero una herramienta que puede utilizar es fdisk. Para ver todos los volúmenes adjuntos, ejecutar:
fdisk -l
Aquí está la salida en un servidor AWS en el que estoy trabajando actualmente. Tiene una unidad secundaria (el volumen raíz de otro servidor) adjunta como /dev/xvdf, el volumen raíz predeterminado (es decir, el volumen raíz predeterminado). el volumen raíz del servidor de trabajo) es /dev/xvda. Puede ser diferente para usted (aunque si usted está en AWS es probable que sea el mismo). Aquí está la salida completa:
root@core ~# fdisk -l Disk /dev/xvda: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 6183BC26-31B1-41F2-9AB9-319B7C4A85B0 Device Start End Sectors Size Type /dev/xvda1 2048 6143 4096 2M BIOS boot /dev/xvda2 6144 20969471 20963328 10G Linux filesystem Disk /dev/xvdf: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 0029AB38-4BE5-4009-B163-9A7B4F597FE4 Device Start End Sectors Size Type /dev/xvdf1 2048 6143 4096 2M BIOS boot /dev/xvdf2 6144 20969471 20963328 10G Linux filesystem
Si no está seguro cuál volumen es el que, comprobar qué volúmenes ya están montados. Haga eso de esta manera:
mount | grep ^/dev
Eso comprobará todas las líneas de la salida de montaje que comienza con /dev. En mi caso, esto confirma lo que ya sé, el voume que ya he montado es /dev/xvda:
root@core ~# mount | grep ^/dev /dev/xvda2 on / type ext4 (rw,relatime,data=ordered) /dev/xvda2 on /tmp type ext4 (rw,relatime,data=ordered) /dev/xvda2 on /var/cache/tklbam type ext4 (rw,relatime,data=ordered)
Montaje del sistema roto listo para chroot
Así que una vez que hayas trabajado qué partición necesitarás montarlo. Eso es bastante simple. En mi caso, la partición que necesito montar es /dev/xvdf2 (es decir, la segunda partición en /dev/xvf). Si usted mira arriba, a mi salida de fdisk, verá que /dev/xvdf1 es el tipo de "Bota BIOS" y /dev/xvdf2 es "sistema de archivos Linux". Para montar eso es tan fácil como esto:
mount /dev/xvdf2 /rescue
Si ahora revisas /rescue (es decir, es /rescue), deberías ver algo así:
root@core ~# ls -l /rescue total 92 drwxr-xr-x 2 root root 4096 Apr 16 02:49 bin drwxr-xr-x 3 root root 4096 Apr 16 02:50 boot drwxr-xr-x 5 root root 4096 Oct 3 2018 dev drwxr-xr-x 100 root root 4096 Apr 16 02:50 etc drwxr-xr-x 3 root root 4096 Oct 3 2018 home lrwxrwxrwx 1 root root 29 Oct 3 2018 initrd.img -> boot/initrd.img-4.9.0-8-amd64 lrwxrwxrwx 1 root root 29 Oct 3 2018 initrd.img.old -> boot/initrd.img-4.9.0-8-amd64 drwxr-xr-x 18 root root 4096 Oct 3 2018 lib drwxr-xr-x 2 root root 4096 Mar 11 2018 lib64 drwx------ 2 root root 16384 Oct 3 2018 lost+found drwxr-xr-x 2 root root 4096 Mar 11 2018 media drwxr-xr-x 4 root root 4096 Apr 16 02:49 mnt drwxr-xr-x 2 root root 4096 Mar 11 2018 opt drwxr-xr-x 2 root root 4096 Feb 23 2018 proc drwx------ 5 root root 4096 Oct 3 2018 root drwxr-xr-x 12 root root 4096 Oct 3 2018 run drwxr-xr-x 2 root root 4096 Apr 16 02:49 sbin drwxr-xr-x 2 root root 4096 Mar 11 2018 srv drwxr-xr-x 2 root root 4096 Feb 12 2017 sys drwxrwxrwt 7 root root 4096 Apr 16 02:51 tmp drwxr-xr-x 10 root root 4096 Mar 11 2018 usr drwxr-xr-x 13 root root 4096 Oct 3 2018 var lrwxrwxrwx 1 root root 26 Oct 3 2018 vmlinuz -> boot/vmlinuz-4.9.0-8-amd64 lrwxrwxrwx 1 root root 26 Oct 3 2018 vmlinuz.old -> boot/vmlinuz-4.9.0-8-amd64
Obviamente las fechas serán diferentes, pero de lo contrario, que muestra que el sistema está montado como se espera. Todas las construcciones actuales de TurnKey incluyen la partición /boot, aunque en algunas versiones anteriores, si la instalación utiliza LVM, entonces la partición /boot puede necesitar ser montada por separado. En ese caso, después de que el sistema operativo principal se monta, montar el directorio de arranque. Es decir, algo como esto (ajuste para el traje):
mount /dev/sdXN /rescue/boot
Donde /dev/sdXN es la partición donde reside la información de arranque.
Pero espere que haya más...! Una vez que el sistema operativo principal ha sido montado, entonces también necesita montar algunos directorios especiales del host para que el chroot funcione correctamente. Principalmente estos son /dev, /proc y /sys. /dev/pts también vale la pena montar. En mi experiencia, usted puede escapar sin montar eso, pero a menudo obtendrá errores, por lo que vale la pena montar que para reducir el ruido.
mount -t proc proc /rescue/proc mount -t sysfs sys /rescue/sys mount -o bind /dev /rescue/dev mount -t devpts pts /rescue/dev/pts
Chrooting in
Ahora simplemente necesitas entrar, eso es lo que se hace así:
chroot /rescue
Simple como eso...! :)
Ahora haga lo que necesite para arreglar su sistema. Una vez que esté feliz (o sólo listo para probar) entonces puede salir de la raíz como esta:
exit
Limpieza después
Si necesita detener el servidor para eliminar la unidad rota, entonces no se requiere limpieza. Todos los componentes deben ser auto inexplorados como parte del proceso de apagado. Si no necesita detener el servidor, reiniciar es la forma más fácil de limpiar el chroot. Sin embargo, si no detienes el servidor que estás usando, o por alguna otra razón te gustaría deshacer el config de chroot, entonces después de haber salido de la chroot, sólo tienes que backtrack en los comandos anteriores. Es decir, utilizar umount en lugar de montaje, y desmontarlos en el orden inverso que fueron montados.
umount /rescue/dev/pts umount /rescue/dev umount /rescue/sys umount /rescue/proc
Si montaste una partición de arranque separada, desmonta la siguiente. Es decir, 'umount /rescue/boot'. Entonces finalmente, el volumen principal:
umount /rescue