GPT — GUID Partition Table

GUID-таблица разделов (GPT, GUID Partition Table) была разработана в связи с необходимостью преодоления ограничений, накладываемых традиционной таблицей разделов жёсткого диска, не позволяющей создавать разделы размером свыше 2 Тбайт или располагать их на дисках за пределами первых 2 Тбайт их ёмкости.

GPT является частью стандарта UEFI.

Основным техническим отличием GPT от традиционной таблицы разделов является отказ от использования дисковых адресов формата CHS и переход на адресацию LBA.

Также использование GPT упрощает разбиение дисков на большое число разделов.

Защитный MBR

При использовании GPT в самом начале диска (блок LBA 0) находится защитный MBR. Старые дисковые утилиты могут не распознать и даже переписать GPT диски. Чтобы избежать этого, в защитной MBR указывается наличие всего одного раздела, охватывающего весь GPT диск. Системный идентификатор для этого раздела устанавливается в значение 0xEE, указывающее, что применяется GPT. Вследствие этого EFI игнорирует MBR.

Заголовок GPT

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

Оглавление содержит GUID — Глобально Уникальный Идентификатор диска и местоположение (всегда блок LBA 1), а также размер и местоположение вторичного (запасного) оглавления и таблицы разделов, которые всегда размещаются в последних секторах диска. Важно, что заголовок GPT также содержит контрольную сумму CRC32 для себя и для таблицы разделов. Эти контрольные суммы проверяются процессами EFI при загрузке машины. Из-за проверок контрольных сумм невозможным становится применение шестнадцатеричных редакторов для модификации содержимого GPT. Всякое редактирование изменит контрольные суммы, после чего EFI перезапишет первичный GPT вторичным. Если же оба GPT будут содержать неверные контрольные суммы, доступ к диску станет невозможным.

 

Обозначение Смещение Размер Описание
Signature 00h 8 Сигнатура заголовка GPT (строка символов «EFI PART», 5452415020494645h)
Revision 08h 4 Версия формата заголовка; к номеру версии спецификацииUEFI она отношения не имеет. Сейчас используется первая версия заголовка, которой соответствует значение 00010000h
HeaderSize 0Ch 4 Размер заголовка GPT в байтах. Он должен превосходить 92 и не должен превышать размер сектора
HeaderCRC32 10h 4 Контрольная сумма заголовка GPT размером HeaderSize байтов. При подсчёте контрольной суммы начальное значение этого поля принимается равным нулю
Reserved 14h 4 Зарезервированное поле; должно содержать нуль
MyLBA 18h 8 LBA этой копии заголовка
AlternateLBA 20h 8 LBA другой копии заголовка
FirstUsableLBA 28h 8 LBA первого блока, с которого могут начинаться разделы этого диска
LastUsableLBA 30h 8 LBA последнего блока, после которого на диске не может быть разделов
DiskGUID 38h 16 Уникальный идентификатор (GUID) этого диска
PartitionEntryLBA 48h 8 LBA начала массива разделов диска
NumberOfPartitionEntries 50h 4 Количество записей в массиве разделов диска
SizeOfPartitionEntry 54h 4 Размер каждой записи массива разделов; должен быть кратен 8
PartitionEntryArrayCRC32 58h 4 Контрольная сумма масива разделов. Подсчёт суммы начинается с начала блока, адрес которого указан полем PartitionEntryLBA, и охватывает NumberOfPartitionEntries * SizeOfPartitionEntry байт, то есть весь массив разделов
Reserved 5Сh Размер сектора — 5Сh Резервная область заголовка, должна содержать нули

Поля FirstUsableLBA и LastUsableLBA определяют область диска, доступную для размещения в ней разделов.

Записи данных о разделах

Записи данных о разделах последовательно расположены в блоках диска с адресами LBA 2-33. Первые 16 байт определяют GUID типа раздела. Например, GUID системного EFI-раздела имеет вид «C12A7328-F81F-11D2-BA4B-00A0C93EC93B». Следующие 16 байт содержат GUID, уникальный для данного конкретного раздела. Далее записываются данные о начале и конце 64-битных адресов LBA, если они имеются. Остальное место отводится информации об именах и атрибутах разделов.

Массив разделов состоит из записей одинакового формата, каждая из которых описывает один раздел диска. Первая запись начинается с начала первого сектора массива, последующие вплотную примыкают друг к другу. Размер записей может меняться, однако на одном диске все записи имеют одинаковую длину, указанную в заголовке GPT и кратную 8.

Обозначение Смещение Размер Описание
PartitionTypeGUID 0h 16 GUID типа данного раздела. Определяет файловую систему, используемую для хранения данных в этом разделе
UniquePartitionGUID 10h 16 GUID раздела. Является уникальным идентификатором раздела и создаётся каждый раз, когда создаётся раздел
StartingLBA 20h 8 LBA первого блока данного раздела на диске
EndingLBA 28h 8 LBA последнего блока данного раздела на диске
Attributes 30h 8 Атрибуты раздела
PartitionName 38h 72 Строка в кодировке Unicode, содержащая имя данного раздела
Reserved 80h размер записи — 80h Неиспользуемая часть записи массива разделов

GUID типов разделов

Каждая файловая система получает свой GUID, однозначно её идентифицирующий. Стандарт UEFI определяет следующие GUID типов разделов.

Значение GUID Описание
00000000-0000-0000-0000-000000000000 Неиспользуемая запись
C12A7328-F81F-11d2-BA4B-00A0C93EC93B Системный раздел UEFI
024DEE41-33E7-11d3-9D69-0008C781F39F Раздел, содержащий традиционную MBR

Разработчики ОС для своих файловых систем формируют собственные коды GUID.

Атрибуты разделов

Каждый раздел имеет поле атрибутов длиной 64 бита. Версия 2.2 спецификации UEFI определяет их следующим образом.

Бит Описание
0 Признак необходимости раздела для функционирования машины. Установкой этого бита владелец/создатель раздела указывает, что без него компьютер может оказаться неработоспособным. В частности, ОС может отказаться загружаться или даже устанавливаться, если этого раздела нет. Удалять или модифицировать такой раздел может только программное обеспечение, точно знающее его назначение и функции, все остальные программы, встретив такой раздел в GPT, не должны каким-либо образом менять его
1 Когда этот бит установлен, BIOS не должна создавать для этого раздела устройство EFI_BLOCK_IO_PROTOCOL. Подробно это описано в спецификации UEFI
2–47 Зарезервировано для нужд UEFI; должны быть равны нулю
48–63 Используются для нужд разработчиков файловых систем. При изменении значений разрядов 0–47 значения этих разрядов должны сохраняться, они изменяются только программным обеспечением соответствующей файловой системы

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *