Qué es GRUB: guía completa del gestor de arranque GNU

Última actualización: 14 de octubre de 2025
  • GRUB es el gestor de arranque de GNU que selecciona y carga el sistema operativo, compatible con BIOS/UEFI y Multiboot.
  • GRUB 2 aporta módulos, mejor soporte de sistemas de ficheros, búsqueda por UUID y menú/terminal gráficos.
  • La configuración se gestiona vía /etc/default/grub y 40_custom, regenerando con update-grub o grub2-mkconfig.
  • Seguridad: proteger GRUB con contraseña, usar cifrado LUKS y políticas de contraseñas sólidas.

Ilustración general sobre GRUB

Si has instalado GNU/Linux en tu equipo o convives con varios sistemas, seguro que te suena GRUB. Es ese pequeño gran programa que ves justo antes de que el sistema arranque y que te deja escoger qué cargar. Aunque pasa desapercibido, su papel es clave para poner en marcha el sistema operativo y entregar el control al kernel sin dramas.

En el mundo del arranque del PC, GRUB se ha convertido en el estándar de facto por su potencia y flexibilidad. Nació en el entorno del proyecto GNU y, hoy, es el gestor de arranque más extendido en GNU/Linux, compatible con un buen puñado de arquitecturas y sistemas de ficheros, amigable para usuarios novatos y a la vez una navaja suiza para quienes afinan cada detalle del boot.

Qué es GNU GRUB y para qué sirve

GNU GRUB (GNU GRand Unified Bootloader) es un gestor de arranque múltiple: un software que el firmware (BIOS o UEFI) ejecuta al encender el equipo para elegir y cargar un sistema operativo. Permite seleccionar entradas de menú, pasar parámetros al kernel, iniciar desde red, y hasta interactuar con una consola para solucionar fallos puntuales.

Se utiliza principalmente en distribuciones GNU/Linux, aunque también ha sido empleado por otros sistemas como Solaris en x86. En equipos modernos con UEFI, el firmware carga directamente el ejecutable de GRUB ubicado en la partición del sistema EFI (ESP), siempre que esté registrado en NVRAM; en BIOS/MBR, GRUB ocupa sectores iniciales del disco y continúa desde ahí.

Más allá del típico menú, GRUB cumple la Especificación Multiboot, lo que significa que puede arrancar kernels compatibles de forma homogénea. Y cuando el núcleo está en memoria, GRUB le cede el control y su trabajo termina, que no es poco.

Pantalla de opciones de arranque de GRUB

Ficha técnica y datos del proyecto

GRUB forma parte del ecosistema GNU y se distribuye como software libre bajo licencia GNU GPL v3 o posterior. El desarrollo es abierto, con repositorio, seguimiento de errores y sitio web oficiales, y una comunidad muy activa alrededor.

Está escrito principalmente en C y ensamblador, y funciona en varias plataformas: IA-32, x86-64 y PowerPC, entre otras. La rama actual es GRUB 2 (reimplementación del histórico “GRUB Legacy”). La última versión estable publicada es la 2.12 (20 de diciembre de 2023). Si quieres comprobar tu versión local, puedes ejecutar: grub-install --version y verás la cadena correspondiente.

Un poco de historia y evolución

GRUB comenzó como una iniciativa de Erich Stefan Boleyn en el contexto de GNU Hurd y el microkernel Mach. Para resolver la disparidad de métodos de arranque se creó la Especificación Multiboot, que facilitó que gestores y kernels “hablaran el mismo idioma”. En 1999, Gordon Matzigkeit y Yoshinori Okuji impulsaron su adopción como paquete oficial del Proyecto GNU.

Hacia 2002, un grupo de investigadores japoneses inició PUPA (Preliminary Universal Programming Architecture) con el objetivo de reescribir GRUB para hacerlo más robusto y modular. Ese esfuerzo cristalizó en GRUB 2, mientras que la línea anterior pasó a llamarse “GRUB Legacy” (cuya versión 0.97 tuvo su última actualización en 2005). A partir de 2007, varias distribuciones migraron a GRUB 2 y, a finales de 2009, la gran mayoría lo incluían por defecto.

Esquema del proceso de arranque con GRUB

Cómo arranca el equipo con GRUB (BIOS y UEFI)

Al encender el PC, el firmware hace sus comprobaciones (RAM, reloj, dispositivos, orden de arranque) y busca un cargador. En sistemas con BIOS/MBR, el control pasa al Master Boot Record (MBR), 512 bytes iniciales del disco. GRUB se dividía en etapas: Stage 1 (código mínimo en MBR), Stage 1.5 (en sectores posteriores, puente para entender sistemas de archivos) y Stage 2 (menús y funciones avanzadas). En GRUB 2 ya no existe esa “1.5”; ahora hay imágenes específicas como boot.img, core.img y módulos (*.mod) que se combinan según la instalación.

  Cómo actualizar paquetes Ubuntu

En UEFI el flujo es más directo: el firmware ejecuta el binario EFI de GRUB desde la partición EFI, si está correctamente instalado y registrado. En ambos casos, GRUB presenta un menú o una consola, carga el kernel elegido, y le traspasa la ejecución.

Especificación Multiboot y compatibilidad

GRUB implementa Multiboot, lo que permite arrancar kernels compatibles sin “trucos” específicos. Además, para sistemas que no lo soportan (como Windows o DOS), ofrece la carga en cadena (chainloading), apuntando al primer sector de la partición donde residen sus propios cargadores.

Su compatibilidad con sistemas de archivos es enorme: Btrfs, ext2/3/4, FAT12/16/32, exFAT, HFS/HFS+, ISO9660, Nilfs2, NTFS, ReiserFS, ZFS, ROMFS, JFS, XFS, entre otros. También puede leer desde volúmenes LVM y arreglos RAID, un plus cuando la estructura de almacenamiento es compleja.

Funciones y características destacadas

  • Interfaz de menú configurable y terminal interactiva muy flexible, con autocompletado por Tab y atajos estilo Bash.
  • Soporte de LBA (Logical Block Addressing) para superar límites clásicos de la BIOS y leer más allá de 1024 cilindros.
  • Capacidad para arranque por red (PXE/TFTP) y terminales remotos, útil en escenarios de administración centralizada.
  • Descompresión automática y reconocimiento de múltiples formatos ejecutables.
  • Almacenamiento persistente de variables con save_env/load_env y grub-editenv (cuando la plataforma lo permite).
  • Detección de toda la RAM, independencia de geometría de disco, y mecanismos de búsqueda por etiquetas y UUID.
  • Soporte gráfico para menús y fondos, y un diseño modular que mantiene core.img pequeño y carga módulos según necesidad.

Terminología clave: dispositivos, particiones y rutas

GRUB nombra discos y particiones a su manera. El primer disco suele ser (hd0), la primera partición (hd0,1) en GRUB 2 (recuerda: en GRUB 2 la numeración parte de 1; en Legacy empezaba en 0). Para referirse a todo un disco, se omite la partición: (hd0).

Para indicar archivos, se combina el dispositivo con la ruta: (hd0,1)/ruta/al/archivo. También admite blocklists (listas de bloques) cuando hace falta señalar la ubicación exacta en disco de un archivo no visible como tal en el sistema de ficheros, por ejemplo (hd0,1)+1 para el primer sector de una partición, útil con chainloader +1.

El “sistema de archivos raíz” en GRUB no es el mismo “/” de Linux. Es simplemente la partición raíz desde la que GRUB leerá sus ficheros; una vez que el kernel Linux toma el control, define su propio root real y lo demás de GRUB deja de importar.

Interfaces de GRUB

GRUB ofrece tres vistas principales. La más conocida es el menú, con entradas preconfiguradas; puedes moverte con las flechas, arrancar con Enter, editar una entrada con “e”, o abrir la consola con “c”.

El editor de entradas te deja modificar líneas sobre la marcha (agregar con “o/O”, editar con “e”, borrar con “d”) y, si todo cuadra, arrancar con “b”. Es ideal para probar parámetros del kernel sin tocar ficheros.

La consola es el modo más potente: admite autocompletado contextual, atajos de edición, y todos los comandos internos de GRUB para localizar discos, cargar kernel/initrd, o hacer chainloading. Si falta el archivo de configuración o es erróneo, GRUB te lanza aquí para que puedas salir del atasco manualmente.

Mensajes de error habituales

Los errores pueden aparecer en la etapa inicial (más limitados) o al cargar menús y módulos (más descriptivos). A continuación, un compendio de códigos representativos que GRUB puede mostrar, parafraseados para mayor claridad:

  • 1: ruta inválida o no absoluta; 2: tipo de archivo no válido (no fichero regular); 3–4: datos/cabecera corruptos al descomprimir; 5: tabla de particiones dañada o inválida.
  • 6: incompatibilidad entre Stage1/Stage2; 7: no se admite cargar por debajo de 1 MB; 8: se intentó arrancar sin cargar un kernel; 9: fallo de arranque desconocido.
  • 10: características Multiboot no soportadas; 11: dispositivo no reconocido; 12: dispositivo inválido; 13: formato ejecutable no soportado.
  • 14: el sistema de ficheros impide leer el archivo completo; 15: archivo no encontrado; 16: estructura del sistema de archivos inconsistente.
  • 17: no se puede montar la partición seleccionada; 18: cilindro fuera del rango que soporta la BIOS (clásico en discos antiguos); 19: initrd antes que kernel.
  • 20: módulos antes de un kernel Multiboot; 21: disco seleccionado no existe; 22: partición inexistente; 23: error al interpretar un número.
  • 24: acceso a un bloque fuera de la partición; 25: error de lectura de disco; 26: demasiados enlaces simbólicos; 27: comando desconocido.
  • 28: el elemento no cabe en memoria; 29: error de escritura en disco; 30: argumento inválido; 31: fichero no alineado a sectores (ReiserFS, usar notail).
  • 32: se requiere autenticación; 33: dispositivo serie no configurado; 34: sin sectores libres para la Stage 1.5 tras el MBR (conflicto con EZ-BIOS o partición empezando muy al inicio).
  QNodeOS: el primer sistema operativo para redes cuánticas

Comandos básicos de GRUB

En la consola puedes ejecutar órdenes interactivas muy útiles. Por ejemplo, boot arranca lo último cargado (kernel o chainloader), y chainloader <archivo> carga un sector o fichero de encadenado; el atajo típico para un Windows es chainloader +1.

displaymem muestra el uso de memoria según la BIOS, algo práctico si dudas de la RAM detectada. Con initrd <archivo> indicas la imagen de disco RAM inicial necesaria por el kernel.

Para instalar en MBR desde la consola de GRUB Legacy, se empleaba install con las rutas a stage1, stage2 y, opcionalmente, al fichero de configuración. Hoy en GRUB 2, desde el sistema, lo normal es usar grub-install y regenerar el menú con update-grub/grub2-mkconfig.

El comando kernel especifica el binario del núcleo y sus parámetros, por ejemplo: kernel /vmlinuz root=/dev/sda5. Se suele preceder de root (hdX,Y) o rootnoverify para fijar la partición desde la que GRUB leerá.

Archivos de configuración y directivas

En GRUB Legacy el menú residía en /boot/grub/menu.lst o grub.conf, con directivas como color, default, fallback, hiddenmenu, password, timeout, splashimage y bloques title con las órdenes para cada sistema.

Un ejemplo clásico (parafraseado) incluiría una sección Linux con root (hd0,2), kernel con su parámetro root=/…, y boot; y otra para Windows con rootnoverify (hd0,1) y chainloader +1.

En GRUB 2 el fichero generado automáticamente es /boot/grub/grub.cfg. No se recomienda editarlo a mano; en su lugar, se ajusta /etc/default/grub (valores como GRUB_TIMEOUT, GRUB_DEFAULT, etc.) y se añaden entradas personalizadas en /etc/grub.d/40_custom. Luego se ejecuta update-grub o grub2-mkconfig para regenerar el menú.

Diferencias clave entre GRUB Legacy y GRUB 2

  • El fichero de configuración pasó de menu.lst/grub.conf a grub.cfg, con sintaxis y comandos renovados y generación automática mediante grub-mkconfig.
  • La numeración de particiones empieza en 1 en GRUB 2 (en Legacy comenzaba en 0).
  • Persistencia de variables con save_env/load_env en algunas configuraciones.
  • Mejor detección de rutas y búsqueda por UUID/etiquetas; más sistemas de ficheros soportados.
  • Lectura directa desde LVM y RAID.
  • Terminal y menú gráficos, e imágenes reorganizadas: ya no hay Stage 1.5; existen boot.img, core.img y módulos dinámicos (*.mod).

Seguridad y hardening con GRUB

Un gestor de arranque mal protegido es un coladero. Si alguien con acceso físico puede editar parámetros del kernel o lanzar otra entrada, desactiva en la práctica tus medidas de seguridad. Por eso conviene proteger GRUB con contraseñas y aplicar buenas prácticas.

Establece una contraseña robusta para limitar modificaciones de entradas o el acceso a la consola. En GRUB 2, emplea usuarios y contraseñas con grub-mkpasswd-pbkdf2 y configura las reglas correspondientes en los scripts de /etc/grub.d/.

Complementa con cifrado de disco mediante LUKS, de forma que aunque alguien robe el equipo no pueda leer los datos. Asegura también que las políticas de contraseñas del sistema sean estrictas para reducir ataques de fuerza bruta.

Gestiona el historial de logs con cabeza: los que den pistas a un atacante deben minimizarse o centralizarse con controles de acceso; los que ayudan a auditar intentos maliciosos conviene agregarlos y analizarlos en una ubicación segura.

Para detectar otros sistemas instalados y generar entradas automáticamente, instala os-prober. Te ahorrará tiempo y evita errores al recrear el menú.

  iptables en Linux: guía práctica, completa y sin rodeos

Instalación y mantenimiento

Si no instalaste GRUB durante la instalación de tu distro, puedes hacerlo después. En GRUB 2, desde el sistema, ejecuta sudo grub-install /dev/sdX (reemplaza por tu disco) y luego sudo update-grub o sudo grub2-mkconfig -o /boot/grub/grub.cfg. Verás el menú en el próximo arranque.

Desde una consola de GRUB Legacy, el procedimiento clásico es indicar la raíz y ejecutar la instalación: root (hd1,0) seguido de setup (hd1,0) para la primera partición del segundo disco, o setup (hd1) si apuntas al MBR de ese segundo disco.

Editar directamente /boot/grub/grub.cfg no es buena idea en GRUB 2, aunque sea técnicamente posible. La vía recomendada es cambiar /etc/default/grub, usar /etc/grub.d/40_custom para contenidos propios y regenerar.

Preguntas prácticas y atajos útiles

¿Cómo saber cuál es la partición de arranque en /dev/sda? En sistemas BIOS/MBR: sudo fdisk -l /dev/sda (mira el asterisco de “Boot”). En GPT/UEFI: lsblk -o NAME,FSTYPE,PARTTYPE,PARTFLAGS,MOUNTPOINT y busca la partición EFI (FAT32, tipo EF00/flags esp). También sudo efibootmgr -v muestra las entradas de arranque registradas.

¿Cómo obtengo el UUID de una partición? Con blkid o lsblk -f. Por ejemplo: sudo blkid /dev/sda2 devuelve su UUID y otros metadatos.

¿Cómo hago que GRUB 2 espere 10 segundos antes de la entrada por defecto? Ajusta /etc/default/grub con GRUB_TIMEOUT=10 (y, si procede, GRUB_TIMEOUT_STYLE=menu) y ejecuta sudo update-grub o grub2-mkconfig.

¿Comandos en GRUB Legacy para instalar en la primera partición del segundo disco? Abre la consola y ejecuta: root (hd1,0) y luego setup (hd1,0). Si quisieras el MBR, sería setup (hd1).

¿Pasos para cambiar la configuración de GRUB 2? 1) Edita /etc/default/grub (p. ej., GRUB_DEFAULT, GRUB_TIMEOUT), 2) añade entradas en /etc/grub.d/40_custom si las necesitas, 3) regenera con update-grub/grub2-mkconfig, 4) reinicia y prueba.

¿Dónde poner menús personalizados en GRUB 2? En /etc/grub.d/40_custom (o archivos propios en /etc/grub.d/ con permisos adecuados). Nunca edites a mano /boot/grub/grub.cfg salvo emergencia.

¿Dónde se guardaban las entradas en GRUB Legacy? En /boot/grub/menu.lst o grub.conf, según la distribución.

¿Cómo entro en la consola de GRUB desde el menú? Pulsa la tecla “c” en GRUB 2 o Legacy. Para editar una entrada concreta, “e”. Ambos atajos son muy útiles cuando toca diagnosticar sobre la marcha.

Ejemplos de opciones comunes

Selección de arranque por defecto: GRUB_DEFAULT=0 arranca la primera entrada; con GRUB_DEFAULT=saved recuerda la última usada. Tras el cambio, regenera la configuración.

Tiempo de espera: GRUB_TIMEOUT=4 ajusta el retardo del menú; con 0 arranca sin pausa; en algunos escenarios puedes ocultar el menú con GRUB_TIMEOUT_STYLE=hidden para un arranque más limpio.

Actualización del menú: en Debian/Ubuntu y derivadas, sudo update-grub; en otras, sudo grub2-mkconfig -o /boot/grub/grub.cfg. Asegúrate de tener os-prober instalado si quieres detectar otros sistemas automáticamente.

Aunque GRUB también aparece en contextos fuera de GNU/Linux, recuerda que no es un servicio de soporte. Si tu problema es específico de Windows, lo más práctico es acudir a foros dedicados a ese sistema para obtener ayuda focalizada.

GRUB ha pasado de ser “el menú de arranque” a un auténtico entorno previo al sistema, capaz de arrancar múltiples OS, manejar discos complejos y ayudarte a recuperar un sistema con apenas un par de comandos. Con una buena configuración y algo de hardening (contraseñas en GRUB, cifrado LUKS, políticas de claves y logs bien gestionados), tendrás un arranque robusto, flexible y, sobre todo, bajo control.

Bootkit UEFI
Artículo relacionado:
Bootkit UEFI: Bootkitty en Linux y el legado de BlackLotus