GRUB (Grand Unified Bootloader) es el programa encargado de cargar el kernel del sistema operativo en la memoria y transferirle el control. Sin un gestor de arranque funcional, el sistema simplemente no arranca.
13.1. Introducción: La importancia del gestor de arranque
Por eso, para un administrador de sistemas es crítico saber cómo configurar GRUB, cómo repararlo en caso de fallo y cómo adaptarlo a diferentes escenarios (dual boot, parámetros del kernel, recuperación).
En el examen LFCS se espera que puedas:
- Modificar la configuración de GRUB, añadir opciones de arranque y actualizar su menú.
- Reinstalar o reparar GRUB tras un fallo o una instalación incorrecta.
- Identificar las diferencias entre el arranque BIOS (Legacy) y UEFI.
- Acceder al modo de rescate y solucionar problemas desde un entorno chroot.
A lo largo del capítulo nos centraremos en GRUB2, la versión que usan todas las distribuciones modernas. GRUB Legacy (versión 0.9x) está obsoleto y no será tratado.
13.2. El proceso de arranque en pocas palabras
- Firmware (BIOS o UEFI) : ejecuta el POST (Power-On Self Test) y busca un dispositivo de arranque.
- Carga del GRUB en sistemas BIOS, el MBR o GPT cargan la imagen
boot.img(instalada en los primeros sectores del disco), que a su vez cargacore.img. Este último lee/boot/gruby presenta el menú. - Carga del GRUB en sistemas UEFI, el firmware busca en la partición del sistema EFI (ESP) un archivo
.efi(normalmentegrubx64.efi). GRUB se ejecuta desde allí y carga su configuración. - Selección del kernel: GRUB lee
/boot/grub/grub.cfgy presenta un menú (si hay más de un kernel). Tras elegir una entrada, GRUB carga el kernel y el initramfs en memoria. - Inicio del kernel: El kernel se descomprime, monta el initramfs como sistema de archivos raíz temporal y ejecuta el proceso
init(systemd o SysVinit).
El fallo en cualquiera de estas etapas impide el arranque. Aprenderás a diagnosticar y reparar cada una.
13.3. ¿Qué diferencias existen entre BIOS y UEFI?
Es vital distinguir el modo de arranque porque la instalación y reparación de GRUB es distinta.
| Característica | BIOS (Legacy) | UEFI |
|---|---|---|
| Tabla de particiones recomendada | MBR (msdos) | GPT |
| Partición especial | No, GRUB se instala en el MBR o en el sector de arranque de una partición | Partición del sistema EFI (ESP), tipo ef00 en GPT, formateada en FAT32 |
| Archivo de arranque | boot.img en el MBR + core.img en los sectores posteriores | grubx64.efi (o shim) en la ESP, ruta por defecto /EFI/<distro>/grubx64.efi |
| Instalación de GRUB | grub-install /dev/sda (disco, no partición) | grub-install --target=x86_64-efi --efi-directory=/boot/efi (punto de montaje de la ESP) |
| Configuración generada | /boot/grub/grub.cfg | Igual, pero suele montarse la ESP en /boot/efi |
| Arranque seguro (Secure Boot) | No aplica | Si está activo, GRUB debe estar firmado; se usa shim como cargador intermedio |
Si quieres comprobar el modo de arranque actual:
[ -d /sys/firmware/efi ] && echo "UEFI" || echo "BIOS"
13.4. Estructura de archivos de GRUB2
/boot/grub/grub.cfg: archivo de configuración principal generado automáticamente. No se edita a mano (se regenera con herramientas comogrub-mkconfig)./etc/default/grub: archivo de configuración del usuario para modificar el comportamiento general de GRUB. Es el que debes editar./etc/grub.d/: directorio con scripts quegrub-mkconfigejecuta para construirgrub.cfg. El orden numérico de los scripts determina el orden de las secciones (00_header, 10_linux, 30_os-prober, 40_custom, etc.)./boot/grub/x86_64-efi/o/boot/grub/i386-pc/: módulos de GRUB específicos de la plataforma.- Partición ESP (UEFI): montada normalmente en
/boot/efi, contiene el directorioEFI/con los cargadores.efi.
13.5. ¿Cómo configurar GRUB mediante /etc/default/grub?
Las variables más importantes que puedes definir en este archivo son:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
GRUB_DISABLE_RECOVERY="true"
GRUB_DISABLE_OS_PROBER="false"
GRUB_TERMINAL="console"
GRUB_GFXPAYLOAD_LINUX="keep"
GRUB_DEFAULT: entrada por defecto (0 = primera entrada). Puede ser un número, el nombre exacto de la entrada ("Ubuntu, with Linux 5.15.0-91-generic") osaved(recuerda la última elegida).GRUB_TIMEOUT: segundos que espera antes de arrancar la entrada por defecto. Con-1espera indefinidamente hasta que el usuario presione Enter.GRUB_CMDLINE_LINUX_DEFAULT: parámetros que se añaden al kernel para arranques normales. Ejemplos:quiet(reduce mensajes),splash(pantalla de carga),nomodeset(fallback de video),selinux=1oenforcing=0.GRUB_CMDLINE_LINUX: parámetros que se añaden siempre, incluso en modo rescate.GRUB_DISABLE_RECOVERY: si se pone atrue, no se generan entradas de modo recuperación en el menú.GRUB_DISABLE_OS_PROBER: si estrue, no se buscan otros sistemas operativos (Windows, otras distros). Útil para acelerar la regeneración.GRUB_TERMINALyGRUB_GFXPAYLOAD_LINUXcontrolan la salida gráfica.
13.5.1. Ejemplo de personalización
Editar /etc/default/grub:
sudo nano /etc/default/grub
Cambiar:
GRUB_TIMEOUT=3
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash mitigations=off"
GRUB_DISABLE_RECOVERY="true"
13.5.2. Generar la nueva configuración
Luego de cualquier modificación, hay que regenerar /boot/grub/grub.cfg:
- En Debian/Ubuntu y derivados:
sudo update-grub - En RHEL/CentOS/Fedora/openSUSE (y genérico):
sudo grub2-mkconfig -o /boot/grub/grub.cfg - (en sistemas BIOS; en UEFI con
/boot/efimontado es lo mismo, GRUB sabe dónde está).
En algunas distribuciones, el comando es grub-mkconfig. A veces el fichero de salida es /boot/grub2/grub.cfg. Verifica con:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL 7
Después de ejecutar, puedes inspeccionar el resultado con less /boot/grub/grub.cfg.
13.6. Proteger GRUB con contraseña
Puedes evitar que usuarios no autorizados modifiquen los parámetros de arranque o accedan al modo recuperación estableciendo un usuario y contraseña en GRUB.
- Genera el hash de la contraseña:
grub-mkpasswd-pbkdf2
Introduce dos veces la contraseña, copia el hash generado.
- Edita
/etc/grub.d/40_custom(o crea un script en/etc/grub.d/, pero lo más limpio es usar el archivo de configuración principal/etc/grub.d/01_userssi existe; en su defecto, edita/etc/grub.d/00_headercon las siguientes líneas antes de la sección### BEGIN /etc/grub.d/00_header ###? Mejor sigue el estándar:
Crea un archivo en /etc/grub.d/ por ejemplo 01_password:
#!/bin/sh
cat << EOF
set superusers="admin"
password_pbkdf2 admin <hash_aqui>
EOF
O bien añade al final de /etc/grub.d/40_custom. Luego hazlo ejecutable: chmod +x /etc/grub.d/01_password.
- Regenera GRUB.
Ahora, para editar cualquier entrada en el menú o acceder a la línea de comandos de GRUB (tecla e o c), se pedirá el usuario y contraseña.
Para que solo pida contraseña al modificar, pero permita arrancar las entradas sin contraseña, se puede combinar con --users en las entradas de menú. Es más avanzado pero no imprescindible para LFCS.
13.7. Añadir entradas personalizadas al menú
Puedes crear entradas manuales en /etc/grub.d/40_custom. Por ejemplo, para arrancar una ISO o un kernel específico:
menuentry "Mi kernel 5.15" {
set root=(hd0,msdos1)
linux /boot/vmlinuz-5.15.0 root=/dev/sda1 ro quiet
initrd /boot/initrd.img-5.15.0
}
Luego de añadir el bloque, regenera GRUB.
13.8. Reinstalar o reparar GRUB
13.8.1. Desde un sistema en funcionamiento
Si el sistema arranca, reinstalar GRUB es sencillo.
En BIOS:
sudo grub-install /dev/sda # disco, no partición
sudo update-grub
O en UEFI (suponiendo ESP montada en /boot/efi):
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
sudo update-grub
El parámetro --bootloader-id asigna un nombre a la carpeta en la ESP (por defecto GRUB). En distribuciones como Ubuntu se usa ubuntu.
13.8.2. Desde un sistema roto (arrancando con un Live CD/USB)
Si GRUB se ha dañado y el sistema no arranca, la reparación se hace desde un entorno chroot.
- Arranca con un Live USB de la misma distribución (o una similar).
- Identifica las particiones:
sudo fdisk -l
lsblk -f
- Monta la partición raíz (
/) y las necesarias:
Supongamos que la raíz está en /dev/sda2 y la ESP en /dev/sda1. En sudo mount /dev/sda2 /mnt monta la ESP (en UEFI): sudo mount /dev/sda1 /mnt/boot/efi (o crea el directorio si no existe). Luego monta los sistemas de archivos virtuales:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
- Haz chroot:
sudo chroot /mnt
- Ahora dentro del chroot, reinstala GRUB:
En BIOS: grub-install /dev/sda
En UEFI: grub-install --target=x86_64-efi --efi-directory=/boot/efi
Luego update-grub o grub2-mkconfig -o /boot/grub/grub.cfg
- Sal del chroot (
exit), desmonta ordenadamente (sudo umount -R /mnt) y reinicia.
13.8.3. Reconstruir el initramfs si es necesario
Si además de GRUB el initramfs está dañado, dentro del chroot ejecuta:
mkinitcpio -p linux # Arch
dracut --force # RHEL/Fedora
update-initramfs -u # Debian/Ubuntu
13.8.4. Reparar el sector de arranque (BIOS)
En sistemas BIOS, si el MBR está corrupto y no se puede ni siquiera iniciar GRUB, puedes escribir un nuevo MBR manteniendo la tabla de particiones (con dd o install-mbr), pero normalmente grub-install ya lo reconstruye.
Si quieres regenerar solo el MBR sin modificar la tabla de particiones:
dd if=/usr/lib/grub/i386-pc/boot.img of=/dev/sda bs=446 count=1
Aunque es más seguro usar el comando grub-install.
13.9. Uso de la línea de comandos de GRUB para arrancar manualmente
Cuando GRUB muestra su consola (presionando c en el menú), puedes arrancar manualmente el sistema. Esto es extremadamente útil si el archivo grub.cfg está dañado o falta.
La sintaxis básica:
grub> set root=(hd0,msdos1) # partición que contiene /boot (o la raíz si /boot no está separado)
grub> linux /boot/vmlinuz-5.15.0-91-generic root=/dev/sda2
grub> initrd /boot/initrd.img-5.15.0-91-generic
grub> boot
En UEFI, la designación de disco es distinta: (hd0,gpt1).
Para listar discos y particiones: ls
Para ver el contenido de una partición: ls (hd0,msdos1)/
Para identificar UUID: search --no-floppy --fs-uuid --set=root <UUID> y luego linux /vmlinuz... root=UUID=...
Practicar esto puede salvar tu sistema en el examen si el arranque automático falla.
13.10. Parámetros del kernel útiles para solución de problemas
Añadir a la línea del kernel (en el menú de GRUB, presionando e sobre una entrada):
singleo1: modo monousuario (sin servicios de red).init=/bin/bash: arranca directamente a un shell bash como PID 1 (modo rescate extremo, sin montar /etc/fstab).nomodeset: deshabilita KMS, útil si hay problemas de video.selinux=0oenforcing=0: desactiva SELinux temporalmente (si los problemas son por políticas).systemd.unit=rescue.target: arranque en modo rescate (systemd).
Estos parámetros se pueden probar en tiempo real y, si resuelven el problema, se pueden añadir permanentemente a GRUB_CMDLINE_LINUX_DEFAULT en /etc/default/grub.
13.11. Solución de problemas comunes
| Problema | Posible causa | Solución |
|---|---|---|
| Pantalla negra tras GRUB | Kernel o initramfs incorrecto, falta de módulos | Añadir nomodeset, arrancar con kernel anterior, regenerar initramfs |
| “grub rescue>” sin menú | grub.cfg no encontrado o disco cambiado | Arrancar manualmente desde consola GRUB, luego reinstalar GRUB |
| “error: no such device: …” | UUID cambiado (clonación de disco) o partición no encontrada | Editar la entrada e y cambiar root=UUID por /dev/sdX, luego actualizar fstab y regenerar GRUB |
| Arranque de Windows desaparecido tras instalar Linux | os-prober no detectó Windows | Asegurar que GRUB_DISABLE_OS_PROBER=false, instalar os-prober, montar la partición de Windows y ejecutar update-grub |
| Firma Secure Boot falla (UEFI) | Kernel o GRUB no firmados | Desactivar Secure Boot en firmware o usar distribuciones con shim firmado |
13.12. Ejercicios prácticos
Identificación del sistema de arranque: Determina si tu sistema usa BIOS o UEFI. Anota la tabla de particiones y la presencia de una partición EFI.
Personalización de GRUB: Modifica
/etc/default/grubpara reducir el tiempo de espera a 2 segundos, añadir el parámetroquiet splash(si no está) y ocultar las entradas de recuperación. Regenera la configuración y comprueba en el reinicio.Añadir un parámetro del kernel:
- Agrega
selinux=0(oenforcing=0) temporalmente presionandoeen el arranque. Verifica congetenforce. Luego, hazlo permanente.
- Agrega
Protección con contraseña: Configura un usuario
admincon contraseña para restringir la edición de entradas. Prueba que al pulsaresolicita autenticación.Reinstalar GRUB desde un chroot (práctica sin riesgo real): Simula un fallo: renombra
/boot/grub/grub.cfgagrub.cfg.baky reinicia. El sistema no arrancará correctamente. Usa un Live USB para arrancar, montar las particiones, hacer chroot y regenerar la configuración. Verifica que el sistema arranca de nuevo.Arranque manual desde la consola GRUB: En la consola de GRUB (
c), identifica la partición raíz y el kernel. Carga el kernel e initramfs y ejecutaboot. Documenta los pasos.Añadir una entrada personalizada: Edita
/etc/grub.d/40_custompara crear una entrada que arranque un kernel antiguo con la etiqueta “Kernel de rescate”. No es necesario que el kernel exista; solo se evaluará la correcta escritura del menú.
13.13. Resumen y consejos para LFCS
- No edites
grub.cfgdirectamente; usa/etc/default/grubyupdate-grub. - Recuerda la diferencia entre instalar GRUB en BIOS (
grub-install /dev/sda) y en UEFI (grub-install --target=x86_64-efi --efi-directory=/boot/efi). - En el examen, si te enfrentas a un sistema que no arranca, lo más probable es que necesites hacer chroot desde un Live CD y reinstalar GRUB o regenerar su configuración.
- Practica la reparación desde chroot hasta que los pasos fluyan naturalmente: montar root, montar sistemas virtuales, chroot, grub-install, update-grub, salir, reiniciar.
- Los parámetros del kernel se pueden pasar en el menú de GRUB de forma temporal (presionando
e). Es una habilidad que debes conocer para recuperar sistemas. - La consola interactiva de GRUB es el último recurso, pero conocerla te dará mucha confianza.
Con este capítulo has adquirido el control sobre el arranque de Linux. En el próximo tema abordaremos la monitorización del uso de recursos de los procesos en Linux, una tarea diaria para garantizar el rendimiento y la estabilidad del sistema.
Descubre más desde CIBERED
Suscríbete y recibe las últimas entradas en tu correo electrónico.
