GRUB 2

Rafa Morales 11 Septiembre 2013
14min
0
Linux

GRUB 2 es mucho más configurable que GRUB Legacy, permitiendo muchas más características y sistemas de archivos específicos que cargarán el módulo determinado cuando les sea necesario.

 

/boot/grub/grub.cfg

En esta versión solo encontramos un fichero de configuración que recoge todas las opciones y sistemas disponibles en el cargador de arranque. Aunque este fichero no se modificará directamente como ocurría en GRUB Legacy, ya que este fichero se genera automáticamente en base a los verdaderos ficheros de configuración. Sí nos podrá salir para comprobar que las opciones de GRUB se han escrito en su configuración correctamente.

En este fichero encontraremos las diferentes secciones de posibles sistemas operativos a arrancar separadas por líneas del estilo (### BEGIN).

También GRUB 2 posee una serie de opciones globales de configuración y una sección de opciones por cada uno de los sistemas operativos a poder arrancar.

 

/etc/default/grub

En este fichero se encuentran las opciones globales de configuración de GRUB 2. Algunas de las más importantes son:

 

GRUB_DEFAULT=0

Indica el sistema operativo que se iniciará si el usuario no elige otra opción. Se comienza a enumerar a partir desde 0 con el mismo orden que se encuentran los sistemas escritos en /boot/grub/grub.cfg. Si escribimos saved, se elegirá el sistema operativo que el usuario eligió al arrancar la última vez.

 

GRUB_SAVEDEFAULT=true

Con true se configurará automáticamente el último sistema operativo arrancado por el usuario. Esta opción no funciona con sistemas LVM y RAID.

 

GRUB_HIDDEN_TIMEOUT=0

Indica el número de segundos que el GRUB espera pero sin mostrarse en pantalla. Es útil cuando sólo tenemos un sistema operativo instalado en el disco. Si queremos que se muestre el menú de GRUB debemos de comentarlo con #.

 

GRUB_HIDDEN_TIMEOUT_QUIET=true

Con true la cuenta atrás no es mostrada, pero con false sí.

 

GRUB_TIMEOUT=10

Sólo funciona si GRUB_HIDDEN_TIMEOUT está comentado, es decir, si se muestra el menú de GRUB. En este caso se indica los segundos que el menú está esperando la opción del usuario. Con -1 el tiempo de espera es infinito.

 

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian

Muestra el nombre de la distribución en el título del menú de cada entrada de arranque de sistema operativo.

 

GRUB_CMDLINE_LINUX=””

Lo que se añada en esta línea se incluirá automáticamente al final de la línea linux en el arranque del sistema operativo tanto en modo normal como recovery (en GRUB Legacy esta línea se llamaba kernel). Podemos utilizar por ejemplo quiet, splash y text, que han sido explicados anteriormente en GRUB Legacy. Pero sólo a las entradas que GRUB configura automáticamente, no a las creadas por el usuario a mano.

 

GRUB_CMDLINE_LINUX_DEFAULT=””

Lo que se añada en esta línea se incluirá automáticamente al final de la línea linux en el arranque del sistema operativo pero sólo en modo normal (en GRUB Legacy esta línea se llamaba kernel). Pero sólo a las entradas que GRUB configura automáticamente, no a las creadas por el usuario a mano.

 

#GRUB_TERMINAL=console

Descomentar para deshabilitar el arranque de la interfaz gráfica (grub-pc only).

 

#GRUB_GFXMODE=640x480

Descomentar para cambiar la resolución del menú de GRUB.

 

/etc/grub.d/

En este directorio se encuentran los ficheros que crean automáticamente las entradas para cada uno de los sistemas operativos que queramos arrancar desde el gestor.

El nombre de los ficheros comienza por un número que les da un cierto orden, el cual sirve para que cada uno de los sistemas operativos disponibles se creen en el fichero /boot/grub/grub.cfg en ese mismo orden.

El fichero 40_custom nos servirá para que nosotros creemos entradas personalizadas en nuestro menú. Podemos incluir estas entradas directamente en él, o podemos copiar ese archivo con otro nombre y otro número en función de dónde queramos colocar la nueva entrada en el menú.

cp /etc/grub.d/40_custom /etc/grub.d/09_milinux

En este caso la nueva entrada se colocará delante de todas las existentes en el sistema. Debemos darle permisos de ejecución para que se incluya al actualizar la configuración del gestor de arranque.

chmod 755 /etc/grub.d/09_milinux

En este fichero respetaremos las líneas que ya se encuentran escritas en él, y al final del mismo comenzaremos a escribir las opciones de arranque del nuevo sistema. A continuación tenemos un ejemplo concreto. Debemos tener la precaución de no dejar espacios en blanco al final de las líneas.

menuentry "My Default Kernel" {
set root=(hd0,1)
echo 'Cargando el kernel...'
linux /boot/vmlinuz-2.6.31-11-generic root=/dev/sda1 ro quiet splash
echo 'Cargando el initrd...'
initrd /boot/initrd.img-2.6.31-11-generic
}

 

A continuación explicamos cada una de las anteriores líneas, que son las mínimas necesarias para especificar un nuevo sistema de arranque.

menuentry "My Default Kernel" {

Especifica el título a mostrar en el menú, en GRUB Legacy era title.

set root=(hd0,1)

Indica el disco y la partición donde se buscará el sistema a arrancar. Los discos comienzan a contar desde 0, pero las particiones empiezan a contar desde 1, a diferencia de GRUB Legacy, que empezaba a contar desde 0. Una gran diferencia también es que se pueden incluir discos RAID como arranque (md0).

linux /boot/vmlinuz-2.6.31-11-generic root=/dev/sda1 ro quiet splash

Indica la ruta absoluta del kernel así como los parámetros que se le pasan. En GRUB Legacy correponde con la opción kernel. Como podemos observar hay que incluir la ruta desde el directorio raiz root=/dev/sda1 la cual es obligatoria definirla. Los parámetros más comunes son:

  • ro: Indica que el sistema de archivos se monte en modo de sólo-lectura, aunque posteriormente eso se modifique una vez arrancado.

  • root=/dev/sda1: Indica qué sistema se montará como directorio raíz /.

  • splash: Para que se muestre la barra progresiva al inicio del sistema operativo en lugar del modo texto.

  • quiet: Para arrancar en modo silencioso y que no se muestren las salidas de los scripts de arranque.

  • text: Para arrancar en modo texto con tty1 sin la interfaz gráfica inicializada.

  • single: Arranca en el runlevel 1 (monousuario).

initrd /boot/initrd.img-2.6.31-11-generic

Indica la ruta absoluta de la imagen de disco RAM inicial. Como podemos observar hay que incluir la ruta desde el directorio raiz.

No olvidar los caracteres { y } para encerrar todas las opciones del sistema.

 

update-grub

Como hemos dicho, en esta versión no se realizan directamente los cambios sobre el fichero final de configuración de GRUB, ya que estos se generan automáticamente desde los ficheros comentados anteriormente. Para regenerar de nuevo el fichero /boot/grub/grub.cfg con las nuevas modificaciones debemos ejecutar este comando.

update-grub

 

grub-install

Con este comando podemos instalar el gestor de arranque en el MBR del disco especificado.

grub-install /dev/sda
grub-install '(hd0)'

Recuerda que no es necesario reinstalar el gestor de arranque cada vez que realicemos un cambio en las opciones de inicio de los distintos sistemas, solamente cuando nos encontremos ante un disco nuevo que aún no tenga el gestor instalado en su MBR., hallamos redimensionado particiones o movido el directorio raíz a otra partición.

Si el fichero /boot/device.map no incluye todos nuestros discos, podemos forzar durante la instalación del gestor de arranque a que los escanee todos de nuevo, para ello usamos la siguiente opción

grub-install --recheck /dev/sda

Si queremos instalar el gestor de arranque en un disco que no es el que tenemos arrancado actualmente con el sistema, pero lo tenemos montado, ejecutaremos previamente el comando chroot para cambiar en el sistema el directorio raíz.

mount /dev/sdb1 /mnt/disco
chroot /mnt/disco
grub-install /dev/sdb

 

Editando el menú durante el arranque

Nosotros podemos editar las opciones de arranque de GRUB antes de que comience a arrancar el sistema. Simplemente tenemos que pulsar la tecla E una vez hallamos seleccionado la línea del menú que queramos editar.

Si tenemos el menú de GRUB oculto podemos dejar pulsada la tecla SHIFT para que se muestre, o si no funcionara, la tecla ESC repetidas veces.

Entraremos en una ventana que nos mostrará todas las opciones al igual que el fichero de configuración de GRUB. Podemos editarlas a nuestro gusto desplazándonos con el cursor, y sabiendo que los cambios que se produzcan no serán permanentes en ningún caso. Podemos utilizar la tecla TAB para completar los comandos que estemos escribiendo.

Una vez hallamos terminado pulsaremos Ctrl+X o F10 para arrancar con esos nuevos parámetros. O la tecla ESC si queremos descartar los cambios realizados y volver al menú principal.

 

Línea de comandos y Modo de recuperación

GRUB proporciona varios métodos de recuperación tras un fallo en el arranque, GRUB llevará al usuario de nuevo al menú, a la línea de comandos de GRUB o a un mensaje de Busybox o Initramfs. Detallamos las posibles razones de cada uno de ellos:

  • GRUB 2 Menú: Si un arranque del menú es fallido, se mostrará el mensaje de error y se volverá automáticamente al menú para elegir otra opción.

  • grub> prompt: Se produce cuando no se puede encontrar el fichero grub.cfg.

  • grub rescue> prompt: Se produce cuando no es posible encontrar el directorio grub.

  • Busybox> o Initramfs>: Se produce cuando comienza el proceso de arranque y en mitad del mismo se produce cualquier error, normalmente relacionado con el sistema de ficheros.

Nosotros podemos entrar directamente en esta línea de comandos sin tener que esperar a que de un fallo nuestro sistema, para ello pulsaremos la tecla C.

Ya entremos de una manera o de otra, los comandos que podemos utilizar en grub> y grub rescue> son los mismos en su gran mayoría, para Busybox> o Initramfs> o son diferentes. Podemos utilizar la tecla TAB para completar los comandos. Podemos acceder a los archivos de un determinado disco utilizando la nomenclatura ls (hdX,Y)/boot/.

A continuación enumeramos algunos de los comandos más importantes, aunque podéis encontrar la lista completa en la siguiente dirección:

https://help.ubuntu.com/community/Grub2

 

help

Muestra la lista de comandos disponibles.

 

ls

Muestra la lista de discos y particiones detectados en el sistema.

 

cat

Muestra el contenido de un archivo.

 

set

Muestra las variables y sus valores asociados que están presentes en la configuración.

 

set root=(hd0,1)

Un ejemplo de modificación de variables sería el anterior, con el que elegiríamos la partición en la que se encuentra el sistema.

 

reboot

Reinicia la máquina.

 

lsmod

Muestra los módulos que se encuentran cargados.

 

insmod

Carga el módulo especificado.

 

loopback loop (hd0,2)/iso/my.iso

Monta un archivo como dispositivo.

 

linux

Carga el kernel que se especifique a continuación con las opciones necesarias.

 

initrd

Carga la imagen del disco RAM inicial que se especifique a continuación.

 

boot

Arranca el sistema con los parámetros antes indicados.

 

Splash Images

Podemos configurar de una manera muy fácil imágenes de fondo en nuestro menú GRUB, lo complicado será encontrar los contrastes de colores correctos para que las letras se puedan leer correctamente.

Lo primero que debemos de hacer el instalar el siguiente paquete con imágenes de prueba:

apt-get install grub2-splashimages

En la siguiente ruta encontraremos diferentes imágenes que podemos utilizar:

/usr/share/images/grub/

Según la versión de GRUB y la distribución en la que se use el procedimiento puede variar. A partir de Ubuntu 11.04 el procedimiento será únicamente colocar la imagen que deseemos (en formato .jpg, .tga o .png) en la siguiente carpeta:

/boot/grub/

Al ejecutar update-grub se revisará automáticamente esa carpeta y se colocará la imagen que se encuentre de fondo.

Si no queremos colocar la imagen en esa carpeta, la otra opción es indicar la ruta absoluta de la imagen en el fichero de configuración global de GRUB /etc/default/grub:

GRUB_BACKGROUND=”/usr/share/images/grub/image.tga”

Recuerda que en ambos casos debemos actualizar el fichero de configuración de Grub:

update-grub

 

Cómo recuperar Grub 2 desde su línea de comandos

En el caso de GRUB deje de funcionar, podemos realizar los siguientes pasos para recuperar su instalación, siempre que nos muestre al menos su consola de recuperación.

grub rescue>

Primero accede a la lista de particiones disponibles:

ls

Este comando mostrará las particiones disponibles, por ejemplo:

(hd0) (hd0,1) (hd1) (hd1,1) (hd1,5) (hd2) (hd2,1) (hd3) (hd3,1)

Ahora hay que descubrir qué partición contiene el directorio /boot/grub con todos los datos necesarios para arrancar. Para ello, bastará con ir haciendo un "ls" en cada una de las particiones, ojo ¡no te olvides de la barra “/” al final!:

ls (hd1,1)/

Una vez descubierta la partición en la que se encuentra el directorio boot, añadimos el prefijo correspondiente para que GRUB sepa dónde se encuentra para los siguientes pasos, si por ejemplo está en la partición (hd1,1):

set prefix=(hd1,1)/boot/grub

Cargamos los módulos necesarios:

insmod (hd1,1)/boot/grub/linux.mod

Configura la partición root:

set root=(hd1,1)

Carga la imagen del kernel Linux de la versión que corresponda en tu sistema, puedes volver a usar el comando “ls” en el directorio “boot” para averiguarlo, por ejemplo:

linux /boot/vmlinuz-2.6.32-23-generic root=/dev/sdb1

La nomenclatura del punto de montaje sdb1, viene dada por el nombre de la partición: (hd1,1) es sdb1, del mismo modo que (hd0,2) sería sda2.

A continuación cargamos la imagen RAM del kernel:

initrd /boot/initrd.img

Procedemos a arrancar el sistema:

boot

Una vez dentro del sistema, es recomendable reinstalar GRUB en el mismo disco de donde hemos arrancado para evitar este error en el próximo inicio:

grub-install /dev/sdb
update-grub