Reparación del sistema: HowTo chroot

21
14806

Muchas veces, sobre todo cuando se anda trasteando, nos hemos visto en el aprieto de no poder acceder al sistema para repararlo, pero la solución es fácil: usar el comando chroot desde un LiveCD/RepairCD cualquiera.

En muchos sitios (foros, blogs…) se menciona este comando y se da un “copy/paste” del código, pero mi intención con este post es explicar un poco esos pasos, para poder hacer un buen uso de esta herramienta, con conocimiento de causa.


Introducción

El comando chroot es conocido como CHangeROOT, es decir, un comando que te permite cambiar la raíz del sistema sobre la que estás trabajando. En otra palabras: si estás desde un LiveCD y quieres que todo lo que estés trabajando sobre la consola tenga efecto en el sistema instalado, previamente debes hacer uso de chroot.

El problema está en que no basta con usar chroot tal cual, antes debemos montar adecuadamente determinadas particiones.

HOW TO

Primero necesitamos iniciar alguna terminal, ya sea desde otro sistema instalado (en otra partición/disco) o desde un LiveCD. IMPORTANTE: la arquitectura del LiveCD debe coincidir con la del sistema a reparar (32 o 64 bits).
Una vez estemos en la terminal empezaremos identificando nuestras particiones:
fdisk -l

  • Con este comando listaremos todas nuestras particiones/discos. Debemos identificar cuál es la partición objetivo, donde está instalado nuestro sistema a reparar, a partir de ahora lo llamaremos sistema roto.

Para este ejemplo consideraremos que nuestro sistema roto está en /dev/sda1 .

Pasamos a montar el sistema. Primero crearemos la carpeta donde vamos a trabajar y posteriormente montamos la partición donde se encuentra nuestro sistema roto en dicha carpeta
mkdir /mnt/my_linux
mount /dev/sda1 /mnt/my_linux

Si tenéis la carpeta /home o /var o cualquier otra en otra partición, deberíais montarla/s de la siguiente manera:
mount /dev/sda2 /mnt/my_linux/var

  • NOTA: he tomado como ejemplo la partición /dev/sda2 para la carpeta /var, que cada uno ajuste el código a sus características.

Normalmente con esto bastaría si simplemente se necesita editar archivos a mano, pero si queremos ejecutar algunos comandos que configuran el sistema, nos hace falta montar determinadas carpetas especiales del sistema: /dev, /proc/sys.
mount -t proc proc /mnt/my_linux/proc
mount -t sysfs sys /mnt/my_linux/sys
mount -o bind /dev /mnt/my_linux/dev

  • Con la opción -t le decimos a mount el tipo de “filesystem” que queremos montar. Es necesario especificarlo por la naturaleza especial de las carpetas /proc y /sys.
  • Con la opción -o especificamos las opciones de mount. La opción bind sirve para “linkear”. En UNIX todos los dispositivos hardware son accesibles a través de la carpeta /dev, por eso debemos montar nuestro actual /dev en la carpeta donde ahora se encuentra nuestro sistema roto. Al ya estar montada esta carpeta, solo es necesario decirle a mount dónde está originalmente montada.

Se hace de esta forma para que chroot tenga acceso a estas carpetas como si se tratasen del sistema roto, aunque deben ser del sistema actual (ej: la sesión del LiveCD) ya que guardan relación con el estado del sistema, los procesos y el hardware.

Ahora llega el momento de poder usar chroot:
chroot /mnt/my_linux/ /bin/bash

  • Al comando se le pasan como argumentos la ruta de la nueva raíz “/” (que en nuestro caso es /mnt/my_linux) y la consola que se desea utilizar (en este caso hemos optado por la archiconocida bash, encontrada en /bin/bash). Si no especificamos la consola nos encontraremos ante un intérprete de órdenes un poco arcaico (no rellena al pulsar el tabulador, etc).

Ahora ya podemos usar la consola como si tuviesemos la sesión de root iniciada en nuestro sistema roto (editar archivos, revisar scripts, instalar/desinstalar paquetes…). ¡OJO!, para que los cambios realizados surtan efecto, hay que desmontar el sistema de ficheros después de salir de chroot, mirad el ejemplo de abajo.

Más información en https://wiki.archlinux.org/index.php/Change_Root (lectura más que recomendada).

Ejemplo de uso: restauración de GRUB2

Uno de los usos más extendidos de chroot es como herramienta para poder reparar el GRUB. Ya que si se nos rompe el grub, es prácticamente imposible bootear nuestro sistema para poder arreglarlo.

AVISO: este pequeño tutorial es un mero ejemplo, funciona en varias distribuciones derivadas de Debian, Ubuntu y openSUSE entre otras. Aún así revisen la documentación propia de vuestra distribución, ya que en muchas no se encuentra el comando update-grub.
# NOTA: estos comandos se ejecutan una vez dentro de chroot.update-grub
grub-install /dev/sda

  • Con update-grub actualizamos el menu de entrada de GRUB2, añadiendo así las posibles entradas que falten. Posteriormente reinstalamos GRUB en nuestro disco, ya que ha sido dañado.

En este caso he tomado /dev/sda como el disco en donde tenemos nuestro sistema, esto debéis adaptarlo a vuestro caso.

Nuestro GRUB ya debería estar reparado, asi que debemos salir de chroot, desmontar el sistema de ficheros (IMPORTANTE) y reiniciar para que los cambios surtan efecto. Si se nos olvida desmontar el sistema de ficheros, es posible que al reiniciar éstos no se desmonten correctamente y por lo tanto algunos cambios no tendrían efecto.
# salimos de chrootexit
# desmontamos el sistema de ficheros y reiniciamosumount /mnt/my_linux/dev
umount /mnt/my_linux/sys
umount /mnt/my_linux/proc
umount /mnt/my_linux
reboot

Y esto es todo. Espero que lo disfruten y que les sirva de utilidad. ¡Un saludo!

21 COMENTARIOS

  1. Han usado alguno de ustedes Chakra Benz? Si es asi, podrian decirme si
    es facil para el usuario comun? Yo uso SolydK que es bien sencillo pero
    tengo entendido que Chakra es puro KDE y me interesa.

    • Sí, chakra está muy bien y más o menos facilito, la cosa es que para instalar/desinstalar paquetes has de hacerlo con la consola, ya que aún siguen trabajando en un administrador de paquetes gráficos. Pruébalo porque merece la pena. Usa el administrador de paquetes pacman, heredado de Archlinux, pero ¡ojo!, no comparte repositorios con arch y NO es compatible con ellos. Si quieres aprender más de pacman échale un ojo a la wiki de arch https://wiki.archlinux.org/index.php/Pacman_%28Espa%C3%B1ol%29

  2. espero que este post lo visiten muchos, despues se arrancan la cabeza reinstalando por cualquier cosa cuando con un chroot podes reparar el sistema casi siempre, el chroot te habilita a un monton de posibilidades, entre ellas instalar Gentoo xD jajja

  3. lindo, gracias… nunca le di bola porque algunas live-cd para reparacion me parece que lo levantan por defecto, pero ahora esta clarismo, gracias otra vez.

  4. Si tan solo hubiera hubiera existido este topic unas semanas a tras, resulta que tuve un problema con mi sistema y leía y leía y en todas partes encontraba chroot y blablabla pero a mi no me funcionaba partiendo esa recomendación del live que sea igual que tu sistema, muy importante pq uso x64, lo otro de montar las particiones de sistema,porque en mi caso cuando estaba aplicando chroot y montando tiraba un comando y simplemente no me reconocía el comando.

    Este topic se ira a mis archivos de “recopilacion de info”

    • Exacto!.. ..es todo lo necesario..incluso para ayudar a alguien con su W$ que decidió no arrancar..

      Tengo siempre conmigo un pendrive de 1gb con la live de Arch..y chroot es todo lo necesario para que bajo cualquier problema, en 10 min tenés todo en orden sin alarmarse.. 😉

    • Hola, fijate que tengo un problema con centos, me envia kernel panic etc. Y no he podido solucionarlo, tengo mi web y base de datos alli., no se que más hacer.

  5. Buen post, había escuchado de pasada algo de chroot pero no sabía muy bien como se usaba, claro que nunca me había hecho falta y por eso no había leído algo en concreto. Ahora con tu post explicado muy claramente se como se usa por si se da el caso.

    Muchas gracias y por cierto, viva Led Zeppelin jeje.

  6. gracias, finalmente sali de la pesadilla grub rescue

    de hecho segui todos los pasos excepto umount /mnt/my_linux, porque me decia que estaba ocupado, y lo fuser -km, pero ni eso, y rebotee…

    espero no sea importante….

    de nuevo gracias…
    un saludo

  7. Aunque el articulo ya tiene un par de años quiero agradecer al autor su generosidad al compartir es gran articulo porque este fin de semana me salvo la vida. Involuntariamente me cargue un servidor instalando un paquete y al reiniciar no cargaba. Despues de tres dias intentando solucionarlo y leyendo diferentes articulos, consegui llegar por casualidad aqui y pude finalmente reinstalar grub y arreglar el servidor.

    Muchas gracias!!!

  8. Hola que tal ya se que hace años de este post, esta genial gracias por compartirlo. Y tenia una duda, en mi caso dañe el sistema y también los drivers de red, así que seguí los pasos pero no me permite descargar paquetes, hay alguna forma de enlazar la red del live con la terminal

    • No entiendo muy bien tu problema… Cuando inicias sesión con el LiveCD, el kernel que se carga es el del LiveCD, por lo tanto deberías poder configurar una conexión a internet perfectamente. Una vez conseguida la conexión, trata de hacer el chroot a ver si la sigues manteniendo, si no, es posible que tengas que configurarla de nuevo, pero el kernel dañado no debería afectar a la sesión de chroot.
      Si no especificas más poco te puedo decir…

Dejar una respuesta