GUID-таблица разделов (GPT, GUID Partition Table) была разработана в связи с необходимостью преодоления ограничений, накладываемых традиционной таблицей разделов жёсткого диска, не позволяющей создавать разделы размером свыше 2 Тбайт или располагать их на дисках за пределами первых 2 Тбайт их ёмкости. GPT является частью стандарта UEFI, первая версия которого появилась в 2000-м году.
Важнейшим техническим отличием GPT от традиционной таблицы разделов является полный отказ от использования дисковых адресов формата CHS и окончательный переход на адресацию LBA. Кроме того, GPT упрощает разбиение дисков на большое число разделов.
Защитная MBR[]
Диски, использующие GPT, в нулевом секторе по-прежнему могут содержать обычную главную загрузочную запись (MBR), используемую для загрузки с этого диска операционной системы в том случае, если компьютер не соответствует спецификации UEFI. Если возможность загрузки с таких компьютеров не требуется, вместо обычной («унаследованной» или «традиционной» — legacy, как называет её спецификация UEFI) MBR в нулевом секторе находится защитная MBR, предотвращающая уничтожение информации на диске при попытке использования с ним операционных систем и дисковых утилит, не умеющих работать с GPT.
Оба варианта MBR имеют одинаковый формат, полностью соответствующий традиционной MBR. В защитной MBR, однако, код начального загрузчика не используется, поскольку загрузка с такого диска может выполняться только на компьютерах, удовлетворяющих спецификации UEFI, и осуществляется не так, как на компьютерах без поддержки UEFI (подробнее о процессе загрузки можно прочитать здесь).
Таблица разделов в обоих видах MBR также имеет одинаковый формат. Разница заключается в том, что на дисках, допускающих загрузку на компьютерах без поддержки UEFI, в ней должен быть определён хотя бы один раздел, содержащий загружаемую традиционным загрузчиком ОС; этот раздел должен быть помечен как активный, а процесс загрузки из него ничем не будет отличаться от обычного. Кроме того, в таблице разделов традиционной MBR будет определён раздел с кодом системы, равным EFh, что соответствует файловой системе UEFI. Этот раздел помечается как неактивный, однако именно его будет использовать BIOS компьютера, соответствующего спецификации UEFI, и лишь в случае отсутствия такого раздела будет запущен код традиционного загрузчика.
В таблице разделов защитной MBR определён только один раздел с кодом системы EEh, покрывающий собой весь диск. Поле начала этого раздела в формате CHS задаёт цилиндр 0, головку 0 и сектор 2 (первый сектор соответствует самой MBR), поле начала в формате LBA — сектор 1. Поля конца соответствуют последнему сектору физического диска, а если его ёмкость превосходит предел, допускаемый традиционной таблицей разделов, то они содержат значения FFFFFFh для адреса в формате CHS и FFFFFFFFh для адреса в формате LBA.
Заголовок GPT[]
Первой структурой данных GPT является её заголовок (GPT Header); он размещается в первом секторе диска (LBA = 1). Длина заголовка в будущем может увеличиться, однако он никогда не превысит размер одного физического сектора диска. Для увеличения надёжности хранения данных и устойчивости к сбоям предусмотрена резервная копия заголовка 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 определяют область диска, доступную для размещения в ней разделов. За пределами этой области находятся лишь структуры данных UEFI, предназначенные для управления разделами, то есть MBR, заголовок GPT и массив разделов GPT.
Массив разделов[]
Массив разделов начинается непосредственно за блоком заголовка GPT, то есть со второго блока диска (LBA=2). Копия массива находится в конце диска и вплотную примыкает к копии заголовка, то есть кончается предпоследним блоком диска.
Массив разделов состоит из записей одинакового формата, каждая из которых описывает один раздел диска. Первая запись начинается с начала первого сектора массива, последующие вплотную примыкают друг к другу. Размер записей может меняться, однако на одном диске все записи имеют одинаковую длину, указанную в заголовке 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 значения этих разрядов должны сохраняться, они изменяются только программным обеспечением соответствующей файловой системы |