systemd-boot (Português)
systemd-boot, antigamente chamado de gummiboot (Alemão para: "bote de borracha"), é um simples gerenciador de boot UEFI que executa imagens EFI configuradas. A entrada padrão é selecionada por um padrão (glob) definido ou um menu navegável na tela por meio das setas. Vêm com o systemd, que é instalado em um sistema Arch por padrão.
É simples de configurar mas pode somente iniciar executáveis EFI como o EFISTUB do kernel Linux, shell do UEFI, GRUB ou o gerenciador de boot do Windows.
Instalação
Instalando o gerenciador de boot EFI
Para instalar o gerenciador de boot EFI systemd-boot, primeiro tenha certeza que o sistema inicializou no modo UEFI e que as variáveis UEFI são acessíveis. Isto pode ser verificado ao executar o comando efivar --list
ou, se efivar não está instalado, ao executar ls /sys/firmware/efi/efivars
(se o diretório existe, o sistema foi inicializado no modo UEFI).
Nesta página, esp
será usado para indicar o ponto de montagem ESP, ex. /efi
ou /boot
. Isto assume que você fez um chroot no ponto de montagem do seu sistema.
Com a partição de sistema EFI (ESP) montada em esp
, use bootctl(1) para instalar systemd-boot na ESP:
# bootctl install
on a x64 architecture system /usr/lib/systemd/boot/efi/systemd-bootx64.efi
will be copied to esp/EFI/systemd/systemd-bootx64.efi
and esp/EFI/BOOT/BOOTX64.EFI
, and systemd-boot will be set as the default EFI application.
Isto vai copiar o gerenciador de boot systemd-boot para a ESP: em um sistema com arquitetura x64 /usr/lib/systemd/boot/efi/systemd-bootx64.efi
será copiado para esp/EFI/systemd/systemd-bootx64.efi
and esp/EFI/BOOT/BOOTX64.EFI
, e systemd-boot será definido como a aplicação EFI padrão.
- Ao executar
bootctl install
, systemd-boot tentará localizar a ESP em/efi
,/boot
e/ boot/efi
. Definiresp
para um local diferente requer passar a opção--esp-path=esp
. (Veja bootctl(1) § OPTIONS para detalhes.) - Instalar systemd-boot sobrescreverá qualquer arquivo existente em
esp/EFI/BOOT/BOOTX64.EFI
, por exemplo, a versão da Microsoft deste arquivo.
Para concluir a instalação, configure o systemd-boot.
Instalação usando XBOOTLDR
Uma partição /boot separada do tipo "Linux extended boot" (XBOOTLDR) pode ser criada para manter o kernel e initramfs separados da ESP. Isso é particularmente útil para fazer dual boot com Windows com uma ESP existente que é muito pequena.
Prepare uma ESP como de costume e crie outra partição para XBOOTLDR na mesma unidade física. A partição XBOOTLDR deve ter um GUID de tipo de partição de bc13c2ff-59e6-4262-a352-b275fd6f7172
[1]. O tamanho da partição XBOOTLDR deve ser grande o suficiente para acomodar todos os kernels que você vai instalar.
- systemd-boot não faz verificação de tipo do sistema de arquivos para a ESP. Então, é possível usar qualquer sistema de arquivos que sua implementação UEFI possa ler.
- UEFI pode pular o carregamento de outras partições que não são a ESP quando o modo "fast boot" está habilitado. Isto pode levar ao systemd-boot falhando em encontrar entradas na partição XBOOTLDR; neste caso, desabilite o modo "fast boot";
- A partição XBOOTLDR deve estar no mesmo disco físico que a ESP para que o systemd-boot seja reconhecido.
Durante a instalação, monte a ESP em /mnt/efi
e a partição XBOOTLDR em /mnt/boot
.
Uma vez no ambiente chroot, use o comando:
# bootctl --esp-path=/efi --boot-path=/boot install
Para concluir a instalação, configure o systemd-boot.
Atualizando o gerenciador de boot EFI
Toda vez que tiver uma nova versão do systemd-boot, o gerenciador de boot EFI pode ser opcionalmente reinstalado pelo usuário. Isto pode ser feito manualmente ou automaticamente. As duas abordagens são descritas a seguir.
Atualização manual
Use bootctl para atualizar o systemd-boot:
# bootctl update
bootctl install
, systemd-boot tentará localizar a ESP em /efi
, /boot
e /boot/efi
. Definir esp
para um local diferente requer passar a opção --esp-path=esp
.Atualização automática
Para atualizar o systemd-boot automaticamente, use um serviço do systemd ou um hook do pacman. Os dois métodos são descritos abaixo.
Serviço do systemd
A partir da versão 250, systemd vem com systemd-boot-update.service
. Habilitar este serviço atualizará o bootloader na próxima inicialização.
hook do pacman
O pacote systemd-boot-pacman-hookAUR adiciona um hook do pacman que é executado toda vez que o systemd é atualizado.
Em vez de instalar systemd-boot-pacman-hook, você pode preferir colocar manualmente o seguinte arquivo em /etc/pacman.d/hooks/
:
/etc/pacman.d/hooks/95-systemd-boot.hook
[Trigger] Type = Package Operation = Upgrade Target = systemd [Action] Description = Gracefully upgrading systemd-boot... When = PostTransaction Exec = /usr/bin/systemctl restart systemd-boot-update.service
Se você tem Secure Boot habilitado, você pode querer adicionar um hook do pacman para automaticamente reassinar o kernel e o bootloader a cada atualização dos respectivos pacotes:
/etc/pacman.d/hooks/99-secureboot.hook
[Trigger] Operation = Install Operation = Upgrade Type = Package Target = linux Target = systemd [Action] Description = Assinar o Kernel para Secure Boot When = PostTransaction Exec = /usr/bin/find /boot -type f ( -name vmlinuz-* -o -name systemd* ) -exec /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null | /usr/bin/grep -q "signature certificates"; then /usr/bin/sbsign --key arquivo-de-chave --cert arquivo-de-certificado --output "$1" "$1"; fi' _ {} ; Depends = sbsigntools Depends = findutils Depends = grep
Certifique-se de que os parâmetros --key arquivo-de-chave --cert arquivo-de-certificado
apontam para sua chave de assinatura e certificado. Para melhor compreensão deste hook, consulte sbverify(1) e sbsign(1).
Configuração
Configuração do carregador
A configuração do carregador é armazenada no arquivo esp/loader/loader.conf
. Veja loader.conf(5) § OPTIONS para detalhes.
Um exemplo de configuração do carregador é mostrado abaixo:
esp/loader/loader.conf
default arch.conf timeout 4 console-mode max editor no
- systemd-boot não aceita tabulações como indentação, use espaços.
-
default
etimeout
podem ser mudados no menu de inicialização e as mudanças vão ser salvas como variáveis EFILoaderEntryDefault
eLoaderConfigTimeout
, sobrescrevendo estas opções. -
bootctl set-default ""
ebootctl set-timeout ""
pode ser usado para limpar as variáveis EFI sobrescrevendo as opçõesdefault
etimeout
, respectivamente. - Um arquivo de configuração básico está localizado em
/usr/share/systemd/bootctl/loader.conf
.
Adicionando carregadores
systemd-boot buscará pelos itens do menu de inicialização em esp/loader/entries/*.conf
e adicionalmente em boot/loader/entries/*.conf
se usar XBOOTLDR. Observe que as entradas em esp
só podem usar arquivos (por exemplo, kernels, initramfs, imagens, etc.) dentro de esp
. Da mesma forma, entradas em boot
só podem usar arquivos em boot
.
As opções possíveis são:
-
title
– nome do sistema operacional. necessário. -
version
– versão do kernel, mostrado somente quando múltiplas entradas com o mesmo título existe. Opcional. -
machine-id
– identificador da máquina em/etc/machine-id
, mostrado somente quando múltiplas entradas com o mesmo título e versão existem. Opcional. -
efi
– aplicação EFI a iniciar, relativo ao seu ESP (esp
); ex./vmlinuz-linux
. Este parâmetro oulinux
(veja abaixo) é necessário. -
options
– opções da linha de comando separadas por vírgula para passar para o programa EFI ou parâmetros do kernel. Opcional, mas você precisará no mínimoroot=dev
se inicializar o Linux. Este parâmetro pode ser omitido se a partição raiz é atribuída ao tipo Root Partition GUID correto como definido na Discoverable Partitions Specification e se o hook do mkinitcpio dosystemd
está presente.
Para inicializar o Linux, você pode também usar linux
ao invês de efi
. Ou initrd
em adição a options
. A sintaxe é:
-
linux
ouinitrd
seguido por um caminho relativo dos arquivos correspondentes na ESP (p. ex.,/vmlinuz-linux
); isto vai ser automaticamente traduzido emefi caminho
eoptions initrd=caminho
– esta sintaxe é somente suportada por conveniência e não há diferenças em função.
options
está presente na entrada de boot e Secure Boot está desabilitado, o valor de options
vai sobrescrever qualquer linha .cmdline
inserida na imagem EFI que está especificada pelo efi
ou linux
(veja Imagem de kernel unificada#Preparando uma imagem de kernel unificada). Com Secure Boot, no entanto, options
(e quaisquer modificações feitas a linha de comando do kernel na interface do gerenciador de boot) serão ignoradas, e somente as .cmdline
serão usadas. Um exemplo de arquivos de carregador iniciando o Arch a partir de um volume rotulado arch_os
e carregando o microcódigo da CPU da Intel é:
esp/loader/entries/arch.conf
title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options root="LABEL=arch_os" rw
esp/loader/entries/arch-fallback.conf
title Arch Linux (fallback initramfs) linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux-fallback.img options root="LABEL=arch_os" rw
systemd-boot vai automaticamente verificar no tempo de inicialização pelo Gerenciador de Boot do Windows na localização /EFI/Microsoft/Boot/Bootmgfw.efi
, shell do UEFI /shellx64.efi
e EFI Default Loader (carregador padrão EFI) /EFI/BOOT/bootx64.efi
, como também arquivos do kernel especialmente preparados em /EFI/Linux
. Quando detectado, as entradas correspondentes com títulos auto-windows
, auto-efi-shell
e auto-efi-default
, respectivamente, serão geradas. Estas entradas não precisam de configuração manual. No entanto, outras aplicações EFI não são detectadas automaticamente (diferente do rEFInd), então para inicializar o kernel Linux, entradas de boot devem ser criadas manualmente.
- As entradas de boot disponíveis que foram configuradas podem ser listadas com o comando
bootctl list
. - Um exemplo de arquivo de entrada está localizado em
/usr/share/systemd/bootctl/arch.conf
. - Os parâmetros do kernel para cenários como LVM, LUKS ou dm-crypt pode ser encontrado nas páginas relevantes.
Shells EFI ou outras aplicações EFI
No caso você ter instalado shells EFI com o pacote edk2-shell, systemd-boot vai detectar automaticamente e cirar uma nova entrada se o arquivo EFI for colocado em esp/shellx64.efi
.
Para fazer isso e para exemplo de comando após instalar o pacote seria:
# cp /usr/share/edk2-shell/x64/Shell.efi /boot/shellx64.efi
Por outro lado, caso você tenha instalado outros aplicativos EFI na ESP, você pode usar os seguintes trechos.
efi
é relativo ao ponto de montagem da sua esp. Se você montou em /boot
e seus binários EFI estão em /boot/EFI/xx.efi
e /boot/yy.efi
, então você deve especificar os parâmetros como efi /EFI/xx.efi
e efi /yy.efi
respectivamente.esp/loader/entries/fwupd.conf
title Firmware updator efi /EFI/tools/fwupdx64.efi
esp/loader/entries/gdisk.conf
title GPT fdisk (gdisk) efi /EFI/tools/gdisk_x64.efi
Inicializar a partir de outro disco
systemd-boot não pode iniciar binários de partições que não sejam a partição ESP ou XBOOTLDR, mas pode executar um script externo para fazê-lo.
Primeiro precisamos instalar o edk2-shell (será o interpretador a ser usado) e usando o shell EFI (como explicado acima) podemos usar o comando map para anotar o FS alias (ex: HD0a66666a2) e o caminho completo do arquivo EFI de destino (ex: EFI\Microsoft\Boot\Bootmgfw.efi).
Em seguida, usando o comando exit, podemos inicializar novamente no Linux, onde podemos criar a nova entrada. Para isso precisamos primeiro criar na raiz do ponto de montagem esp um nome de arquivo .nsh com o alias FS, dois pontos e o caminho EFI, aqui um exemplo:
esp/windows.nsh
HD0a66666a2:EFI\Microsoft\Boot\Bootmgfw.efi
Uma vez que criamos este arquivo, podemos continuar criando a entrada do carregador para executar o script:
esp/loader/entries/windows.conf
title Windows efi /shellx64.efi options -nointerrupt -noconsolein -noconsoleout windows.nsh
É importante que o caminho efi corresponda onde o edk2-shell foi copiado na partição esp, e o último argumento das opções corresponda ao nome do arquivo .nsh na raiz da partição esp. Observe também que o arquivo EFI edk2-shell pode ser movido para evitar a criação automática de entrada de systemd-boot.
Inicializando para a configuração de Firmware EFI
systemd-boot adicionará automaticamente uma entrada para inicializar na configuração do firmware UEFI se o firmware do seu dispositivo suportar a reinicialização na configuração do sistema operacional.
Suporte a hibernação
Veja Suspensão e hibernação.
Editor de parâmetros do kernel protegido por senha
Alternativamente você pode instalar systemd-boot-passwordAUR que suporta configuração básica da opção password
. Use sbpctl generate
para gerar um valor para esta opção.
Instale systemd-boot-password com o seguinte comando:
# sbpctl install esp
Com o editor habilitado, vai ser solicitado sua senha antes que você possa editar os parâmetros do kernel.
Dicas e truques
Veja systemd-boot(7) § KEY BINDINGS para as associações de teclas disponíveis dentro do menu de inicialização.
Escolhendo a próxima inicialização
O gerenciador de boot é integrado com o comando systemctl, permitindo escolher que opção você quer inicializar depois de reiniciar. Por exemplo, suponha que você tenha compilado um kernel customizado e criou um arquivo de entrada esp/loader/entries/arch-custom.conf
para inicializar ele, você pode executar
$ systemctl reboot --boot-loader-entry=arch-custom.conf
e seu sistema irá reiniciar nesta entrada mantendo a opção padrão intacta para inicializações subsequentes. Para ver uma lista de entradas possíveis use a opção --boot-loader-entry=help
.
Se você quer inicializar no firmware da sua placa-mãe diretamente, você pode usar esse comando:
$ systemctl reboot --firmware-setup
Imagens de kernel unificadas
Imagens de kernel unificadas em esp/EFI/Linux/
são originadas automaticamente pelo systemd-boot e não precisam de uma entrada em esp/loader/entries
. (Observe que as imagens de kernel unificadas devem ter uma extensão .efi
para serem identificadas por systemd-boot.)
esp/loader/entries
serão inicializados primeiro se nenhum default
estiver definido em esp/loader/loader.conf
. Remova essas entradas ou defina o padrão com o nome completo do arquivo, ou seja, default archlinux-linux.efi
Grml na ESP
PKGBUILD
está disponível: grml-systemd-bootAUR.Grml é um pequeno sistema live com uma coleção de software para administração e recuperação do sistema.
Para instalar Grml na ESP, precisamos somente copiar o kernel vmlinuz
, o initramfs initrd.img
, e a squashed image (Imagem compactada com sistema de arquivos somente leitura) grml64-small.squashfs
do arquivo iso para a ESP. Para fazer isso, primeiro baixe a grml64-small.iso e monte o arquivo (o ponto de montagem desse exemplo é mnt); o kernel e initramfs estão localizados em mnt/boot/grml64small/
, e a squashed image reside em mnt/live/grml64-small/
.
Depois, crie um diretório para Grml na sua ESP,
# mkdir -p esp/grml
e copie os arquivos mencionados acima para lá:
# cp mnt/boot/grml64small/vmlinuz esp/grml # cp mnt/boot/grml64small/initrd.img esp/grml # cp mnt/live/grml64-small/grml64-small.squashfs esp/grml
no último passo, crie uma entrada para o carregador do systemd-boot: em esp/loader/entries
crie um arquivo grml.conf
com o seguinte conteúdo:
esp/loader/entries/grml.conf
title Grml Live Linux linux /grml/vmlinuz initrd /grml/initrd.img options apm=power-off boot=live live-media-path=/grml/ nomce net.ifnames=0
Para uma visão geral das opções de boot disponíveis, consulte cheatcode for Grml.
systemd-boot em sistemas BIOS
Se você precisa de um gerenciador de boot para sistemas BIOS que segue a Boot Loader Specification, o systemd-boot pode funcionar. O gerenciador de boot Clover suporta inicializar de sistemas BIOS e oferece um ambiente EFI simulado.
Resolução de problemas
Instalando depois de inicializar no modo BIOS
Se inicializou no modo BIOS, você ainda pode instalar o systemd-boot, no entanto este processo precisa que você fale ao firmware para lançar o arquivo EFI do systemd-boot na inicialização, normalmente por meio de duas maneiras:
- você tem um Shell EFI funcionando em algum outro lugar.
- sua interface de firmware oferece uma maneira de apropriadamente definir o arquivo EFI que precisa ser carregado na inicialização.
Se você pode fazer isto, a instalação é mais fácil: vai para seu Shell EFI ou a interface de configuração do firmware e mude o arquivo EFI padrão da sua máquina para esp/EFI/systemd/systemd-bootx64.efi
.
Entrada manual usando efibootmgr
Se o comando bootctl install
falhou, você pode criar uma entrada de boot EFI manualmente usando efibootmgr:
# efibootmgr --create --disk /dev/sdX --part Y --loader "\EFI\systemd\systemd-bootx64.efi" --label "Gerenciador de Boot do Linux" --unicode
Onde /dev/sdXY
é a partição de sistema EFI.
\
) como o separadorEntrada manual usando bcdedit do Windows
Se por alguma razão você precisa criar uma entrada de boot EFI pelo Windows, você pode usar os seguintes comandos em um prompt de administrador:
> bcdedit /copy {bootmgr} /d "Gerenciador de Boot do Linux" > bcdedit /set {guid} path \EFI\systemd\systemd-bootx64.efi
Mude guid
para o id retornado pelo primeiro comando. Você pode também defini-lo como a entrada padrão usando
> bcdedit /default {guid}
Menu não aparece depois de atualização do Windows
Veja UEFI#Windows changes boot order.