GUID Partition Table, аббр. GPT — стандарт формата размещения таблиц разделов на физическом жестком диске. Он является частью Расширяемого микропрограммного интерфейса (англ. Extensible Firmware Interface, EFI) — стандарта, предложенного Intel на смену BIOS. EFI использует GPT там, где BIOS использует Главную загрузочную запись (англ. Master Boot Record, MBR).
В GPT нет собственной программы-загрузчика, вместо этого он работает в паре с EFI.
Внутри GPT используется адресация логических блоков LBA, которая абстрагирована от физики устройства (в отличие от CHS — «Цилиндр-Головка-Сектор»).
Каждый логический блок занимает 512 байт. LBA 0 — первые 512 байт диска, LBA 1 — следующие, и так далее.
Отрицательные значения LBA означают смещение в блоках с конца диска. Последний блок имеет смещение «-1» (LBA -1).
Структура
Название | Адрес | Описание |
---|---|---|
Наследственный MBR | LBA 0 | Первые 512 байт диска отведены под "фейковый MBR". В нём из записей есть только индентификатор диска, стандартная сигнатура 0x55AA в конце и единственный фейковый раздел типа 0xEE (указание, что используется GPT), внутри которого находится настоящая разметка диска и все пользовательские данные. Остальное забито нулями, кода загрузчика нет. Наследственный MBR служит для предотвращения потери данных из-за программ, которые не понимают GPT. |
Основная таблица разделов GPT | LBA 1 | Оглавление таблицы разделов. Содержит GUID диска, адреса основной и резервной таблиц и данные о размере и количестве записей о разделах (стандартно — 128 штук). И контрольную сумму, которую проверяет EFI. "Благодаря" этой контрольной сумме ручное редактирование разделов GPT невозможно. |
LBA 2 ... LBA 33 | Записи данных о разделах. Каждая запись занимает 128 байт, то есть в один LBA вмещается 4 записи. Первые 16 байт записи — GUID типа раздела, следующие 16 байт — его UUID, уникальный идентификатор, остальное место занимает информация о его границах и атрибутах. | |
Данные | LBA 34 ... LBA * | Собственно, содержимое разделов. |
Резервная таблица разделов GPT | LBA -33 ... LBA -2 | Полная копия описания разделов |
LBA -1 | Полная копия оглавления. |
Оглавление таблицы разделов
Обозначение | Смещение16 | Размер | Описание |
---|---|---|---|
Signature | 00 | 8 | Сигнатура заголовка GPT (строка символов «EFI PART», 5452415020494645h) |
Revision | 08 | 4 | Версия формата заголовка; к номеру версии спецификации UEFI она отношения не имеет. Сейчас используется первая версия заголовка, которой соответствует значение 00010000h |
HeaderSize | 0C | 4 | Размер заголовка GPT в байтах. Он должен превосходить 92 и не должен превышать размер сектора |
HeaderCRC32 | 10 | 4 | Контрольная сумма заголовка GPT размером HeaderSize байтов. При подсчёте контрольной суммы начальное значение этого поля принимается равным нулю |
Reserved | 14 | 4 | Зарезервированное поле; должно содержать нуль |
MyLBA | 18 | 8 | LBA этой копии заголовка |
AlternateLBA | 20 | 8 | LBA другой копии заголовка |
FirstUsableLBA | 28 | 8 | LBA первого блока, с которого могут начинаться разделы этого диска |
LastUsableLBA | 30 | 8 | LBA последнего блока, после которого на диске не может быть разделов |
DiskGUID | 38 | 16 | Уникальный идентификатор (GUID) этого диска |
PartitionEntryLBA | 48 | 8 | LBA начала массива разделов диска |
NumberOfPartitionEntries | 50 | 4 | Количество записей в массиве разделов диска |
SizeOfPartitionEntry | 54 | 4 | Размер каждой записи массива разделов; должен быть кратен 8 |
PartitionEntryArrayCRC32 | 58 | 4 | Контрольная сумма масива разделов. Подсчёт суммы начинается с начала блока, адрес которого указан полем PartitionEntryLBA, и охватывает NumberOfPartitionEntries * SizeOfPartitionEntry байт, то есть весь массив разделов |
Reserved | 5С | — | Резервная область заголовка, должна содержать нули |
Запись о разделе
Обозначение | Смещение16 | Размер | Описание |
---|---|---|---|
PartitionTypeGUID | 0 | 16 | GUID типа данного раздела. Определяет файловую систему, используемую для хранения данных в этом разделе |
UniquePartitionGUID | 10 | 16 | GUID раздела. Является уникальным идентификатором раздела и создаётся каждый раз, когда создаётся раздел |
StartingLBA | 20 | 8 | LBA первого блока данного раздела на диске |
EndingLBA | 28 | 8 | LBA последнего блока данного раздела на диске |
Attributes | 30 | 8 | Атрибуты раздела |
PartitionName | 38 | 72 | Строка в кодировке Unicode, содержащая имя данного раздела |
Reserved | 80 | — | Неиспользуемая часть записи массива разделов |
Атрибуты разделов
Бит | Описание |
---|---|
0 | Признак необходимости раздела для функционирования машины. Установкой этого бита владелец/создатель раздела указывает, что без него компьютер может оказаться неработоспособным. В частности, ОС может отказаться загружаться или даже устанавливаться, если этого раздела нет. Удалять или модифицировать такой раздел может только программное обеспечение, точно знающее его назначение и функции, все остальные программы, встретив такой раздел в GPT, не должны каким-либо образом менять его |
1 | Когда этот бит установлен, BIOS не должна создавать для этого раздела устройство EFI_BLOCK_IO_PROTOCOL. Подробно это описано в спецификации UEFI |
2–47 | Зарезервировано для нужд UEFI; должны быть равны нулю |
48–63 | Используются для нужд разработчиков файловых систем. При изменении значений разрядов 0–47 значения этих разрядов должны сохраняться, они изменяются только программным обеспечением соответствующей файловой системы |
Итого
EFI — шаткое поделие, расслабляющее как производителей железа, так и соответствующих программистов.
UEFI — ублюдочное детище микрософта, попытка намертво приколотить виндавс к железу (см. SecureBoot). Подаётся под соусом «это ж в целях борьбы с вирусами!»
А GPT — неотъемлимая часть всего этого добра, которое активно внедряется в массы.
«Это прогресс, детка» ©
Комментарии