Instalei o TinyCore como meu sistema operacional de manutenção. Eu dei aquele GRUB2. Mas as instruções de instalação do TinyCore dizem para você adicionar o GRUB2 usando o método MBR. (Funciona, mas é só porque o EFI é compatível com versões anteriores do MBR.) Idealmente, eu gostaria de encadeá-lo para que os vetores de stub de inicialização EFI para /boot/grub do TinyCore, para que a partir do GRUB2 do TinyCore eu possa inicializar qualquer outro sistema operacional que eu querer. Ou segunda escolha, gostaria de encadeá-lo para que os vetores de stub de inicialização EFI para vmlinuz do TinyCore.
TinyCore não tem efibootmgr. O efibootmgr está me dando o "sistema não suporta efivars" quando inicializo a partir de um stick USB do Ubuntu.
Existe uma maneira de pegar o diretório grub do TinyCore, trazê-lo para alguma outra máquina Linux e criar um grub.efi a partir dele que eu possa trazer de volta para esta máquina e copiar para o meu ESP nesta máquina?
Isso acontece porque você está inicializando a partir do stick USB usando o estilo legado do BIOS, então o módulo de suporte de compatibilidade do UEFI desabilitará 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 stick USB no modo UEFI nativo,
efibootmgr
funcionará. Se as configurações de inicialização do firmware incluírem uma escolha se os métodos de inicialização UEFI ou herdados são tentados primeiro, tente alternar para o modo "UEFI primeiro" durante a inicialização a partir do stick.Com um MBR GRUB2 herdado, você só pode inicializar sistemas operacionais inicializáveis com o estilo MBR legado. Para se conectar a um sistema operacional que foi instalado para inicializar usando o 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 distribuições diferentes o configuram de maneiras ligeiramente diferentes: por exemplo, o Debian costumava plantar um mínimo
grub.efi
para ESP com instruções incorporadas para ler mais módulos 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/boot
diretório).O problema com essa abordagem é que o Secure Boot torna isso impossível se ativado: todo 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 UEFI padrão, eles não podem ser assinados de maneira que ser reconhecível como tal para o firmware UEFI.
As distribuições derivadas do RedHat, por outro lado, tendem a incorporar todos os módulos GRUB necessários no
grubx64.efi
binário principal, que pode então ser carregado com sucesso em uma operação pelo Secure Bootshim.efi
. O arquivo de configuração do GRUB também é colocado no sistema de arquivos ESP, normalmente refletindo a nomenclatura do binário UEFI GRUB principal, ou seja, se o binário for renomeado parafoo.efi
ele, ele procuraráfoo.cfg
no mesmo diretório.Sabendo disso, você pode apenas garantir que o Secure Boot esteja desabilitado, pegue o
grub.efi
binário de uma mídia de instalação RedHat/CentOS/Fedora, escreva um arquivo de configuração mínimo manualmente, coloque-os em seu ESP (talvez como\EFI\boot\bootx64.efi
e\EFI\boot\bootx64.cfg
, então UEFI deve pegá-los automaticamente sem necessidade de variáveis UEFI) e inicialize uma vez. Então você pode ver se o arquivo de configuração do 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ê deseja inicializar o TinyCore
vmlinuz
diretamente do firmware UEFI, o kernel precisa ser compilado comCONFIG_EFI_STUB=y
, e então 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 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; portanto, é melhor gerar várias configurações de variáveis de inicialização UEFI com antecedência 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, pode ser muito útil definir uma instalação inicializável UEFI "sem bootloader".)
Os UUIDs usados nas variáveis de inicialização UEFI podem ser descobertos executando o
blkid
comando. GRUB usa o UUID do sistema de arquivos (= oUUID=
campo), enquanto as variáveis de inicialização UEFI usam o UUID exclusivo da partição (= oPARTUUID=
campo).Aqui está como eu fiz isso. Primeiro, defino as opções EFI do meu PC apenas para inicialização EFI. Então eu inicializei o Ubuntu 16.04.4 de um DVD. (Obviamente, foi uma inicialização UEFI.). Dentro do Ubuntu 16.04.4 fiz o seguinte.
Configure o seguinte arquivo grub.cfg em /path/to/mounted/esp/partition/EFI/prime_boot/
menuentry "GRUB chainloader" { chainloader (hd0,gpt2)/boot/efi/core.efi }
Copie o diretório /usr/lib/grub/x86_64-efi para /path/to/mounted/esp/partition/EFI/prime_boot/.
Sim, você tem que escapar do '\' no comando 'efibootmgr'. Agora você tem o EFI usando este carregador primário para vetorizar para o carregador de inicialização na partição TinyCore. Então agora você configura o gerenciador de inicialização da partição TinyCore.
Eu sei que alguém poderia se perguntar por que pulo do carregador de inicialização primário para o carregador de inicialização múltipla. Eu só quero fazer o mínimo possível na minha partição esp. Quero que o TinyCore (meu sistema operacional de manutenção) seja o proprietário do gerenciador de inicialização de inicialização múltipla.