efibootmgr is giving me the "system does not support efivars" when I boot from a Ubuntu USB stick.
Isso acontece porque você está inicializando a partir do pendrive USB usando o estilo de legado do BIOS, portanto, o módulo de suporte de compatibilidade do UEFI desativará a interface de tempo de execução do UEFI que seria usada para acessar as variáveis de inicialização. Se você puder inicializar o dispositivo USB no modo UEFI nativo, então efibootmgr
funcionará. Se as configurações de inicialização do firmware incluírem se os métodos de inicialização herdados ou UEFI foram tentados primeiro, tente alterná-lo para o modo "UEFI primeiro" ao inicializar a partir do bastão.
Com um MBR herdado GRUB2, você só pode inicializar sistemas operacionais que são inicializáveis com o estilo MBR legado. Para encadear a um sistema operacional que foi instalado para inicializar usando UEFI nativo, você precisará de uma versão UEFI do GRUB2.
O problema em transplantar um UEFI GRUB de uma distribuição para outra é que diferentes distribuições configuram de maneiras ligeiramente diferentes: por exemplo, o Debian costumava plantar um grub.efi
muito pequeno para o ESP com instruções embutidas para ler mais módulos do GRUB e o arquivo de configuração de outro sistema de arquivos especificado no momento da instalação do GRUB (normalmente o sistema de arquivos que contém o diretório /boot
).
O problema com essa abordagem é que o Secure Boot torna isso impossível se ativado: todo o código executável carregado deve ser assinado e como os módulos GRUB não estão usando o mesmo formato de arquivo binário que os binários padrão UEFI, eles não podem ser assinados em um maneira que seria reconhecível como tal para o firmware UEFI.
As distribuições derivadas de RedHat, por outro lado, tendem a incorporar todos os módulos GRUB necessários no principal binário
grubx64.efi
, que pode então ser carregado com êxito em uma operação pelo Secure Boot
shim.efi
. O arquivo de configuração do GRUB também é colocado no sistema de arquivos ESP, normalmente refletindo a nomenclatura do binário principal do UEFI GRUB, ou seja, se o binário for renomeado para
foo.efi
, ele procurará
foo.cfg
no mesmo diretório.
Sabendo disso, você pode apenas ter certeza que o Secure Boot está desabilitado, pegue o binário grub.efi
de uma mídia de instalação RedHat / CentOS / Fedora, escreva um arquivo de configuração mínimo manualmente, coloque-o no seu ESP (talvez como \EFI\boot\bootx64.efi
e \EFI\boot\bootx64.cfg
, portanto, o UEFI deve buscá-los automaticamente sem necessidade de variáveis UEFI) e inicializar uma vez. Então você pode ver se o arquivo de configuração GRUB gerado pelo gerador de configuração GRUB nativo do TinyCore é compatível com essa versão do GRUB, e substituir o arquivo de configuração simplificado por um real ou substituir a versão transplantada do GRUB pela versão preferida do TinyCore do UEFI GRUB .
Se você quiser inicializar vmlinuz
do TinyCore diretamente do firmware UEFI, o kernel precisa ser compilado com CONFIG_EFI_STUB=y
e, em seguida, você precisará descobrir o que fazer com os parâmetros de inicialização e o arquivo initramfs. Fiz essa configuração uma vez, configurando as opções de inicialização na variável de inicialização do UEFI. Sem um gerenciador de inicialização, você provavelmente não terá como alterar os parâmetros de inicialização no momento da inicialização, então é melhor gerar várias configurações de variável de inicialização UEFI antecipadamente com diferentes parâmetros de inicialização, para que você tenha uma maneira de acessar o sistema se algo der errado com uma atualização do kernel, por exemplo.
(Se as opções de inicialização UEFI no nível do firmware incluírem uma maneira de inicializar no UEFI Shell, ele poderá ser muito útil na configuração de uma instalação inicializável por UEFI "sem bootloader".)
Os UUIDs usados nas variáveis de inicialização do UEFI podem ser descobertos executando o comando blkid
. O GRUB usa o UUID do sistema de arquivos (= o campo UUID=
), enquanto as variáveis de inicialização do UEFI usam o UUID exclusivo da partição (= o campo PARTUUID=
).