Conociendo GRUB en Fedora

0
121
Cuando un ordenador está bajo Linux/GNU el sistema operativo se carga en la memoria con un programa llamado boot loader o gestor de arranque.

El boot loader frequentemente existe en un dispositivo de almacenamiento primario ya sea por ejemplo en un disco duro y tiene el objetivo único de cargar el kernel de linux con todos los archivos necesarios de otros sistema operativos en la memoria.

¿Cómo funciona GRUB?

Al iniciar una computadora, ésta primero debe hacer una pequeña prueba llamada: “Power on Self Test” que no es más que la verificación de todos los componentes en el motherboard. Luego de eso, se entra al boot donde el BIOS le transfiere el control al dispositivo que se tenga como primario y seguido de éste se lee el primer sector denominado Master Boot Record (MBR).

El Master Boot Record es un sector de 512 B que se encarga de almacenar datos importantes del disco duro como la tabla de particiones, el boot loader primario o bien gestor de arranque primario, entre otros.

El MBR lo que hace es buscar la partición activa y una vez encontrada carga su boot loader en la memoria. Entonces es aquí donde viene la magia de GRUB. GRUB reemplaza esa funcionalidad y agrega su propio código.

En pocas palabras, GRUB es una herramienta que permite al usuario final selecionar un sistema operativo distinto que se encuentre instalado en un ordenador.

Para arquitecturas basadas en x86 y x86_64 en Fedora el tipo de boot loader utilizado es GNU GRUB. Aunque existen otros tipos de gestores de arranque como: LILO y SYSLINUX. GNU GRUB proviene del acrónimo GNU GRan Unified Bootloader y está actualmente en su segunda versión.

¿Cuáles son las ventajas que ofrece GRUB en comparación con otros boot loaders?

Existen muchas ventajas por las cuales uno seleccionaría GRUB como su herramienta boot loader. A continuación brindo un compendio.

La principal de todas quizás sea su flexibilidad a la hora de seleccionar los sistemas operativos ya que no hace diferencia a si éstos son propietarios o no. Los usuarios pueden personalizar el subsistema de GRUB utilizando por ejemplo una shell que les permita pasarle parámetros adicionales. Soporte de diversos sistemas de archivos UNIX, NTFS, LBA, en otros. Soporte para distintos formatos ejecutables de kernel. Variedad en las interfaces gráficas que le permiten al usuario cambiar el background de la lista de sistemas operativos a seleccionar. Y más.

¿Qué términos debo conocer para trabajar con GRUB?

En muchas ocasiones sentirás las ganas de cambiar algunas opciones dentro de GRUB y para eso debes conocer la terminología utilizada. Es importante saber cómo GRUB hace referencia a los dispositivos ya sea discos duros o particiones.

Nombre de dispositivos: Para hacer referencia a un dispositivo necesitamos saber la siguiente sintaxis:

(< tipo de dispositivo >< número de dispositivo del bios >,< número de partición >)

El tipo de dispositivo indica si utilizas por ejemplo un disco duro (hd) o bien un diskette (fd). Aunque sinceramente no creo que ya los diskettes se utilicen. Y en menor proporción de uso están los disco de red (nd).

El número de dispositivo del bios hace referencia a exactamente qué disco duro estas utilizando por ejemplo, si tienes varios discos conectados por SATA, SCSI o IDE en el ordenador.
Imagina que necesitas seleccionar un sistema operativo que está instalado en el disco maestro, el número sería 0, si quieres acceder al secundario sería 1 y así te vas.

El número de partición hace referencia el número de partición del dispositivo. A diferencia del número de dispositivo del bios, el número de partición empieza desde 1 y no 0. Recuerda que en un sólo disco puedes tener varias particiones, estas particiones son a las que se hacen referencia.

Asume que tienes dos discos duros y en cada uno tiene tres particiones. Si quisieras acceder a la segunda partición del disco duro maestro tendrías (hd0,2) mientras que se quisieras acceder a la primera partición del disco segundario tendrías: (hd1,1).

Tip:
Si quieres hacer referencia a un solo dispositivo físico sin especificar su partición tan sólo quita la coma y el número de partición.

Archivos de Configuración para Interfaz
El archivo de configuración en GRUB es utilizado para crear la lista de sistemas operativos a seleccionar cuando se está booteando el sistema. Este archivo se encuentra en /boot/grub2/grub.cfg y es automáticamente generado por grub2-mkconfig utilizando plantillas predefinidas en /etc/grub.d y configurado en /etc/default/grub.

El archivo /etc/default/grub es el más importante ya que allí residen toda las directivas a utilizar en GRUB2.

A continuación describiremos algunas de esas directivas:

GRUB_TIMEOUT=5
Indica el tiempo en segundos en el cual aparecerá la pantalla de GRUB para seleccionar el OS.

GRUB_DEFAULT=3
Indica el sistema operativo por defecto a cargar.
El parámetro a recibir es el número de entrada del sistema operativo. Es decir, el número de sistema operativo que carga en la lista. Por ejemplo si tienes Fedora 18 como segunda opción, este parámetro deberá ajustarse a 1. Si la opción es “SAVED” como se verá más adelante entonces se tomará como defecto la última opción de sistema seleccionado.

GRUB_DISABLE_RECOVERY=true
No genera opciones para Recovery Mode.

GRUB_DISABLE_SUBMENU=true
No permite que se tengan submenús.

GRUB_TERMINAL_OUTPUT=console
Selecciona el tipo de terminal a utilizar. Las opciones pueden ser: console, serial, gfxterm, entre otros.

GRUB_THEME=”path”
Selecciona un theme para el GRUB.

GRUB_BACKGROUND
Coloca una imagen como background en el GRUB.

GRUB_SERIAL_COMMAND
Permite activar la comunicación serial a través de una consola.

GRUB_CMDLINE_LINUX
Permite agregar nuevas entradas de menú para el kernel.

Y así hay muchas otras directivas que puedes encontrar en el manual de GNU GRUB.

Para aplicar los cambios al archivo de configuración se utiliza la salida que te envia grub2-mkconfig ya que el los copia hacia el archivo de configuración. Lo puedes hacer con el siguiente comando:
grub2-mkconfig -o /boot/grub2/grub.cfg

Para cambiar el sistema operativo seleccionado por defecto:

Abre el archivo /etc/default/grub y verifica que la siguiente directiva exista:

GRUB_DEFAULT=saved

Aplica nuevamente el comando para copiar la nueva configuración hacia /boot/grub2/grub.cfg. Después de esto si deseas listar todos los sistemas operativos disponibles en la lista ejecuta:

sudo grep -r “menuentry” /boot/grub2/grub.cfg

Asigna el sistema operativo por defecto a seleccionar:
grub2-set-default -v “Fedora, with Linux 3.13.10-200.fc20.x86_64”

Verifica que la configuración se guardó:
grub2-editenv list

Te debería aparecer el siguiente mensaje:
saved_entry=Fedora (3.13.10-200.fc20.x86_64) 20 (Heisenbug)

Indicando que se ha salvado correctamente.

En GRUB también se puede trabajar a través de consola serial. Para habilitarlo solamente agrega a /etc/default/grub:

GRUB_CMDLINE_LINUX=’console=tty0 console=ttyS0,115200n8′
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND=”serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″

En los parámetros del comando GRUB_SERIAL_COMMAND puedes asignar los baudios, unidad serial, cantidad bits a utilizar por cada símbolo, si deseas paridad, y cuántos bits de parada utilizarás.

Guardo los cambios con:

grub2-mkconfig -o /boot/grub2/grub.cfg

Y esto es algo bastante económico en términos de sistemas embebidos. Imagina que un MCU necesite enviar información a un sistema que utiliza linux. Desde GRUB puedes arrancar linux y de allí pasarle parámetros dependiendo de la aplicación lo cual reduciría la implementación de tarjetas de red si en vez de conectarte por grub en serial lo hicieses por ssh.

En este pequeño tutorial se ha explicado el objetivo principal de GRUB, su terminología básica, cómo funciona de manera general, alguna de sus directivas utilizadas para modificar el comportamiento a la hora de mostrar la lista de sistema operativos, también se ha visto cómo colocar un sistema operativo por defecto y además activar la consola serial para aplicaciones que sean de bajo costo ecónomico y que realmente fuese imposible carga un sistema sin esta herramienta.

Espero que les haya servidor esta entrada y si tienen alguna pregunta me la hagan saber. Comparte el artículo en las redes sociales y difunde el conocimiento.

Inspirado en:

Compartir
Es una chica geek, ingeniera en el área de electrónica y telecomunicaciones. Sus áreas de interés son los sistemas embebidos, microcontrolandores, procesamiendo digital de señales, y programación.