manual básico de GRUB2 (desentrañando al monstruo)

fundamentos GNU/Linux fun-gnu


grubGRUB en su versión 2, es hoy en día el gestor de arranque más extendido en el mundo GNU/Linux. En los años 90 fue LILO (LInux LOader), después GRUB (en su versión 1) Grand Unified Boot Loader. Ahora cuando hablemos de GRUB nos referiremos siempre a la versión 2 (para referirse a GRUB 1 se suele emplear el término «GRUB Legacy», antiguo GRUB).

GRUB es un cargador de arranque (bootloader), esto es, el firmware del ordenador lee el cargador de arranque desde el disco duro y lo ejecuta, lo que nos permite elegir qué sistema operativo de los instalados en el máquina arrancar. GRUB se encarga de cargar el kernel linux en memoria y lo empieza a ejecutar. A partir de ahí, será ya el núcleo de linux quien tome el control del equipo.

GRUB es capaz de funcionar con firmware BIOS y EFI (UEFI). En este pequeño manual básico de GRUB nos vamos a limitar a explicar el caso más típico:

GRUB2 —> firmware BIOS —> instalado en el MBR (Master Boot Record). Tabla de particiones de disco MBR.

No nos ocuparemos aquí por lo tanto de instalaciones o configuraciones bajo UEFI, ni del caso de particiones GPT (tabla de particiones GUID).

Todas las grandes distros linux tendrán un paquete llamado grub o grub2. En ARCH y DEBIAN se llama grub, en OpenSuse se llama grub2. Lógicamente una instalación por defecto de la distro instalará GRUB, pero si queremos instalar manualmente, ya se sabe: sudo pacman -S grub (ARCH), sudo apt install grub (DEBIAN, UBUNTU), sudo zypper in grub2 (OPENSUSE), etc.

GRUB se instala en el directorio /boot/grub/ donde podemos encontrar el principal archivo de GRUB, el famoso grub.cfg

Es importante saber, que será ese archivo el que se lea desde el MBR cuando cargue GRUB, y serán las entradas que contenga las que se puedan arrancar. Pero grub.cfg no se debe de editar directamente, pues es un archivo que se crea de manera dinámica leyendo otros archivos de configuración cuando se genera.

Cuando tenemos un único sistema operativo en el ordenador es todo muy sencillo, pues es ese O.S. quien gobierna GRUB y lee su propio /boot/grub/grub.cfg y ya está. Pero, como suele suceder en linuxeros avanzados que coinstalan varias distros linux en el mismo equipo, la cuestión puede ser más complicada. Yo tengo un equipo que puede arrancar 7 sistemas operativos distintos, luego ¿cuál gobierna GRUB?, ¿a cuál apunta el MBR?, ¿qué grub.cfg de los 7 O.S. lee GRUB cuando arranca?. Es a esto básicamente a lo que quiero responder aquí.

La primera respuesta es que será al última distro linux instalada (que instale GRUB) la que «colonizará» el MBR para arrancar su propio grub.cfg. Y por tanto, si esa instalación de GRUB ha detectado otros sistema operativos anteriores, los incluirá en su grub.cfg y podrás arrancarlos. Si no es así, no podrás (en principio).

Para la mayoría de usuarios GRUB es un poco complicado, pues se suele estar acostumbrado a tener una sola distro en la máquina, o como mucho, una distro Linux más un windows. Y como todo funciona, pues nadie se plantea mirar las tripas de GRUB. A mí me pasaba igual, pero ese portátil que tengo con 7 distros (5 fijas y un par de ellas que voy re-instalando casi constantemente), me llevaron a investigar un poco el intrincado GRUB.

Esto es lo básico.

Cuando antes hemos hablado de instalar el paquete grub, nos referimos simplemente a tener GRUB disponible en el sistema, pero para poder usarlo hay que instalarlo en el MBR de manera explícita, así:

sudo grub-install /dev/sda

esto instalará grub en el sector de arranque del disco duro principal, normalmente es sda, si es sdb, o sdc, pues el que sea.

Con esto, lo que he conseguido es que sea la distro desde la que lo he hecho la que controle GRUB.

Podemos ver ahora el siguiente archivo: /etc/default/grub en el que podemos establecer cosas como el tiempo de espera al arranque

GRUB_TIMEOUT=»3″

en este caso espera 3 segundos, o

GRUB_THEME=»/boot/grub/themes/Archxion/theme.txt»

donde le damos la ruta de un tema para embellecer nuestro GRUB. En este caso del famoso tema Archxion, que se puede instalar desde AUR en ARCH.

Bien, ya está instalado GRUB, pero ¿cómo puedo actualizarlo si por ejemplo he instalado otra distro linux o por ejemplo deseo añadir una entrada personalizada como podría ser un ANDROID con el que jugar en mi PC?. Pues veamos.

Aunque ya hemos visto que GRUB tiene su propio directorio en /boot/ y que además hay un archivo /etc/default/grub donde está la configuración básica, el núcleo verdadero de GRUB se encuentra en otro sitio:

/etc/grub.d/

aquí están los scripts de configuración de GRUB, los que se pueden editar y que crearán el /boot/grub/grub.cfg que será el que se lea al arranque. Estos scripts son algo complejos, sólo voy a comentar dos de ellos:

/etc/grub.d/30_os-prober

este es un script muy importante que es el que se encarga de buscar otros sistemas operativos cuando se configura GRUB. Si todo va bien, los detecta, y les crea una entrada en nuestro grub.cfg para poderlos elegir al arranque.

/etc/grub.d/40_custom

en este archivo podemos incluir entradas personalizadas en GRUB, como por ejemplo arrancar una partición con ANDROID como podemos ver en esta entrada: instalar ANDROID en PC y arrancar desde GRUB2

Bien, pues para terminar queda lo más importante. Una vez configurado nuestro /etc/default/grub (donde por ejemplo podemos personalizar el tema de GRUB) y una vez añadidas entradas en nuestro /etc/grub.d/40_custom (si lo deseamos) ya podemos generar nuestro nuevo /boot/grub/grub.cfg para que incluya todos los cambios. Así:

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

veremos que grub-mkconfig lo que hace es generar un nuevo grub.cfg que contenga todas las modificaciones que hayamos hecho, así como detectar los demás sistemas operativos que contenga la máquina y que sean arrancables desde GRUB.

En alguna distros también funciona el comando:

sudo update-grub

que tan sólo es la llamada a un script que lo que realmente hace es sudo grub-mkconfig -o /boot/grub/grub.cfg

Pues esto es todo. Espero haberte ayudado un poco a entender el intrincado mundo de GRUB2.

Nota.- para profundizar más en GRUB nada mejor que la excelente wiki de ARCH:
https://wiki.archlinux.org/index.php/GRUB_%28Espa%C3%B1ol%29

grub.d

3 opiniones en “manual básico de GRUB2 (desentrañando al monstruo)”

  1. Hola, está muy bien el manual, pero no encuentro respuesta a un problema que se me presenta. Si tengo solo una distribución instalada en la máquina, ¿Cómo puedo hacer para que aparezca el menú del grub al principio? Me interesa por las herramientas de reparación y mantenimiento. Gracias

    1. Si tienes una distro instalada debería ser desde ella desde donde se instaló Grub y arrancar. Si por algún motivo se ha estropeado el arranque de grub deberás repararlo con alguna herramienta tipo grub rescue. Pon «grub rescue» en San Google y hay mucha info sobre eso.
      Un saludo.

Deja un comentario