![Esta es una pregunta de seguimiento después](https://rvso.com/image/1072191/Esta%20es%20una%20pregunta%20de%20seguimiento%20despu%C3%A9s.png)
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.cfg
en 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.cfg
archivos 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 /boot
y 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.sh
para copiar y reemplazar el anterior grub.cfg
por 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 sudo
prefijo.
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