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 -l
para 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?