![Esta é uma pergunta de acompanhamento depois](https://rvso.com/image/1072191/Esta%20%C3%A9%20uma%20pergunta%20de%20acompanhamento%20depois.png)
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.cfg
em 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.cfg
arquivos 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 /boot
e 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.sh
para copiar e substituir o mais antigo grub.cfg
pelo 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 sudo
prefixo.
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