Qual é o tamanho mínimo absoluto que uma partição do sistema UEFI pode ter?

Qual é o tamanho mínimo absoluto que uma partição do sistema UEFI pode ter?

Suponha que eu tenha uma unidade flash e queira que ela seja inicializável. Suponha que eu também tenha um arquivo EFI básico que realizará alguma coisa. Então, qual é o tamanho mínimo que o ESP pode ter? Eu li que tem 100 MB, mas parece ser especificamente em relação ao Windows. Uma partição EFI deve ter um determinado tamanho para que o sistema a reconheça? Ou 100 é apenas recomendado porque os sistemas operacionais modernos usam tanto?

Responder1

100 é recomendado apenas porque os sistemas operacionais modernos usam tanto?

Observe que o tamanho da partição de 100 MB é o mínimo. Embora não haja nenhuma especificação definida pela UEFI para um tamanho mínimo, masMicrosoftrecomenda este tamanho de 100 MB para seus sistemas operacionais.

Vamos pensar que precisamos que a partição EFI seja formatada usando o sistema de arquivos FAT32. O tamanho mínimo da partição da unidade FAT32 é calculado comosector_size x 65527.

Em unidades nativas de formato avançado 4K, há 4 KB por setor. Nesse caso, o tamanho mínimo da partição para a unidade FAT32 é calculado como4 KB x 65527 = 256 MB. É por isso que o tamanho mínimo recomendado para unidades 4K é 260 MB.

Mas nas unidades Advanced Format 512e, o tamanho do setor emulado é de 512 bytes. Nesse caso, o tamanho mínimo da partição para a unidade FAT32 é calculado como512 bytes x 65527 = 32 MB, que é menor que o tamanho mínimo de 100 MB para esta partição.

Uma partição EFI deve ter um determinado tamanho para que o sistema a reconheça?

Embora a Microsoft recomende 100 MB para seus sistemas operacionais, os fóruns Linux sugerem mais para sistemas operacionais baseados em Linux ou para qualquer situação de inicialização dupla ou inicialização múltipla.

Oautordo gdisk sugere 550 MiB.

De acordo com o Arch Linuxfórum, para evitar possíveis problemas com alguns EFIs, o tamanho do ESP deve ser de pelo menos 512 MiB. Recomenda-se 550 MiB para evitar confusão de MiB/MB e criação acidental de FAT16.

Portanto, a diretriz de tamanho mais comum para partição de sistema EFI é entre 100 MB e 550 MB. Uma das razões por trás disso é que é difícil redimensionar posteriormente, pois é a primeira partição da unidade. A partição EFI pode conter idiomas, fontes, firmware BIOS e outros itens relacionados ao firmware. Existem alguns firmware/software instalados na partição EFI em vez da unidade de dados. E há alguns que desejam no futuro a capacidade de adicionar coisas ao ESP.

Como pode ser difícil aumentar o tamanho caso seja necessário posteriormente e o tamanho do disco rígido hoje em dia seja maior, um grande número de tamanho como 100 MB ou 550 MB é recomendado para ESP. Mas, em geral, ele usa apenas alguns quilobytes de espaço.

Suponha que eu tenha uma unidade flash e queira que ela seja inicializável.

Embora não esteja claro em sua declaração, se você tentar tornar seu pen drive inicializável como uma unidade compatível com UEFI para instalação do Windows, não haverá necessidade de criar ESP extra no pen drive. UsarRufusou ferramentas semelhantes que cuidarão de convertê-lo em uma unidade habilitada para UEFI. Mas o ESP é necessário no seu disco rígido ao instalar o Windows nessa unidade.

Responder2

O tamanho mínimo absoluto que você pode usar envolve o uso de um sistema de arquivos fat12 (então32 KB) e, na prática, requer o uso de algum gerenciador de inicialização mínimo que incorpore drivers de sistema de arquivos para ler sua partição primária - e o kernel contido nela - o que implica grub ou rEFInd. Uma imagem típica de instalação do grub terá cerca de 200 KB, o que ainda não é nada ruim.

Já faz algum tempo que estou inicializando bem com um ESP fat12 de 2 MB, então claramente isso pode ser feito!

Não tenho certeza de onde vem o conselho comum para usar 512 MB, mas oArco Wikifoi recentemente alterado por... mim... para fazer referência à possibilidade de gordura12.

http://www.rodsbooks.com/linux-uefi/parece indicar que pelo menos fat16 deve funcionar bem, exceto paraconfundindo o instalador do Windows, o que não é realmente relevante IMHO. O Arch Wiki parece ter se baseado nesse conselho, mas não tenho coragem suficiente para reescrevê-lo totalmente.

Como mencionei no Wiki, a especificação UEFIexige drivers fat12. Já ouvi argumentos de que "apenas unidades removíveis são obrigatórias", deixando aberta a possibilidade de que alguém, em algum lugar, tenha ou escreva uma implementação UEFI que inclua esses drivers de sistema de arquivos fat12, mas de alguma forma proíba seu uso para montar a partição do sistema UEFI, mas eu pessoalmente considero isso improvável.

Responder3

Para Linux, no terminal, execute sudo fdisk -lpara descobrir o tamanho do setor da sua unidade de armazenamento.

Como a partição EFI é formatada como FAT32, o tamanho mínimo da partição da unidade FAT32 é calculado como sector_size x 65527. Para armazenamento moderno, 512 bytes x 65527 = 32 MiB. O executável do gerenciador de inicialização EFI tem cerca de 125 KiB, portanto, o mínimo de 32 MiB é mais do que o necessário para o tamanho da partição EFI. Existem outros argumentos para tamanhos maiores, mas a menos que você execute nessas situações específicas, maior não é necessário.

Responder4

@Pôster original: Você deseja saber o tamanho mínimo exigido de uma partição EFI, mas não informou qual sistema operacional tem em mente. Não há um requisito único. Lendo informações na internet, algumas pessoas dizem “2 mb” (acima), enquanto outras sugerem terabytes de espaço. Sugiro que todos escrevam os requisitos mínimos para seu próprio sistema, então teremos uma boa lista de todos os requisitos do sistema operacional. Então deixe-me responder sua pergunta sobre o sistema operacional Debian:

uname -r

5.10.0-6-amd64

uname -a

Linux localhost 5.10.0-6-amd64 #1 SMP Debian 5.10.28-1 (2021-04-09) x86_64 GNU/Linux

e Windows 10:

ver

Microsoft Windows [Version 10.0.19042.804]

Agora, ao instalar o Debian, queria saber o tamanho necessário para a partição EFI. Foi assim que encontrei esta página, exceto que as informações fornecidas aqui não são úteis. Então eu penso, 5 MB é o suficiente? Acontece que o instalador do Debian tem um requisito mínimo de 35 MB.

Observe que se você particionar a partição EFI primeiro com fdisk e depois tentar instalar o Debian, ele recusará com uma mensagem de erro enigmática:

The attempt to mount a file system with type vfat in SCSII (0,0,0), partition #1 (sda) at /boot/efi failed.

Se você comparar os sinalizadores definidos pelo fdisk e pelo instalador Debian (se você permitir a partição):

fdisk -> "B K"

Debian -> "B f"

Selecione novamente a partição EFI dentro do instalador Debian para corrigir os sinalizadores. Estúpido Debian.

Além disso, ao usar o fdisk dentro do Hyper-V, você não pode exibir a maldita lista de códigos hexadecimais da partição, porque o modo avançado (VmConnect) não está funcionando, o SSH não está instalado, então a lista de códigos hexadecimais gerada pelo fdisk simplesmente voa e não há como rolar a janela do VmConnect para cima. No VMWare Workstation isso funciona por SHIFT+PageUp, mas não consigo descobrir como fazer isso no Hyper-V, na verdade ninguém fez essa pergunta! Então finalmente descobri que a partição EFI é "1" no fdisk.

De qualquer forma, a quantidade de espaço exigida pelo instalador Debian é REALMENTE necessária? Depois de instalar o Debian, verifiquei o espaço realmente necessário:

mount /dev/sda1 /mnt

cd /mnt

du -hs

/efi/debian
    -rwx------ 1 root root    1K 27. Apr 00:11 BOOTX64.CSV
    -rwx------ 1 root root 1180K 27. Apr 00:11 fbx64.efi
    -rwx------ 1 root root    1K 27. Apr 00:11 grub.cfg
    -rwx------ 1 root root 1634K 27. Apr 00:11 grubx64.efi
    -rwx------ 1 root root 1233K 27. Apr 00:11 mmx64.efi
    -rwx------ 1 root root 1292K 27. Apr 00:11 shimx64.efi

5,3M

5,3 milhões! Você tem coragem de sugerir 550mb, um gigabyte, 10 terabytes, mais algum lance?! Algumas pessoas dirão que o gerenciador de inicialização grub está situado na partição EFI, outros dizem que "update-initramfs" gravará nesta partição, é por isso que é necessário tanto espaço. Besteira, tudo isso!

Mas, infelizmente, o dano foi causado e agora tenho que lidar com isso.

mount /dev/sda1 /mnt

cp -r /mnt/EFI /work

umount /dev/sda1

blkid

/dev/sda1: UUID="6995-68F6" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="a7196942-ec1b-e64a-9182-009a28d2cc44"

gdisk /dev/sda
d 1
n 1
+5466KB
EF00
w

umount /dev/sda1

mkfs.fat /dev/sda1

mount /dev/sda1 /mnt

mv /work/EFI /mnt

umount /dev/sda1

Corrija o PARTUUID:

partprobe /dev/sda

blkid

gdisk /dev/sda

x
c (1) -> set the old PARTUUID (a7196942-ec1b-e64a-9182-009a28d2cc44 in my example)

corrija o UUID no fstab:

nano /etc/fstab -> set the new UUID

Por que “mkfs.fat” (acima) e não “mkfs.fat -F32”? É por isso:

https://github.com/dosfstools/dosfstools/blob/master/src/mkfs.fat.c

According to Microsoft FAT specification (fatgen103.doc) disk with 65525 clusters (or more) is FAT32

define MIN_CLUST_32 65525

O diskpart também se recusará a formatar como fat32:

format fs=fat32 quick

Volume too small

Portanto, 30 MB de espaço economizado, mas não alocado. Como alocar? Executar o fdisk, excluir a partição ext4 e recriá-la incluindo o espaço não alocado (dn, tudo padrão) resulta em um sistema não inicializável. Na rede, eles dirão que estender uma partição pelo espaço não alocado ANTES desta partição não é possível, o espaço bruto precisa ser movido para o final do disco rígido e depois estendido. Como mover o espaço não alocado para o final? Nenhuma idéia. Tentei fdisk, gdisk, parted, MS diskpart. Não consigo descobrir. Finalmente baixei "gparted-live-1.2.0-1-amd64.iso". gParted foi capaz de estender a partição ext4 pelo espaço não alocado, exceto que deixou 1 MB de espaço no final do disco rígido. Na internet, eles vão te dizer, isso é feito de acordo com as especificações. Realmente? Interessante então que o fdisk NÃO deixa esse megabyte no final, nem o diskpart da Microsoft ao estender uma partição. Alguém na internet disse: “tem apenas 1 megabyte e você não quer violar as especificações para salvá-lo”. Vou economizar esse pobre megabyte, mesmo que tenha que atropelar todas as especificações que estão por aí! Não se preocupe, pobre megabyte negligenciado, vou salvá-lo!

Então eu enganei o gParted, hehe. Mudei o espaço não alocado para o final do disco, sem alocá-lo. Então fechei o gParted e usei o fdisk para estender a partição ext4, e ele atribuiu TODO o espaço a ela, incluindo o pobre megabyte:

fdisk /dev/sda

F
    Start   End     Sectors Size
    14336   73727   59392   29M

d 2
n 2 14336

fdisk -l

Device     Start      End  Sectors  Size Type
/dev/sda1   2048    12979    10932  5,3M EFI System
/dev/sda2  14336 20971486 20957151   10G Linux filesystem

Sobre o Windows. Então a MS diz, 100 MB efi + 16 mb msr. E, claro, os notórios copypasters, que sempre copiam e colam as informações sem verificá-las, espalham essa desinformação por toda a internet. Mas essa quantidade de espaço é realmente necessária? Vamos dar uma olhada no que reside na partição EFI:

 Verzeichnis von B:\efi\boot

    1.558.344 bootx64.efi

Verzeichnis von B:\efi\microsoft\boot

    28.672 bcd

Verzeichnis von B:\efi\microsoft\boot\fonts

    48.992 wgl4_boot.ttf

Anzahl der angezeigten Dateien:
           3 Datei(en), 1.636.008 Bytes

Imprimo a listagem só para você, sei o que tem lá, já que eu mesmo coloquei os arquivos lá, ao restaurar uma imagem do Windows para uma máquina EFI (a imagem foi criada por dism em uma máquina MBR). É quase impossível descobrir quais arquivos são realmente necessários. Por tentativa e erro, descobri que você só precisa dos 3 (acima)

diskpart

select disk 0

select partition 1

assign letter b

mkdir b:\efi
mkdir b:\efi\boot
mkdir b:\efi\microsoft
mkdir b:\efi\microsoft\boot
mkdir b:\efi\microsoft\boot\fonts

copy c:\windows\boot\efi\bootmgfw.efi b:\efi\boot\bootx64.efi

copy c:\windows\boot\fonts\wgl4_boot.ttf b:\efi\microsoft\boot\fonts

A loja bcd você mesmo tem que criar, não vou entrar em detalhes aqui, então:

copy X:\bcd b:\efi\microsoft\boot

Então 1.636.008! A Microsoft disse, 116 MB? E essas informações foram copiadas por toda a internet. Eu segui essas instruções primeiro, o idiota que sou, mas agora queria ver se os tamanhos exigidos pela MS são REALMENTE necessários (como tornar o Windows não inicializável):

dism /Capture-Image /ImageFile:c:\copy\efi.wim /CaptureDir:b:\ /Name:efi /Compress:fast

diskpart

select disk 0

select partition 0

delete partition override
    efi killed

select partition 1

delete partition override
    msr killed

create partition efi size=2

format fs=fat quick

assign letter b

dism /Apply-Image /ImageFile:c:\copy\efi.wim /Index:1 /ApplyDir:b:\

Cruze os dedos, vou reiniciar! Houston, relatando a decolagem bem-sucedida do foguete do Windows!... Houston, relatando a inicialização bem-sucedida do Windows e o login da conta! Houston, a Microsoft são um bando de mentirosos!

Então economizamos 114 MB, mas esse espaço não está alocado.

parte do disco?

Hahaha!

diskmgmt.msc

Hahaha Hahaha!

Então o que? gParted novamente, eu acho. Não é exatamente uma boa ideia usar um programa Linux para mexer em uma partição NTFS, mas vamos tentar. Então movi o espaço não alocado para o final do disco rígido. Funciona. Reiniciei o Windows a partir do DVD novamente (dvd virtual com ISO montado no meu caso, já que estava fazendo isso no Hyper-V), então:

diskpart

select disk 0

select partition 1

extend

Feito.

list partition

Partition ###  Typ               Größe    Offset
-------------  ----------------  -------  -------
Partition 1    System            2048 KB  1024 KB
Partition 2    Primär              39 GB  3072 KB

select partition 1

detail partition

Volume ###  Bst  Bezeichnung  DS     Typ         Größe    Status     Info
----------  ---  -----------  -----  ----------  -------  ---------  --------
* Volume 1                      FAT    Partition   2048 KB  Fehlerfre  System

Mas e se você quisesse deletar as partições EFI e MSR através de ferramentas Linux? Não sei por que, mas isso resulta em um sistema Windows que não inicializa. Passei exatamente os mesmos parâmetros para gdisk/fdisk/parted e para o diskpart, mas todas essas ferramentas quebram alguma coisa! Excluindo a partição MSR no diskpart:

select partition 1

delete partition override

Reinicie, o Windows inicializa.

A mesma coisa no gdisk!:

gdisk /dev/sda

d (select msr partition)
w

Reinicialize, recebo o maldito logotipo do Hyper-V na minha cara, parado lá para sempre, o sistema não inicializa. Razão?

informação relacionada