Дата и время публикации : Дата и время модификации:
Использование и применение
1. Использование
1.1 Системный раздел ESP
Системным разделом расширяемого программного интерфейса ESP (англ. Extensible Firmware Interface System Partition) является выделенная непрерывно область секторов на носителе информации, где её первый сектор находится в его начале.
С началом зарождения IBM/PC, под которым сегодня понимается архитектура x86-32/64, в первом секторе обычно находится главная загрузочная запись (англ. Master Boot Record, MBR), но с появлением UEFI вместе с ним появился композитный блок, который содержит:
- защитный MBR (Protective-MBR);
- 2-копии (по адресу LBA1 и LBA z-n) в заголовочной таблицы разделов (Partion Table HDR) и массива записей разделов GPT.
- Разделы GPT c данными и исполняемого кода операционных систем.
Кроме того, первый блок (или логический сектор)данного раздела содержит структуру данных, называемый блок параметров 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.
Вторым, как следствие использование 64-х разрядных значений, является максимальный размер носителя информации, который теперь позволяет адресовать 9.4 зеттабайт или ZB (англ. zettabytes).
Множественная поддержка файловых систем
GPT имеющие различные форматы файловых систем числом до 128. При этом, количество главных разделов (англ. primary partitions) ограничено четырьмя, и уменьшается до трех, когда планируется использование большего их числа из-за выделения оставшегося места под расширенный раздел (англ. extendent partition), который в свою очередь будет нарезаться уже на логические разделы (англ. Logical 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
Утилиты управления носителями распознают следующие типы файловых систем со следующими значениям:
- 0xEF – системная раздел UEFI;
- 0xEE – защитный раздел MBR
Корневая файловая система принимает значения согласно присвоенного ей типа файловой системы.
2. Использование
2.1 Пакет "GPT fdisk"
В Debain/Linux разбиение носителя информации производится с помощью утилиты gdisk(8), которая по образу и подобию похожа на fdisk(8), но с одним отличием от последнего с тем, что она умеет работать с разделами GPT, поэтому её полное название: "GPT fdisk" .
Утилиты gdisk(8) обладает следующими возможностями:
- редактирование таблицы разделов GUID;
- преобразование дисковых меток BSD к GPT;
- преобразование MBR в GPT;
- создание гибридной компоновки MBR / GPT;
- восстановление поврежденной структуры данных GPT;
- восстановление поврежденной структуры данных MBR;
- Создание резервных копий конфигурационных данных GPT и их восстановление.
Пример использования 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
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
. . .
Запускаем 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.2 Thomas Krenn. GUID Partition Table