Esta é uma pergunta de acompanhamento depois

Esta é uma pergunta de acompanhamento depois

Esta é uma pergunta de acompanhamento depois

Como fazer uma unidade flash BIOS/UEFI com criptografia completa de disco

Segui as respostas desta pergunta e criei uma instalação completa criptografada do Ubuntu 20.04 em uma unidade flash USB inicializada a partir do BIOS ou de computadores configurados com UEFI.

Com o tempo, usei esta unidade flash USB, instalei o Ubuntu em um computador somente com BIOS e o mantive atualizado com segurança e outras atualizações. Agora o computador UEFI não inicializa a partir desta unidade USB. Quando eu selecionoUbuntudo GRUB me mostra o erro:

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

Este kernel específico não está instalado porque foi substituído por kernels mais recentes durante a segurança e outras atualizações.

Como recupero a funcionalidade de inicialização UEFI para esta instalação do Ubuntu baseada em USB?

Responder1

O conto de doisgrub.cfg

Esta instalação de unidade flash USB possui duas unidades separadas grub.cfgem dois locais. Um é usado para inicializar computadores apenas com BIOS e o outro é usado para inicializar computadores UEFI. Quando novos kernels são instalados e os antigos são removidos, o processo de instalação atualiza apenas o arquivo grub.cfg que foi usado para a inicialização atual. Como resultado, os dois grub.cfgarquivos ficam fora de sincronia.

O arquivo necessário para inicialização do BIOS está em:

/boot/grub/grub.cfg

O arquivo necessário para inicialização UEFI está em:

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

Observe que, como esta é uma instalação criptografada, a partição de inicialização possui o ponto de montagem /boote a partição ESP possui o ponto de montagem /boot/efi.

Solução

Substitua o grub.cfg antigo pela versão mais recente. No meu caso, o BIOS era mais recente. Então usei o comando:

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

Isso resolveu o problema por enquanto.

Um roteiro

Eu escrevi um pequeno script chamado grubsync.shpara copiar e substituir o mais antigo grub.cfgpelo mais novo, se eles forem diferentes com base no modo (BIOS ou UEFI) a partir do qual o USB foi inicializado.

#!/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

O nome do host da minha instalação completa do USB é USB123. Altere-o antes de executar o script. Você precisará executar este script com sudoprefixo.

A partir de agora, tenho que executar este script sempre que houver uma atualização do kernel. Com alguns ajustes, posso executá-lo a cada inicialização usando o crontab.

Espero que isto ajude

informação relacionada