Esta es una pregunta de seguimiento después

Esta es una pregunta de seguimiento después

Esta es una pregunta de seguimiento después

Cómo crear una unidad flash BIOS/UEFI con cifrado de disco completo

Seguí las respuestas a esta pregunta y creé una instalación completa cifrada de Ubuntu 20.04 en una unidad flash USB que arrancó desde BIOS o desde computadoras configuradas con UEFI.

Con el tiempo, utilicé esta unidad flash USB, instalé Ubuntu en una computadora con solo BIOS y la mantuve actualizada con seguridad y otras actualizaciones. Ahora la computadora UEFI no arrancará desde esta unidad USB. cuando seleccionoubuntudesde el GRUB me muestra el error:

error file '/vmlinuz-5.8.0-48-generic' not found.
you need to load the kernel first. 

Este kernel específico no está instalado porque fue reemplazado por kernels más nuevos durante las actualizaciones de seguridad y de otro tipo.

¿Cómo recupero la funcionalidad de arranque UEFI para esta instalación de Ubuntu basada en USB?

Respuesta1

El cuento de dosgrub.cfg

Esta instalación de unidad flash USB tiene dos unidades separadas grub.cfgen dos ubicaciones. Uno se usa para iniciar computadoras solo con BIOS y el otro se usa para iniciar computadoras UEFI. Cuando se instalan nuevos kernels y se eliminan los antiguos, el proceso de instalación actualiza solo el archivo grub.cfg que se utilizó para el arranque actual. Como resultado, los dos grub.cfgarchivos no están sincronizados.

El archivo necesario para el arranque del BIOS se encuentra en:

/boot/grub/grub.cfg

El archivo necesario para el arranque UEFI se encuentra en:

/boot/efi/boot/grub/grub.cfg

Tenga en cuenta que, dado que se trata de una instalación cifrada, la partición de inicio tiene el punto de montaje /booty la partición ESP tiene el punto de montaje /boot/efi.

Solución

Reemplace el grub.cfg anterior con la versión más nueva. En mi caso, la BIOS era más nueva. Entonces usé el comando:

sudo cp /boot/grub/grub.cfg /boot/efi/boot/grub/grub.cfg

Esto solucionó el problema por ahora.

Un guión

Escribí un pequeño script llamado grubsync.shpara copiar y reemplazar el anterior grub.cfgpor el más nuevo, si son diferentes según el modo (BIOS o UEFI) desde el que se inició el USB.

#!/bin/bash
# Date: Jun 18, 2022
# Purpose: USB123 copy grub.cfg from boot partition grub.cfg to ESP partition
#      or vice versa if grub.cfg is newer
 
# Only run if the computer is USB123
if [[ ! $HOSTNAME == USB123 ]]; then    # Not on right computer
    echo "This is $HOSTNAME, expected USB123, exiting..."
    exit 1
fi

if [[ "$EUID" -ne 0 ]]
    then echo "This script must run with sudo, exiting..."
    exit 1
fi

BOOTgrubCFG="/boot/grub/grub.cfg"
ESPgrubCFG="/boot/efi/boot/grub/grub.cfg"

if cmp --silent -- "$BOOTgrubCFG" "$ESPgrubCFG"; then
    echo "files contents are identical, exiting..."
    exit 1
fi

if ls /sys/firmware/efi; then   # If TRUE then UEFI Boot
    if [[ "$BOOTgrubCFG" -ot "$ESPgrubCFG" ]]; then    # '-ot` means older than
        cp -f "$BOOTgrubCFG" "$BOOTgrubCFG".old 
        cp -f "$ESPgrubCFG" "$BOOTgrubCFG"
        echo "$BOOTgrubCFG" was old, kept with .old ext
        echo "$BOOTgrubCFG" was replaced with "$ESPgrubCFG". 
    fi
else 
    if [[ "$ESPgrubCFG" -ot "$BOOTgrubCFG" ]]; then
        cp -f "$ESPgrubCFG" "$ESPgrubCFG".old 
        cp -f "$BOOTgrubCFG" "$ESPgrubCFG"
        echo "$ESPgrubCFG" is old, kept with .old ext
        echo "$ESPgrubCFG" was replaced with "$BOOTgrubCFG".        
    fi
fi

El nombre de host de mi instalación completa de USB es USB123. Cámbielo antes de ejecutar el script. Deberá ejecutar este script con sudoprefijo.

A partir de ahora, tengo que ejecutar este script cada vez que hay una actualización del kernel. Con algunos ajustes, es posible que pueda ejecutarlo en cada inicio usando crontab.

Espero que esto ayude

información relacionada