O problema não foi com o Ubuntu ou sua instalação; é uma limitação do VirtualBox. Para elaborar ....
Em EFI / UEFI, uma instalação normal envolve o sistema operacional que está instalando o carregador de boot na partição do sistema EFI (ESP) usando um nome específico do sistema operacional. (O Ubuntu usou EFI\ubuntu\shimx64.efi ou EFI\ubuntu\grubx64.efi .) Como o nome do carregador de inicialização varia de um sistema operacional para outro, o computador precisa saber qual arquivo deve ser executado. Ele sabe disso gravando os dados na NVRAM. O Ubuntu registra esta informação com o programa efibootmgr . Ambos os detalhes são tratados pelo instalador do Ubuntu; eles são invisíveis para você durante o processo normal de instalação.
O problema é que o VirtualBox não consegue se lembrar de seus dados NVRAM - pelo menos, não quando é gravado por efibootmgr de uma instalação Ubuntu em execução. Na minha experiência, o VirtualBox lembra os dados enquanto a máquina virtual está em execução, mas esquece as informações quando você as desliga e as reinicia. O resultado é que a máquina virtual é inicializada novamente no shell EFI, mostrado na captura de tela que você compartilhou. Existem várias soluções para este problema:
- Use o boot no modo BIOS - Você pode mudar o VirtualBox para usar um BIOS em vez de um EFI. Esta é a solução que você está usando, com base em seus comentários. É uma solução perfeitamente razoável para inicializar o Linux 99% do tempo. Se você precisar do EFI por algum motivo, (digamos, se estiver desenvolvendo aplicativos EFI), isso não será uma solução aceitável. FWIW, inicialização no modo EFI é ligeiramente mais rápida que a inicialização no modo BIOS no VirtualBox.
-
Use o shell EFI para ativar o GRUB - Você pode aprender os comandos do shell EFI para localizar e iniciar um carregador de boot e usá-los para iniciar o GRUB. Normalmente, os seguintes comandos devem fazer o trabalho:
-
fs0:(mas em alguns casos pode serfs1:ou algum outro dispositivo) -
cd \EFI\ubuntu -
grubx64.efi
-
-
Use um script de inicialização do EFI para iniciar o GRUB - O shell do EFI tenta executar um script de shell, chamado
startup.nsh, quando é iniciado. Se você tiver esse script executandogrubx64.efi, ele será iniciado quando o shell EFI for iniciado. Isso levará alguns segundos, no entanto. -
Registre o GRUB com o utilitário de configuração EFI - Embora o VirtualBox não se lembre de suas entradas quando elas são criadas por
efibootmgr, ele lembra as entradas criadas com sua própria ferramenta de configuração. Digitarexitno shell EFI deve entrar na ferramenta de configuração. Você pode então usar o menu de manutenção de inicialização - > Opções de inicialização - > Adicione a opção de inicialização para localizar o GRUB e adicionar uma entrada para ele. Note, no entanto, que o utilitário de configuração do VirtualBox EFI é complicado, por isso é fácil ignorar uma etapa crítica ou fazê-lo incorretamente. -
Renomeie o GRUB - O EFI reconhece um nome de "fallback" especial (
EFI\BOOT\bootx64.efiem sistemas x86-64) que é iniciado se não for possível encontrar outra imagem inicializável. Você pode, portanto, renomear o GRUB para usar esse nome. Você pode fazer isso a partir do shell EFI:-
fs0:(novamente, isso pode ser outro dispositivo) -
cd EFI -
mv ubuntu BOOT -
mv BOOT\grubx64.efi BOOT\bootx64.efi
Alternativamente, você pode fazer a mesma coisa usando o Ubuntu. Você pode usar a mídia de instalação em seu modo "experimentar antes de instalar" ou usar o shell EFI para iniciar o GRUB uma vez e depois usar sua instalação normal. De qualquer forma, o ESP é normalmente
/dev/sda1, então você precisará montar essa partição para fazer as alterações. (Se você usa a instalação regular, o ESP deve ser montado em/boot/efipor padrão). -
A instalação no modo BIOS desde o início provavelmente será a solução mais fácil; mas se a máquina virtual já estiver instalada ou se você precisar ou quiser inicializar no modo EFI, renomear EFI/ubuntu/grubx64.efi para EFI/BOOT/bootx64.efi geralmente é a melhor solução.