Em uma configuração normal, o firmware EFI rastreia os carregadores de inicialização EFI na NVRAM. Quando você instala um sistema operacional, ele deve registrar seu carregador de boot com o firmware, e o resultado é uma entrada NVRAM que aponta para o carregador de boot, e o firmware pode iniciar o carregador de boot. Isso normalmente funciona bem, embora haja problemas com as entradas da NVRAM sendo apagadas ou danificadas mesmo em hardware "real". O VirtualBox, infelizmente, faz um trabalho ruim de armazenar seus dados "NVRAM" entre os usos; Ele tende a começar com um novo conjunto de dados padrão toda vez que você o inicia. Isso acaba causando estragos com a capacidade de lançar praticamente qualquer coisa.
IMHO, a solução mais simples é armazenar um carregador de boot usando o nome de arquivo de fallback de EFI/BOOT/bootx64.efi
(sem distinção entre maiúsculas e minúsculas) na EFI Partição do Sistema (ESP) do disco virtualizado. Se um EFI não puder inicializar mais nada, ele tentará inicializar este gerenciador de inicialização. De modo geral, se você estiver instalando uma distribuição do Linux, existem duas maneiras de fazer isso:
- Você pode armazenar uma cópia do seu gerenciador de inicialização normal lá. Não sei o que o Manjaro usa por padrão ou onde o armazena, mas supondo que ele use
EFI/manjaro/grubx64.efi
, você copia ou renomeia EFI/manjaro
para EFI/BOOT
e renomeia grubx64.efi
nesse diretório para bootx64.efi
. Você poderia usar algo diferente do carregador de inicialização padrão do Manjaro, se preferir. Consulte minha página sobre o assunto para obter informações sobre o que está disponível.
- Você pode usar
fallback.efi
ou fbx64.efi
(o mesmo programa, nomes diferentes). Este programa EFI provavelmente já está instalado em algum ponto do seu ESP ou, pelo menos, está disponível em algum pacote da sua distribuição (talvez GRUB ou Shim). Você copia esse arquivo para EFI/BOOT/bootx64.efi
e, em seguida, cria um arquivo BOOT.CSV
no diretório onde o carregador de inicialização real existe. Este arquivo contém dados sobre o nome do carregador de inicialização real e os dados relacionados, como grubx64.efi,Manjaro,,This is the boot entry for Manjaro
. Importante, este arquivo deve ser UCS-2 ou UTF-16 , não simples ASCII. Quando fallback.efi
/ fbx64.efi
é iniciado (como bootx64.efi
), ele procura por .CSV
arquivos nos subdiretórios de EFI
no ESP. Se encontrar algum, ele os usa para gerar novas entradas NVRAM. Isso se destina a ajudar na recuperação de entradas NVRAM perdidas, portanto, é uma maneira de contornar o problema de "amnésia NVRAM" do VirtualBox.
A primeira abordagem provavelmente será mais fácil de configurar, com a ressalva de que as configurações do GRUB podem ser complicadas. Se a sua procura por grub.cfg
no ESP, você deve ter certeza de que permanece onde o GRUB espera, portanto você pode ou não precisar movê-la. Além disso, se o seu sistema de pacotes fornecer um GRUB atualizado, você precisará copiá-lo novamente para obter os benefícios do novo pacote. A segunda abordagem é mais difícil de explicar e um pouco mais tediosa de configurar, mas estou começando a preferir, porque facilita a instalação de atualizações no gerenciador de inicialização.
Existem outras abordagens para contornar o problema, como usar um script de inicialização do shell EFI, como o kyb sugere (mas isso resultará em tempos de inicialização maiores do que a minha solução acima). Além disso, no passado, era possível criar uma nova entrada NVRAM usando a própria interface de firmware do VirtualBox, e isso seria persistente; mas isso parece ter parado de funcionar em algum momento - ou pelo menos, da última vez que tentei, não funcionou.