• Arrancar una distro de Debian desde la consola de Grub

    ConsolaGrubEn éste artículo trataba el tema de la reparación de Grub usando un LiveCD de Ubuntu, En el caso de hoy vamos a suponer que no tenemos acceso a un Live CD, pero aún así necesitamos bootear una distro de Linux que ya esté instalada en el ordenador (o en alguna unidad externa) pero que al iniciarla nos deje en la consola de recuperación de grub y que no pase de allí.

    Que nuestro sistema acabe en la consola de Grub ocurre por varias razones. Entre ellas puede estar la de que grub no encuentre el archivo /boot/grub/grub.cfg o que no pueda leerlo; o puede que si que lo lea pero que éste tenga entradas incorrectas. Sea por la razón que sea acabaremos en el mismo lugar: la consola con un bonito grub> esperando nuestras órdenes.

    Vamos a tratar dos supuestos: en el supuesto A Grub arranca en modo gráfico (donde nos muestra las distintas entradas o los distintos SO para arrancar) Vemos las entradas, pero ninguna bootea Linux correctamente. En el supuesto B Grub arranca directamente en su consola poniéndonos grub> y quedando listo para recibir órdenes.

    SUPUESTO A

    Este supuesto normalmente ocure porque seguramente hemos modificado incorrectamente el archivo /boot/grub/grub.cfg. Sea por esa razón o por cualquier otra vamos a ir directamente a la consola tocando la letra C. Lo que nos lleva al supuesto B.

    SUPUESTO B

    Estamos en la consola. Vemos que Grub está listo para recibir órdenes porque nos pone grub> y está a la espera. Bien, lo primero que necesitamos es saber las particiones que Grub ve. Lo hacemos con:

    ls

    Nos mostrará entonces una o varias particiones dependiendo de como tengamos particionado el/los disco/s. Por ejemplo, nos muestra:

    (hd0) (hd0,msdos2) (hd0,msdos2) (hd0,msdos1)

    El problema es que no nos acordamos en que partición tenemos instalado Linux, porque podría ser la partición 1 o la 2. Lo normal es que nos acordemos. Pero si no es así existe un truco que nos permitirá saberlo. y no es otro que usar el comando ls nuevamente pero esta vez para que nos muestre el contenido de la partición que le digamos. Dado que ya sabemos como es la estructura de directorios de un sistema linux, será fácil identificarla. Entonces, como sospechamos que puede estar instalado en la segunda partición le metemos el siguiente comando a la consola:

    ls (hd0,2)/

    Y nos muestra los siguientes resultados:

    lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/ lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old initrd.img initrd.img.old

    Nuestras sospechas eran ciertas! Ahora ya sabemos que tenemos Linux instalado en la segunda partición de nuestro disco por lo que lo que vamos a hacer a continuación es proceder a meter los comandos Grub para arrancarlo. Pero primero necesitamos saber exactamente el nombre de los archivos tanto del kernel como de la imagen de arranque que tenemos instalados en esa partición. Como sabemos que en las distribuciones modernas esos archivos están en /boot/ lo que vamos a hacer hacer es listar el contenido de esa carpeta a ver si podemos verlos. Lo hacemos con:

    ls (hd0,2)/boot/

    Lo que nos da como resultado:

    initrd.img-3.2.0-4-486 initrd.img-3.2.0-4-686-pae vmlinuz-3.2.0-4-486 vmlinuz-3.2.0-4-686-pae

    Genial, hemos encontrado 2 kernels distintos! Vamos a bootear el 486:

    set prefix=(hd0,2)/boot/grub                   # La carpeta grub en su partición correspondiente
    set root=(hd0,2)                               # En esta partición grub buscará el kernel y la imagen initrd
    insmod linux                                   # Insertar el módulo para cargar kernels e imágenes initrd
    linux /boot/vmlinuz-3.2.0-4-486 root=/dev/sda2 # Indicar el camino hacia el kernel y la partición donde está montada la raíz /
    initrd /boot/initrd.img-3.2.0-4-486            # Indicar el camino hacia la imagen initrd
    boot                                           # Arrancar

    Listo! Peero si no nos inicia, tendremos revisar los comandos que hemos metido. Lo mismo hemos confundido un guión con un punto. O un punto con una coma, etc. Si hemos escrito todo correctamente, lo normal es que ya estemos en el escritorio 🙂

    NOTA: Si vas a ejecutar estos pasos para arrancar un Debian cuya carpeta /boot esté siendo montada desde una partición independiente, tienes que hacerlo de esta forma:

    set prefix=(hd0,1)/grub                   # La carpeta grub en su partición correspondiente
    set root=(hd0,1)                          # En esta partición grub buscará el kernel y la imagen initrd
    insmod linux                              # Insertar el módulo para cargar kernels e imágenes initrd
    linux /vmlinuz-3.2.0-4-486 root=/dev/sda2 # Indicar el camino hacia el kernel y la partición donde está montada la raíz /
    initrd /initrd.img-3.2.0-4-486            # Indicar el camino hacia la imagen initrd
    boot                                      # Arrancar

    .