Каков минимальный размер системного раздела UEFI?

Каков минимальный размер системного раздела UEFI?

Предположим, у меня есть флешка, и я хочу, чтобы она была загрузочной. Предположим, у меня также есть базовый файл EFI, который что-то сделает. Итак, каков минимальный размер ESP? Я читал, что он составляет 100 МБ, но это, похоже, касается только Windows. Должен ли раздел EFI быть определенного размера, чтобы система его распознала? Или 100 просто рекомендуется, потому что современные операционные системы используют именно столько?

решение1

Рекомендуется ли значение 100 только потому, что современные операционные системы используют именно столько?

Обратите внимание, что минимальный размер раздела составляет 100 МБ. Хотя UEFI не устанавливает спецификацию минимального размера, ноМайкрософтрекомендует размер 100 МБ для своих операционных систем.

Предположим, нам нужно отформатировать раздел EFI с использованием файловой системы FAT32. Минимальный размер раздела диска FAT32 рассчитывается какsector_size x 65527.

В дисках Advanced Format 4K Native на сектор приходится 4 КБ. В этом случае минимальный размер раздела для диска FAT32 рассчитывается как4 KB x 65527 = 256 MB. Вот почему рекомендуемый минимальный размер для дисков 4K составляет 260 МБ.

Но в дисках Advanced Format 512e размер эмулируемого сектора составляет 512 байт. В этом случае минимальный размер раздела для диска FAT32 рассчитывается как512 bytes x 65527 = 32 MB, что меньше минимального размера для этого раздела в 100 МБ.

Должен ли раздел EFI иметь определенный размер, чтобы система его распознала?

Хотя Microsoft рекомендует 100 МБ для своих операционных систем, на форумах Linux предлагается больше для операционных систем на базе Linux или для любых ситуаций с двойной или мультизагрузкой.

Theавторgdisk предлагает 550 МБ.

Согласно Arch LinuxФорумЧтобы избежать потенциальных проблем с некоторыми EFI, размер ESP должен быть не менее 512 МБ. Рекомендуется 550 МБ, чтобы избежать путаницы с МБ/МБ и случайного создания FAT16.

Итак, наиболее распространенный размер системного раздела EFI составляет от 100 МБ до 550 МБ. Одна из причин этого заключается в том, что его трудно изменить позже, так как это первый раздел на диске. Раздел EFI может содержать языки, шрифты, прошивку BIOS и другие материалы, связанные с прошивкой. Некоторые прошивки/программы устанавливаются в раздел EFI вместо диска с данными. А некоторые хотят иметь возможность в будущем добавлять что-то в ESP.

Поскольку может быть сложно увеличить размер, если он понадобится позже, а размер жесткого диска сейчас больше, для ESP рекомендуется большое число, например 100 МБ или 550 МБ. Но в общем случае он использует только несколько килобайт пространства.

Предположим, у меня есть флешка, и я хочу сделать ее загрузочной.

Хотя из вашего утверждения это не ясно, если вы попытаетесь сделать свой флеш-накопитель загрузочным как UEFI-совместимый диск для установки Windows, то нет необходимости создавать дополнительный ESP на флеш-накопителе. Используйтеруфусили аналогичные инструменты, которые позаботятся о его преобразовании в диск с поддержкой UEFI. Но ESP необходим на вашем жестком диске при установке Windows на этот диск.

решение2

Абсолютно минимальный размер, который вам подойдет, подразумевает использование файловой системы fat12 (т.е.32 КБ), и на практике требует использования минимального менеджера загрузки, включающего драйверы файловой системы для чтения вашего основного раздела -- и содержащегося там ядра -- что подразумевает grub или rEFInd. Типичный образ grub-install будет иметь размер около 200 КБ, что все еще совсем неплохо.

Я уже довольно долго прекрасно загружаюсь с 2 МБ FAT12 ESP, так что это явно возможно!

Я не совсем уверен, откуда взялся распространенный совет использовать 512 МБ, ноАрка Викинедавно был изменен... мной... для ссылки на возможность fat12.

http://www.rodsbooks.com/linux-uefi/похоже, что по крайней мере fat16 должен работать нормально, за исключениемзапутывание установщика Windows, что, ИМХО, не совсем уместно. Arch Wiki, похоже, основывается на этом совете, но у меня не хватает смелости полностью его переписать.

Как я уже упоминал в Википедии, спецификация UEFIтребует драйверы fat12. Я слышал аргументы о том, что «обязательны только съемные диски», оставляя открытой возможность того, что кто-то где-то напишет или напишет реализацию UEFI, которая будет включать эти драйверы файловой системы fat12, но каким-то образом запрещает их использование для монтирования системного раздела UEFI, но я лично считаю это маловероятным.

решение3

Для Linux запустите в терминале команду, sudo fdisk -lчтобы узнать размер сектора вашего накопителя.

Поскольку раздел EFI отформатирован как FAT32, минимальный размер раздела диска FAT32 рассчитывается как sector_size x 65527. Для современных хранилищ это 512 байт x 65527 = 32 МБ. Исполняемый файл менеджера загрузки EFI занимает около 125 Кб, поэтому минимум в 32 МБ больше, чем необходимо для размера раздела EFI. Существуют и другие аргументы в пользу больших размеров, но если вы не работаете в этих конкретных ситуациях, больший размер не нужен.

решение4

@Original poster: Вы хотите узнать минимальный требуемый размер раздела EFI, но вы не указали, какую ОС вы имеете в виду. Единого требования нет. Читая информацию в интернете, некоторые люди говорят "2 МБ" (выше), в то время как другие предлагают терабайты пространства. Я предлагаю каждому написать минимальные требования для своей собственной системы, тогда у нас будет хороший список всех требований к ОС. Итак, позвольте мне ответить на ваш вопрос относительно ОС 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

и Windows 10:

ver

Microsoft Windows [Version 10.0.19042.804]

Теперь, при установке Debian, я хотел узнать размер, необходимый для раздела EFI. Вот как я нашел эту страницу, за исключением того, что предоставленная здесь информация бесполезна. Так что я думаю, 5 МБ достаточно? Оказывается, установщик Debian имеет минимальные требования в 35 МБ.

Обратите внимание, что если вы сначала разметите раздел EFI с помощью fdisk, а затем попытаетесь установить Debian, он откажется и выдаст загадочное сообщение об ошибке:

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

Если сравнить флаги, установленные fdisk и установщиком Debian (если вы разрешите ему разбиение):

fdisk -> "B K"

Debian -> "B f"

Повторно выберите раздел EFI внутри установщика Debian, чтобы исправить флаги. Тупой Debian.

Кроме того, при использовании fdisk внутри Hyper-V вы не можете получить чертов список шестнадцатеричных кодов разделов для отображения, потому что расширенный режим (VmConnect) не работает, SSH не установлен, поэтому список шестнадцатеричных кодов, выводимый fdisk, просто пролетает мимо, и нет возможности прокрутить окно VmConnect вверх. В VMWare Workstation это работает с помощью SHIFT+PageUp, но я не могу найти, как это сделать в Hyper-V, на самом деле, никто даже не задавал этот вопрос! Так что я наконец узнал, раздел EFI - это "1" в fdisk.

В любом случае, ДЕЙСТВИТЕЛЬНО ли нужно то количество места, которое требуется установщику Debian? После установки Debian я проверил реально необходимое пространство:

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,3M! У вас хватает наглости предлагать 550мб, гигабайт, 10 террабайт, есть еще предложения?! Некоторые скажут, что загрузчик grub находится на разделе EFI, другие скажут, что "update-initramfs" будет писать в этот раздел, поэтому и требуется так много места. Чушь, все это!

Но, увы, ущерб нанесен, и теперь мне придется с этим разбираться.

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

Исправьте PARTUUID:

partprobe /dev/sda

blkid

gdisk /dev/sda

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

исправьте UUID в fstab:

nano /etc/fstab -> set the new UUID

Почему "mkfs.fat" (выше), а не "mkfs.fat -F32"? Вот почему:

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

diskpart также откажется форматировать как fat32:

format fs=fat32 quick

Volume too small

Итак, 30 МБ места сэкономлено, но не распределено. Как распределить? Запуск fdisk, удаление раздела ext4 и его повторное создание, включая нераспределенное пространство (dn, все по умолчанию), приводит к тому, что система не загружается. В сети вам скажут, что расширение раздела на нераспределенное пространство ДО этого раздела невозможно, сырое пространство нужно переместить в конец жесткого диска, а затем расширить. Как переместить нераспределенное пространство в конец? Понятия не имею. Пробовал fdisk, gdisk, parted, MS diskpart. Не могу найти. Поэтому я наконец скачал "gparted-live-1.2.0-1-amd64.iso". gParted смог расширить раздел ext4 на нераспределенное пространство, за исключением того, что он оставил 1 МБ места в конце жесткого диска. В сети вам скажут, что это делается в соответствии со спецификациями. Серьезно? Интересно, что fdisk НЕ оставляет этот мегабайт в конце, как и diskpart от Microsoft при расширении раздела. Кто-то в интернете сказал: "это всего лишь 1 мегабайт, и вы не хотите нарушать спецификации, чтобы сохранить его". Я сохраню этот бедный мегабайт, даже если мне придется попрать все существующие спецификации! Не волнуйся, бедный забытый мегабайт, я тебя сохраню!

Так что я обманул gParted, хе-хе. Я переместил нераспределенное пространство в конец диска, не выделяя его. Затем я закрыл gParted и использовал fdisk вместо этого, чтобы расширить раздел ext4, и он назначил ему ВСЕ пространство, включая несчастный мегабайт:

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

О Windows. Так вот, MS говорит, 100 МБ efi + 16 МБ msr. И, конечно же, печально известные копипейстеры, которые всегда копируют-вставляют информацию, не проверяя ее, распространяют эту дезинформацию по всему интернету. Но действительно ли необходимо такое количество места? Давайте посмотрим, что находится в разделе 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

Я распечатываю список специально для вас, я знаю, что там, так как я сам поместил туда файлы, когда dism-восстанавливал образ Windows на машине EFI (образ был создан dism на машине MBR). Практически невозможно узнать, какие файлы на самом деле нужны. Методом проб и ошибок я выяснил, что вам нужны только 3 (выше)

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

Хранилище bcd вам придется создать самостоятельно, я не буду вдаваться в подробности:

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

Итак, 1.636.008! Microsoft сказала 116 МБ? И эта информация была скопирована и разошлась по всему интернету. Сначала я следовал этим инструкциям, идиот, но теперь я хотел посмотреть, ДЕЙСТВИТЕЛЬНО ли требуются размеры, требуемые MS (например, чтобы сделать Windows незагружаемой):

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:\

Скрестите пальцы, я иду на перезагрузку! Хьюстон, сообщаю об успешном взлете ракеты Windows!... Хьюстон, сообщаю об успешной загрузке Windows и входе в учетную запись! Хьюстон, Microsoft — кучка проклятых лжецов!

Таким образом, мы сэкономили 114 МБ, но это пространство не распределено.

diskpart?

Хахаха!

diskmgmt.msc

Хахаха Хахаха!

А что потом? Думаю, снова gParted. Не совсем хорошая идея использовать программу Linux, чтобы возиться с разделом NTFS, но давайте попробуем. Поэтому я переместил нераспределенное пространство в конец жесткого диска. Работает. Снова перезагрузил Windows с DVD (виртуального DVD с смонтированным ISO в моем случае, поскольку я делал это в Hyper-V), затем:

diskpart

select disk 0

select partition 1

extend

Сделанный.

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

Но что, если вы хотите удалить разделы EFI и MSR через инструменты Linux? Я не знаю почему, но это приводит к тому, что система Windows не загружается. Я передал gdisk/fdisk/parted те же самые параметры, что и diskpart, но все эти инструменты что-то ломают! Удаление раздела MSR в diskpart:

select partition 1

delete partition override

Перезагрузите, Windows загрузится.

Та же чертова вещь в gdisk!:

gdisk /dev/sda

d (select msr partition)
w

Перезагружаюсь, вижу перед лицом чертов логотип Hyper-V, висящий там вечно, система не загружается. Причина?

Связанный контент