Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Guía de Dual-Boot en Libreboot

Guía práctica para configurar dual-boot (o multi-boot) de distribuciones Linux en un sistema con Libreboot. Basada en Libreboot 26.01 “Magnanimous Max” con GRUB 2.14.


Conceptos clave

En Libreboot, GRUB vive en la ROM (chip SPI), no en el disco. Cuando instalas una distro y ejecuta grub-install, ese GRUB en disco nunca se ejecuta como bootloader. Libreboot solo lee el archivo grub.cfg de cada distro mediante el comando configfile.

El flujo de arranque es: coreboot → GRUB (desde ROM) → escanea discos → encuentra grub.cfg → carga kernel.

No existe chainloading (chainloader +1 no funciona). No necesitas ESP (EFI System Partition). El GRUB de la ROM ya trae los módulos necesarios compilados (ext2, btrfs, luks2, search, configfile, etc.), por lo que no necesitas insmod.

Nombres de dispositivo en GRUB de Libreboot

Los discos NVMe se ven como (nvme0n1,gptX). Los SATA como (ahci0,gptX). USB como (usb0). Puedes verificarlos presionando c en el menú de Libreboot y escribiendo ls.


Esquema mínimo de particiones

Cada distro necesita como mínimo:

/dev/nvme0n1pX — ext4       — /boot de la distro (~1 GiB)
/dev/nvme0n1pY — crypto_LUKS — / de la distro (resto)

Ejemplo con Fedora + Linux Mint:

nvme0n1p1 — (reservada/vacía)
nvme0n1p2 — ext4        — /boot Fedora
nvme0n1p3 — LUKS2       — / Fedora (cifrado)
nvme0n1p4 — ext4        — /boot Distro 2
nvme0n1p5 — LUKS2       — / Distro 2 (cifrado)

Para agregar una tercera distro, simplemente añades dos particiones más (boot + LUKS).

Reglas importantes:

  • Cada distro debe tener su propio /boot separado (ext4).
  • Cada distro puede tener su propia partición LUKS independiente.
  • No se necesita ESP ni partición EFI.
  • Al instalar, deja que el instalador instale GRUB normalmente. Aunque no se usa como bootloader, el proceso genera el grub.cfg que Libreboot necesita.

Cómo agregar una distro al menú de arranque

Paso 1: Instalar la distro

Usa particionado manual en el instalador. Asigna su /boot y su partición raíz (con LUKS si quieres cifrado). No toques las particiones de las distros existentes.

Paso 2: Verificar que generó grub.cfg

Desde tu distro principal:

sudo mkdir -p /mnt/newboot
sudo mount /dev/nvme0n1pX /mnt/newboot    # X = partición /boot de la nueva distro
ls /mnt/newboot/grub/grub.cfg             # Debian/Ubuntu/Mint usan /grub/
ls /mnt/newboot/grub2/grub.cfg            # Fedora usa /grub2/
sudo umount /mnt/newboot

Si no existe grub.cfg, hay que generarlo vía chroot (ver sección “Solución de problemas”).

Paso 3: Obtener el UUID del /boot de la nueva distro

lsblk -f

Busca el UUID de la partición ext4 que es /boot de la nueva distro.

Paso 4: Agregar entrada en 40_custom de la distro principal

Edita el archivo de entradas personalizadas de GRUB en tu distro principal (la que Libreboot carga por defecto):

sudo hx /etc/grub.d/40_custom

El archivo debe verse así:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry 'Nombre de la Distro' --class nombredistro --class gnu-linux --class os {
    search --no-floppy --fs-uuid --set=root UUID_DEL_BOOT
    configfile /grub/grub.cfg
}

Reemplaza:

  • Nombre de la Distro → lo que quieras ver en el menú.
  • --class → el icono que se usara
  • UUID_DEL_BOOT → el UUID de la partición /boot de esa distro (paso 3).
  • /grub/grub.cfg → usa /grub2/grub.cfg si es Fedora.

Para múltiples distros, simplemente añade más bloques menuentry:

#!/bin/sh
exec tail -n +3 $0

menuentry 'Linux Mint' {
    search --no-floppy --fs-uuid --set=root aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
    configfile /grub/grub.cfg
}

menuentry 'Debian GNU/Linux' {
    search --no-floppy --fs-uuid --set=root ffffffff-1111-2222-3333-444444444444
    configfile /grub/grub.cfg
}

menuentry 'Arch Linux' {
    search --no-floppy --fs-uuid --set=root 55555555-6666-7777-8888-999999999999
    configfile /grub/grub.cfg
}

Paso 5: Asegurar que es ejecutable y regenerar

sudo chmod +x /etc/grub.d/40_custom

En Fedora:

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

En Debian/Ubuntu/Mint:

sudo update-grub

Paso 6: Reiniciar y probar

sudo reboot

La nueva distro aparecerá al final del menú de arranque.


Arranque manual desde consola GRUB

Si algo falla, presiona c en el menú de Libreboot para obtener la consola GRUB.

Ver dispositivos disponibles

ls

Arrancar manualmente cargando grub.cfg de una distro

search --no-floppy --fs-uuid --set=root UUID_DEL_BOOT
configfile /grub/grub.cfg

Arrancar manualmente sin grub.cfg

set root=(nvme0n1,gptX)
linux /vmlinuz-VERSION root=/dev/mapper/NOMBRE_LUKS
initrd /initrd.img-VERSION
boot

Solución de problemas

La distro no generó grub.cfg

Desde tu distro principal, hacer chroot:

# Abrir LUKS si es cifrado
sudo cryptsetup open /dev/nvme0n1pY nombre-root

# Montar raíz (ajustar opciones según filesystem)
sudo mkdir -p /mnt/distro
sudo mount /dev/mapper/nombre-root /mnt/distro
# Si es btrfs con subvolumen:
# sudo mount -o subvol=@rootfs /dev/mapper/nombre-root /mnt/distro

# Montar /boot
sudo mount /dev/nvme0n1pX /mnt/distro/boot

# Montar sistemas virtuales
sudo mount --bind /dev /mnt/distro/dev
sudo mount --bind /dev/pts /mnt/distro/dev/pts
sudo mount --bind /proc /mnt/distro/proc
sudo mount --bind /sys /mnt/distro/sys

# Chroot y generar grub.cfg
sudo chroot /mnt/distro
update-grub          # Debian/Ubuntu/Mint
# grub2-mkconfig -o /boot/grub2/grub.cfg   # Fedora

exit

# Limpiar
sudo umount /mnt/distro/sys
sudo umount /mnt/distro/proc
sudo umount /mnt/distro/dev/pts
sudo umount /mnt/distro/dev
sudo umount /mnt/distro/boot
sudo umount /mnt/distro
sudo cryptsetup close nombre-root

Cae a initramfs (BusyBox) al arrancar

El initramfs no tiene instrucciones para desbloquear LUKS. Verificar crypttab y regenerar initramfs vía chroot:

# Dentro del chroot:
cat /etc/crypttab    # Debe tener una entrada para el volumen LUKS
update-initramfs -u -k all   # Debian/Ubuntu/Mint
# dracut --regenerate-all     # Fedora

Notas sobre distros específicas

  • Fedora: usa /grub2/grub.cfg (no /grub/). Usa BLS por defecto. Si da problemas, editar /etc/default/grub y poner GRUB_ENABLE_BLSCFG=false, luego regenerar. Configurar GRUB_TERMINAL=console.
  • Debian/Ubuntu/Mint: usa /grub/grub.cfg. Formato tradicional, compatible sin ajustes.
  • Arch Linux: usa /grub/grub.cfg. Compatible sin ajustes.

Notas sobre encriptación LUKS

  • Libreboot 26.01+ soporta LUKS2 con argon2id nativamente (GRUB 2.14).
  • El desbloqueo en GRUB es más lento que en el kernel (sin aceleración hardware). Si tarda mucho, ajustar parámetros KDF con: cryptsetup luksConvertKey /dev/sdX --pbkdf argon2id --pbkdf-force-iterations 4 --pbkdf-memory 131072
  • Si /boot está fuera del LUKS (como en esta guía), GRUB no necesita descifrar nada — el initramfs se encarga.

Referencia rápida

AcciónComando
Ver UUIDslsblk -f
Editar entradas customsudo hx /etc/grub.d/40_custom
Regenerar GRUB (Fedora)sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Regenerar GRUB (Debian/Mint)sudo update-grub
Consola GRUB en LibrebootPresionar c en el menú
Ver dispositivos en GRUBls
Regenerar initramfs (Debian)sudo update-initramfs -u -k all
Regenerar initramfs (Fedora)sudo dracut --regenerate-all
Abrir LUKSsudo cryptsetup open /dev/nvme0n1pX nombre
Cerrar LUKSsudo cryptsetup close nombre