× К оглавлению На главную Об авторе

   Дата и время публикации   :
   Дата и время модификации:

Использование и применение


1. Использование

1.1 Системный раздел ESP

Системным разделом расширяемого программного интерфейса ESP (англ. Extensible Firmware Interface System Partition) является выделенная непрерывно область секторов на носителе информации, где её первый сектор находится в его начале.

С началом зарождения IBM/PC, под которым сегодня понимается архитектура x86-32/64, в первом секторе обычно находится главная загрузочная запись (англ. Master Boot Record, MBR), но с появлением UEFI вместе с ним появился композитный блок, который содержит:

Примечания. 1. Master Boot Record или MBR называемой часто англицким словом "legacy-MBR", что можно перевести как давно принятая или обычно применяемая главная загрузочная запись. 2. С появлением расширяемого микропрограммного интерфейса (Unified Extensible Firmware Interface, который так же можно перевести аппаратно-независимая микропрограмма UEFI), роль MBR заключается в обеспечении совместимости в IBM/PC программно-вычислительными комплексов. 3. Операционных систем может быть несколько соответственно, так и разделов носителя информации, на котором они все размещены.

Кроме того, первый блок (или логический сектор)данного раздела содержит структуру данных, называемый блок параметров BIOS (англ. BIOS Parameter Block, BPB), который содержит сведения об носителе, содержащую в свою очередь зарезервированную область с файловой системой FAT16 (несовместимой с FAT32).

Данный раздел распознается микропрограммным кодом EFI, который считывает из его корня файл, содержащий необходимый код для продолжение загрузки операционной системы. Например, подобного рода файл можно создать утилитой grub-mkstandalone(1). При этом, чтобы микропрограммный код UEFI смог распознать указанный файл, в нем предусмотрена таблица разделов GPT.

1.2 Таблицы разделов GPT

Формат таблицы разделов GPT (англ. GUID Partition Table) был разработана в качестве приемника MBR для преодоления некоторых ограничений, одним из которых является поддерживаемый максимальный размер носителя, равным 2.2TB .

Данный формат получил широкое использование в вычислительных системах с расширяемым микропрограммным интерфейсом (Unified Extensible Firmware Interface, далее по тексту микропрограмма UEFI) и главной функциональной задачей – обеспечение загрузки операционной системы (далее по тексту – ОС) или среды функционирования. При этом сохраняется обратная совместимость со старым способом, который подразумевает загрузку ОС с использованием главной загрузочной записи (MBR) и совместимость со старыми утилитами, наподобие fdisk(8) и ей подобной.

1.2.1 Преимущества

Максимальный допустимый размер

Первым и весьма достойным преимуществом является в том, что GPT использует 64-х разрядное адресной значение, выражающееся в логической адресации блоков или LBA.

Примечание. Исторически сложилось так, что логическая адресация блоков (англ. logical block addressing, LBA) реализуется составным значением адреса, выражающийся в соотношении: цилиндр(cylinder)/головка(head)/сектор(sector) или C/H/S. Так обычно MBR хранится в LBA 0, а заголовок GPT – в LBA 1, а в следующей за ним – таблица партиций. В 64-х разрядных архитектурных под таблицу разделов GPT используется 16384 байта (или 32 сектора), а LBA 32 будет первым используемым сектором на носителе.

Вторым, как следствие использование 64-х разрядных значений, является максимальный размер носителя информации, который теперь позволяет адресовать 9.4 зеттабайт или ZB (англ. zettabytes).

Примечание. В одном зеттабайте содержится 1024 байтов, но на практике зачастую используют соотношение 1 ЗБ = 1024 эксабайтам или $9.4 х 1024 = 9 625,6$ миллионов террбайт, последние представляют значение степени взятое по основанию 1024 и показателю 12.

Множественная поддержка файловых систем

GPT имеющие различные форматы файловых систем числом до 128. При этом, количество главных разделов (англ. primary partitions) ограничено четырьмя, и уменьшается до трех, когда планируется использование большего их числа из-за выделения оставшегося места под расширенный раздел (англ. extendent partition), который в свою очередь будет нарезаться уже на логические разделы (англ. Logical partition).

Примечание. Только главные разделы (англ. primary partitions) могут содержать загрузочную запись или представлять собой расширенный (англ. extended partition), который позволяет создавать логические диски для хранения данных. Обычно подобного рода раздел может быть объявлен только один.

Резервирование таблиц заголовков GPT

Обеспечивается за счет применения первичной и вторичной таблицы заголовка GPT, а безопасность метаданных раздела с усилением в виде контрольной суммы.

Использование такой схемы позволяет предотвратить потерю данных в случае нарушения целостности заголовка GPT в начале носителя информации. Такая возможность позволяет парировать непредумышленное удаления или появления сбойного сектора в нем, наличие или отсутствие которых можно определить только по контрольной сумме, рассчитанной по алгоритму CRC32.

Глобальный уникальный идентификатор носителя информации GUID

Использование GUID (англ. Global Unique Identificator) используется для обеспечения уникальности идентификации аппаратных средств (в первую очередь носителей) без какой-либо центральной авторизации, что достигается $3,4*10^{38}$ комбинаций 128-ми разрядного числа. Поэтому шанс совпадения двух разделов на разных носителях во всемирной сети достаточно мал из-за назначения одного и того же выбранного случайного числа.

Символьная метка

Каждому разделу можно дать символьную метку содержащую описательную информацию из 36 символов.

1.3 Структура таблицы разделов GPT

Рассмотрим структуру таблицы разделов GPT на рисунке 1.1

Рисунок 1.1 (Источник: UEFI Specification 2.3, S. 100 uefi.org)

Формат LBA 0 Format

По адресу LBA 0 (первый логический блок) носителя информации может находится блок MBR (англ. Master Boot Record) или защитный блок MBR.

Формат блока MBR

В первом случае, когда по адресу LBA 0 (в первом секторе) носителя информации записан MBR, исполнительная часть микропрограммы UEFI используется для загрузки операционной системы.

На рисунке 1.2 показано распределение заголовка таблицы MBR и его логические связи с главных разделов.

Рисунок 1.2

На котором показано различие между главным разделом и расширенным. Последний обычно в Debian/Linux объявляется только один, с кучей "нарезанных" логических дисков.

Формат защита MBR

Во втором случае, по адресу LBA 0 должен находится раздел, обеспечивающий доступ старых утилит типа fdisk(1) к партициям непониманием структуру разделов GPT.

Защитный раздел MBR должен предшествовать логическому блоку, содержащие заголовок таблицы разделов GUID.

На рисунке 1.3 показана возможность превышение ограничения 2.2 Тбайт, определяемая физикой стандартного MBR.

Рисунок 1.3 взят из спецификации UEFI (figure19, §5.2)

В случае, когда размер блока равен 512 байт, первый блок системного раздела EFI должен начинаться начиная с LBA 34, потому что по одному LBA выделяется на защитный MBR )на рисунке 1.7.3 – protective MBR) и заголовок таблицы раздела (на рисунке 1.3 – GPT HDR), 32 блока LBA 32 занимает массива записей разделов GPT (на рисунке 1.3 – GPT partition entry array(, а оставшиеся до LBA 2048 отводятся под системный раздел ESP, который запустить загрузку .

При этом, как показано на рисунке 1.7.3, с защитным MBR возможно превышение границы 2,2 Тбайт, как и дисковое пространство, ограниченное границей 0xFFFFFFFF байт или LBA 8388608

Утилиты управления носителями распознают следующие типы файловых систем со следующими значениям:

Корневая файловая система принимает значения согласно присвоенного ей типа файловой системы.

2. Использование

2.1 Пакет "GPT fdisk"

В Debain/Linux разбиение носителя информации производится с помощью утилиты gdisk(8), которая по образу и подобию похожа на fdisk(8), но с одним отличием от последнего с тем, что она умеет работать с разделами GPT, поэтому её полное название: "GPT fdisk" .

Примечание. В случае, если носитель информации был размечен с использованием fdisk(8) и отформатирован позднее в целях хранения исполняемого кода и данных, использование gdisk(8) приведет к полной их потери. Поэтому сделайте резервную копию перед первым запуском указанной утилиты.

Утилиты gdisk(8) обладает следующими возможностями:

Пример использования gdisk(8) приведен в дампе 2.1

Дамп 2.1

GPT fdisk (gdisk) version 1.0.4

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/nvme0n1: 500118192 sectors, 238.5 GiB
Model: WDC PC SN520 SDAPNUW-256G-1002          
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 8527E3BC-4DD1-4196-B2E1-7E28EA4FC3D2
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 500118158
Partitions will be aligned on 2048-sector boundaries
Total free space is 66062301 sectors (31.5 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1048576   511.0 MiB   EF00  EFI System
   2        67108864       134217727   32.0 GiB    8200  Linux swap
   3       134217728       500118158   174.5 GiB   8300  Linux filesystem

Как показано в дампе 2.1, первые 2048 отводится на защитный MBR, таблицы разделу GUID, но на системный раздел системный раздел UEFI, выделяется 512 байт, куда будем класть загрузочный образ c использованием утилиты из пакета GRUB(8). Оставшейся размер будет использоваться под swap и размещения корневой файловой системы (rootfs).

В случае, обнаружения старой схемы с использованием только MBR, обязательно будет предложено конвертировать разбиение диска к формату GPT, что в принципе не стоит делать, потому что черевато потерей данных, как об этом предупреждается в дамп 2.2 .

Дамп 2.2

  
# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.4

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************

Одной из приятных отличительной особенностью gdisk(8) от gdisk(8) является возможность не только конвертации, но проверки на соответствие формату GPT, как показано в дампе 2.2

Дамп 2.3

  
# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.4

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): v

No problems found. 2014 free sectors (1007.0 KiB) available in 1
segments, the largest of which is 2014 (1007.0 KiB) in size.

Из которого следует, что из первых 2048 секторов свободно 2014.

2.2 Создание системного раздела "ESP"

Как показано в дампе 2.4, производим разметку диска, содержащего rootfs (в данном примере /dev/sda)

Дамп 2.4

. . .
Command (? for help): n
. . .
Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-1953525134, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-1953525134, default = 1953525134) or {+-}size{KMGTP}: +512M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef00
Changed type of partition to 'EFI System'

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-1953525134, default = 1050624) or {+-}size{KMGTP}: 
Last sector (1050624-1953525134, default = 1953525134) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'
. . .

В котором показано создание первых двух из 128 возможных разделов на диска /dev/sda c использованием односимвольной команды n, и указания явного кода файловой системы ef00 (в первом случае, для объявление раздела системным "ESP" ) в первом случае и без прямого указания во втором случае, когда создавали раздел для rootfs.

Таблица разделов выводится так же односимвольной команды p,

Дамп 2.5

. . .
Command (? for help): p
Disk /dev/sda: 1953525168 sectors, 931.5 GiB
Model: TOSHIBA MQ04ABF1
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 0A5225A7-720A-4613-A623-20B99DAAE4AB
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  EFI System
   2         1050624      1953525134   931.0 GiB   8300  Linux filesystem
. . .

а её запись на диск такой же командой w, как показано в дампе 2.6

Дамп 2.6

. . .
Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.
root@alivecd-deb:~#      
. . .

После чего с использованием утилиты mkfs.fat из пакета dosfstools производим форматирование, как показано в дампе 2.7

Дамп 2.7

mkfs.fat -F32 /dev/sda1

Примечание. Если буде выдано предупреждение "WARNING: Not enough clusters for a 32 bit FAT!", то необходимо уменьшить размер кластера с "mkfs.fat -s2 -F32 ..." или "mkfs.fat -s2 -F32 ...". Иначе, системный раздел ESP не будет читаем.

2.3 Инициализация системного раздела "ESP"

Доустанавливаем недостающие пакеты, если они установлены, как показано в дампе 2.8

Дамп 2.8

root@home:/# apt install \
	    grub-pc \
            grub-efi-amd64 \
            grub-efi-amd64-bin

Для систем использующих DRM c включенной KMS Редактируем файл /etc/default/grub, как показано в дампе 2.9

Дамп 2.9

. . .
GRUB_CMDLINE_LINUX_DEFAULT="quiet idle=nomwait processor.max_cstate=5"
. . .
GRUB_GFXMODE=1920x1080x32
GRUB_GFXPAYLOAD_LINUX=1024x768
. . .

Для систем использующих DRM c выключенной KMS редактируем /etc/default/grub, как показано в дампе 2.10

Дамп 2.10

. . .
GRUB_CMDLINE_LINUX_DEFAULT="quiet nomodeset idle=nomwait iommu=soft processor.max_cstate=5"
. . .
GRUB_GFXMODE=1920x1080x32
GRUB_GFXPAYLOAD_LINUX=1024x768
. . .
Примечание. В опциях к ядру указанных в переменной GRUB_CMDLINE_LINUX_DEFAULT ядру Linux передаются следующие опции: nomodeset Во всех современных ядрах все операции по настройке видео перенесены на их уровень, т.е. программирование задаваемой аппаратным обеспечением частоты синхронизации происходит "шустрее" чем во время запуска драйвера оконного X сервера. Это стало возможно благодаря весьма высокого разрешения заставки на этапе boot-загрузки и обеспечивая переход без мерцания (англ. flicker free transitions) от загрузочной заставки (англ. boot splash) до менеджера входа в систему (англ. login screen). Производит отключение функции KMS подсистемы DRM. В данном случае, т.к. строками выше производится её включение, то данную опцию применять бессмысленно. В случае, если ваш графический адаптер не работает должным образом, следует использовать параметр ядра nomodeset, который так же запрещает ядру подгружать для такого рода видео карт драйверы и использовать режим BIOS (консольный режим). В данном случае, наше движение идет в сторону Wayland, который требует включение данной функции. idle Производит отключение инструкций MWAIT. При этом нужно помнить, что данное решение не предотвращает от возникновения проблем, которые могут возникнуть на других участках кода, где эти инструкции используются. При этом помагает idle=halt от зависаний системы, которая использует инструкций HLT, которые их предотвращают в большинстве случаев. Оба параметра рекомендуется использовать с processor.max_state processor.max_cstate Рекомендуется запретить режимы питания процессора С-State путем задания C5 iommu=soft Использовать программную реализацию преобразования адресов памяти для приложений, которые имеют предел, равный 4GB. Для процессоров AMD Ryzen 7 и им подобным данная опция должна быть пропущена. ivrs_ioapic Кроме того, при возникновения некоторых иных проблем используют опции ivrs_ioapic[32]=00:14.0 ivrs_ioapic[33]=00:00.2, которые предотвращают возникновения сообщений, например AMD-Vi: IOAPIC[32] not in IVRS table, которое является предвестники краха ядра, выражающийся в kernel panic .

Запускаем update-grub, который на выходе дает файл /boot/grub/grub.cfg, как показано в дампе 2.11

Дамп 2.11

# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.2.0-3-amd64
Found initrd image: /boot/initrd.img-5.2.0-3-amd64
done

После чего остается проинсталлировать необходимые данные системного раздела ESP на носитель, с которого планируем производить загрузку.

Дамп 2.11

# grub-install --recheck /dev/nvme0n1

Как видно из дампа 2.11, прелесть загрузки с UEFI заключается в том, что нет небходимости следить за установкой управляющего бита "bootable bit", как это делали раньше во времена MBR .

В дампе 2.12, показана обычная схема распределения разделов на SSD

Дамп 2.12

/dev/nvme0n1
│
├──/dev/nvme0n1p1/──efi/
│
├──/dev/nvme0n1p2/swap
│
├──/dev/nvme0n1p3/──rootfs/

которая с помощью gdisk(8) будет иметь вид, как показано в дампе 2.1

3. Библиография

3.1 UEFI.Specification

3.2 Thomas Krenn. GUID Partition Table

3.3 ArchLinux.EFI system partition

3.4 stackoverflow.com .Whats so special about 0x55aa