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. Digitarexit
no 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.efi
em 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/efi
por 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.