¿Cómo configurar y solucionar problemas del Grub?

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

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

  1. Firmware (BIOS o UEFI) : ejecuta el POST (Power-On Self Test) y busca un dispositivo de arranque.
  2. 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 carga core.img. Este último lee /boot/grub y presenta el menú.
  3. Carga del GRUB en sistemas UEFI, el firmware busca en la partición del sistema EFI (ESP) un archivo .efi (normalmente grubx64.efi). GRUB se ejecuta desde allí y carga su configuración.
  4. Selección del kernel: GRUB lee /boot/grub/grub.cfg y presenta un menú (si hay más de un kernel). Tras elegir una entrada, GRUB carga el kernel y el initramfs en memoria.
  5. 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ísticaBIOS (Legacy)UEFI
Tabla de particiones recomendadaMBR (msdos)GPT
Partición especialNo, GRUB se instala en el MBR o en el sector de arranque de una particiónPartición del sistema EFI (ESP), tipo ef00 en GPT, formateada en FAT32
Archivo de arranqueboot.img en el MBR + core.img en los sectores posterioresgrubx64.efi (o shim) en la ESP, ruta por defecto /EFI/<distro>/grubx64.efi
Instalación de GRUBgrub-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.cfgIgual, pero suele montarse la ESP en /boot/efi
Arranque seguro (Secure Boot)No aplicaSi 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 como grub-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 que grub-mkconfig ejecuta para construir grub.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 directorio EFI/ 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") o saved (recuerda la última elegida).
  • GRUB_TIMEOUT : segundos que espera antes de arrancar la entrada por defecto. Con -1 espera 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=1 o enforcing=0.
  • GRUB_CMDLINE_LINUX : parámetros que se añaden siempre, incluso en modo rescate.
  • GRUB_DISABLE_RECOVERY : si se pone a true, no se generan entradas de modo recuperación en el menú.
  • GRUB_DISABLE_OS_PROBER : si es true, no se buscan otros sistemas operativos (Windows, otras distros). Útil para acelerar la regeneración.
  • GRUB_TERMINAL y GRUB_GFXPAYLOAD_LINUX controlan 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/efi montado 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.

  1. Genera el hash de la contraseña:
grub-mkpasswd-pbkdf2

Introduce dos veces la contraseña, copia el hash generado.

  1. 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_users si existe; en su defecto, edita /etc/grub.d/00_header con 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.

  1. 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.

  1. Arranca con un Live USB de la misma distribución (o una similar).
  2. Identifica las particiones:
sudo fdisk -l
lsblk -f
  1. 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
  1. Haz chroot:
sudo chroot /mnt
  1. 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

  1. 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):

  • single o 1 : 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=0 o enforcing=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

ProblemaPosible causaSolución
Pantalla negra tras GRUBKernel o initramfs incorrecto, falta de módulosAñadir nomodeset, arrancar con kernel anterior, regenerar initramfs
“grub rescue>” sin menúgrub.cfg no encontrado o disco cambiadoArrancar manualmente desde consola GRUB, luego reinstalar GRUB
“error: no such device: …”UUID cambiado (clonación de disco) o partición no encontradaEditar la entrada e y cambiar root=UUID por /dev/sdX, luego actualizar fstab y regenerar GRUB
Arranque de Windows desaparecido tras instalar Linuxos-prober no detectó WindowsAsegurar 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 firmadosDesactivar Secure Boot en firmware o usar distribuciones con shim firmado

13.12. Ejercicios prácticos

  1. 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.

  2. Personalización de GRUB: Modifica /etc/default/grub para reducir el tiempo de espera a 2 segundos, añadir el parámetro quiet splash (si no está) y ocultar las entradas de recuperación. Regenera la configuración y comprueba en el reinicio.

  3. Añadir un parámetro del kernel:

    • Agrega selinux=0 (o enforcing=0) temporalmente presionando e en el arranque. Verifica con getenforce. Luego, hazlo permanente.
  4. Protección con contraseña: Configura un usuario admin con contraseña para restringir la edición de entradas. Prueba que al pulsar e solicita autenticación.

  5. Reinstalar GRUB desde un chroot (práctica sin riesgo real): Simula un fallo: renombra /boot/grub/grub.cfg a grub.cfg.bak y 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.

  6. 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 ejecuta boot. Documenta los pasos.

  7. Añadir una entrada personalizada: Edita /etc/grub.d/40_custom para 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.cfg directamente; usa /etc/default/grub y update-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.

Vistas: 0

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio