systemd-boot ignora o menu de inicialização e ignora as configurações em /loader/loader.conf

2

Recentemente, depois de fazer algo em meu sistema multi-inicializador, quando inicializo o NixOS com systemd-boot , o menu de inicialização não aparece mais, embora o tempo limite ainda esteja definido como 2 segundos em /loader/loader.conf (no ESP ):

# /loader/loader.conf on the ESP
timeout 2
default nixos-generation-380

Aqui está o que eu tenho no meu /etc/nixos/configuration.nix :

{ # ...
  boot.loader = {
    efi.canTouchEfiVariables = true;
    systemd-boot.enable = true;
    timeout = 2;
  };
}

Descobri que, para ver o menu de inicialização, tive que pressionar algumas teclas durante a inicialização, como se o tempo limite tivesse sido definido como 0 (em vez de 2) segundos.

Eu tentei remover systemd-bootx64.efi do ESP e reinstalar o NixOS com nixos-install de uma unidade flash USB. Isso restaurou systemd-bootx64.efi , mas não trouxe de volta o menu de inicialização.

Parece que esse problema não é completamente incomum:

Ambos os problemas são relatados para serem resolvidos. No entanto, não entendi a primeira solução:

Edit 3: SOLVED! Reinstalling the UEFI did the trick.

O que significa "reinstalar o UEFI"?

Quanto ao segundo, sugere-se usar as teclas t e Shift + t no menu de inicialização (que aparece se é pressionado durante a inicialização) para definir um tempo limite diferente, mas eu não quero apenas um tempo limite diferente, quero que systemd-boot respeite as configurações em /loader/loader.conf .

Então, minha pergunta foi: como fazer com que systemd-boot use novamente as configurações de /loader/loader.conf ?

Estou editando esta pergunta depois que encontrei a solução e vou postar minha resposta agora.

    
por Alexey 30.07.2018 / 17:14

1 resposta

1

Depois de ler o comentário # 6 em "systemd-boot, sem timeout, sem menu select - LoaderEntryDefault " e olhando para " conjuntos systemd-boot efivar LoaderEntryDefault, que substitui o padrão no /boot/loader/loader.conf " nixpkgs issue no GitHub, eu descobri que o problema foi provavelmente causado por Variáveis EFI que de alguma forma foram definidas e estavam sobrescrevendo as configurações de /loader/loader.conf .

De fato, havia duas variáveis configuradas que estavam causando problemas:

§ cat /sys/firmware/efi/efivars/LoaderConfigTimeout-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
0

e

§ cat /sys/firmware/efi/efivars/LoaderEntryDefault-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
nixos-generation-374

(Eu criei o valor ' 374 ' aqui: só importa que seja diferente do valor em /loader/loader.conf no momento em que o inspecionei).

A lista da variável EFI usada por systemd-boot pode ser encontrada no final de "systemd- Página inicial do Boot Manager da UEFI " em Wiki do Freedesktop :

LoaderEntryDefault      entry identifier to select as default at bootup                  non-volatile
LoaderConfigTimeout     timeout in seconds to show the menu                              non-volatile
LoaderEntryOneShot      entry identifier to select at the next and only the next bootup  non-volatile
LoaderDeviceIdentifier  list of identifiers of the volume the loader was started from    volatile
LoaderDevicePartUUID    partition GPT UUID of the ESP systemd-boot was executed from     volatile

Para remover a variável LoaderEntryDefault-[...] , bastou pressionar a tecla d duas vezes no menu de inicialização: para definir e desmarcar um novo valor.

Para remover a variável LoaderConfigTimeout-[...] , o resultado foi suficiente para pressionar Shift + t vezes suficientes para definir o tempo limite para 0 , mais uma vez.

Isso resolveu meu problema. Aqui está uma pergunta relacionada: perguntei no Superuser.SE sobre como modificar com segurança as variáveis EFI em geral.

    
por 05.08.2018 / 01:10