EFI system partition (Português)
A partição de sistema EFI (em inglês EFI system partition, abreviado como ESP) é uma partição independente do sistema operacional que atua como o local de armazenamento para os gerenciadores de boot, aplicativos e drivers EFI a serem lançados pelo firmware UEFI. É obrigatório para a inicialização do UEFI.
A especificação UEFI determina o suporte para os sistemas de arquivos FAT12, FAT16 e FAT32 (consulte a especificação UEFI versão 2.7, seção 13.3.1.1), mas qualquer fornecedor em conformidade pode, opcionalmente, adicionar suporte para sistemas de arquivos adicionais; por exemplo, o firmware em Macs da Apple possui suporte ao sistema de arquivos HFS+.
Verificar uma partição existente
Se você estiver instalando o Arch Linux em um computador compatível com UEFI com um sistema operacional instalado, como Windows 10 por exemplo, é muito provável que você já tenha uma partição do sistema EFI.
Para descobrir o esquema de partição de disco e a partição do sistema, use fdisk como root no disco que você quer inicializar:
# fdisk -l /dev/sdx
O comando retorna:
- A tabela de partições do disco: indica
Tipo de rótulo do disco: gpt
se a tabela de partições for GPT ouTipo de rótulo do disco: dos
se for MBR. - A lista de partições no disco: Procure a partição do sistema EFI na lista, é uma partição pequena (normalmente cerca de 100–550 MiB) com um tipo
Sistema EFI
ouEFI (FAT-12/16/32)
. Para confirmar isso é a ESP, monte e verifique se ela contém um diretório chamadoEFI
, se contiver é definitivamente a ESP.
minfo
a partir de mtools.
# minfo -i /dev/sdxY :: | grep 'disk type'
Se você encontrou uma partição do sistema EFI existente, simplesmente prossiga para #Montar a partição. Se você não encontrou uma, você precisará criá-la, vá para #Criar a partição.
Criar a partição
As duas seções a seguir mostram como criar uma partição do sistema EFI (ESP).
Para fornecer espaço adequado para armazenar gerenciadores de boot e outros arquivos necessários para inicialização e para evitar problemas de interoperabilidade com outros sistemas operacionais a partição deve ter pelo menos 260 MiB. Para implementações de UEFI precoces e/ou com bugs, o tamanho de pelo menos 512 MiB pode ser necessário.
Discos particionados em GPT
Partição de sistema EFI em uma Tabela de Partição GUID é identificada pelo GUID de tipo de partição .
Escolha um dos métodos a seguir para criar uma ESP para um disco particionado em GPT:
- fdisk: Crie uma partição com o tipo de partição
EFI System
. - gdisk: Crie uma partição com o tipo de partição
EF00
. - GNU Parted: Crie uma partição com como o tipo de sistema de arquivos e defina a opção nela.
Continue com a seção #Formatar a partição abaixo.
Discos particionados em MBR
A partição do sistema EFI em uma tabela de partição Master Boot Record é identificada pelo ID de tipo de partição .
Escolha um dos métodos a seguir para criar uma ESP para um disco particionado em MBR:
- fdisk: Crie uma partição primária com o tipo de partição
EFI (FAT-12/16/32)
. - GNU Parted: Crie uma partição primária com como o tipo de sistema de arquivos e defina a opção nela.
Continue com a seção #Formatar a partição abaixo.
Formatar a partição
A especificação UEFI determina o suporte para os sistemas de arquivos FAT12, FAT16 e FAT32. Para evitar possíveis problemas com outros sistemas operacionais e também porque a especificação UEFI apenas exige suporte a FAT16 e FAT12 em mídia removível, recomenda-se usar o FAT32.
Após criar a partição, formate-a como FAT32. Para usar o utilitário , instale .
# mkfs.fat -F32 /dev/sdxY
Se você receber a mensagem , reduza o tamanho do cluster com ou ; caso contrário, a partição pode ser ilegível pelo UEFI. Veja para os tamanhos de cluster suportados.
Montar a partição
Os kernels, os arquivos initramfs e, na maioria dos casos, o microcódigo do processador, precisam ser acessados pelo gerenciador de boot ou pelo próprio UEFI para inicializar com sucesso o sistema. Portanto, se você quiser manter a configuração simples, sua opção de gerenciador de boot limita os pontos de montagem disponíveis para a partição do sistema EFI.
Pontos de montagem comuns
Os cenários mais simples para montar uma partição de sistema EFI são:
- montar a ESP em
/efi
e usar um gerenciador de boot que é capaz de acessar as imagens do kernel e initramfs que são armazenadas em outro local (normalmente /boot). Consulte Processo de inicialização do Arch#Gerenciador de boot para obter mais informações sobre os requisitos e recursos do gerenciador de boot. - montar a ESP em
/boot
. Esse é o método preferível ao inicializar diretamente um kernel de EFISTUB do UEFI.
Pontos de montagem alternativos
Se você não usar um dos métodos simples de #Montar a partição, você precisará copiar seus arquivos de inicialização para a ESP (referida daqui em diante como ).
# mkdir -p esp/EFI/arch # cp -a /boot/vmlinuz-linux esp/EFI/arch/ # cp -a /boot/initramfs-linux.img esp/EFI/arch/ # cp -a /boot/initramfs-linux-fallback.img esp/EFI/arch/
Além disso, você precisará manter os arquivos na ESP em dia com as atualizações posteriores do kernel. Não fazer isso pode resultar em um sistema não inicializável. As seções a seguir discutem vários mecanismos para automatizá-la.
Usando montagem com bind
Em vez de montar o próprio ESP para /boot
, você pode montar um diretório do ESP para /boot
usando uma montagem "bind" (consulte ). Isto permite que pacman atualize o kernel diretamente enquanto mantém a ESP organizada ao seu gosto.
Assim como em #Pontos de montagem alternativos, copie todos os arquivos de inicialização para um diretório em sua ESP, mas monte a ESP fora do /boot
. Em seguida, associe o diretório:
# mount --bind esp/EFI/arch /boot
Após confirmar o sucesso, edite seu Fstab para tornar as alterações persistentes:
Usando systemd
O systemd apresenta tarefas acionadas por eventos. Nesse caso específico, a capacidade de detectar uma alteração no caminho é usada para sincronizar os arquivos kernel EFISTUB e initramfs quando eles são atualizados em . O arquivo assistido por alterações é o initramfs-linux-fallback.img
, pois este é o último arquivo construído pelo mkinitcpio, para garantir que todos os arquivos tenham sido construídos antes de iniciar a cópia. Os arquivos de caminho e serviço systemd a serem criados são:
Usando eventos do sistema de arquivos
Eventos de sistemas de arquivos podem ser usados para executar um script sincronizando o kernel EFISTUB após atualizações do kernel. Um exemplo com incron a seguir:
/usr/local/bin/efistub-update
#!/bin/sh cp -af /boot/vmlinuz-linux ''esp''/EFI/arch/ cp -af /boot/initramfs-linux.img ''esp''/EFI/arch/ cp -af /boot/initramfs-linux-fallback.img ''esp''/EFI/arch/
Para usar este método, habilite o .
Usando hook do mkinitcpio
Mkinitcpio pode gerar um hook que não precisa de um daemon de nível de sistema para funcionar. Ele gera um processo de segundo plano que aguarda a geração de , initramfs-linux.img
e initramfs-linux-fallback.img
antes de copiar os arquivos.
Adicione à lista de hooks em .
Usando predefinição de mkinitcpio
Como as predefinições em /etc/mkinitcpio.d/
possuem suporte a script shell, o kernel e initramfs podem ser copiados apenas editando as predefinições.
Substituindo o hook do mkinitcpio acima
Edite o arquivo :
Para testar isso, basta executar:
# rm /boot/initramfs-linux-fallback.img # rm /boot/initramfs-linux.img # mkinitcpio -p linux
Usando hook do pacman
Uma última opção depende dos hooks do pacman que são executados no final da transação.
O primeiro arquivo é um hook que monitora os arquivos relevantes e é executado se eles foram modificados na transação anterior.
/etc/pacman.d/hooks/999-kernel-efi-copy.hook
[Trigger] Type = Path Operation = Install Operation = Upgrade Target = usr/lib/modules/*/vmlinuz Target = usr/lib/initcpio/* Target = boot/*-ucode.img [Action] Description = Copying linux and initramfs to EFI directory... When = PostTransaction Exec = /usr/local/bin/kernel-efi-copy.sh
O segundo arquivo é o próprio script. Crie o arquivo e torne-o executável:
Problemas conhecidos
ESP no RAID
É possível tornar a ESP parte de uma matriz RAID1, mas isso traz o risco de corrupção de dados, e outras considerações precisam ser feitas ao criar a ESP. Veja e para detalhes e veja Inicialização com UEFI e RAID1 (em inglês) para um guia mais aprofundado com uma solução.
A parte principal é usar para manter os metadados RAID no final da partição, caso contrário o firmware não poderá acessá-los:
# mdadm --create --verbose --level=1 --metadata=1.0 --raid-devices=2 /dev/md/ESP /dev/sdaX /dev/sdbY
Firmware não vê o diretório EFI
Se você der ao sistema de arquivos um nome de volume (com a opção ), certifique-se de nomeá-lo como algo diferente de "EFI". Isso pode desencadear um bug em alguns firmwares (devido ao nome do volume que corresponde ao nome do diretório EFI) que fará com que o firmware atue como o diretório EFI não existe.