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 значения этих разрядов должны сохраняться, они изменяются только программным обеспечением соответствующей файловой системы |