Секреты GPT

Apple перешла на новую схему разбиения диска, известную как таблица разделов GUID, или GPT. Эта новая схема предлагает ряд преимуществ по сравнению с предыдущей схемой, но она также представляет некоторые новые проблемы. Этот технический документ описывает GPT в целом и дает некоторые конкретные сведения о том, как Apple использует GPT.
Вам следует прочитать этот комментарий, если вы пишете программное обеспечение, которое взаимодействует с реализацией Apple GPT. В частности, этот метод крайне важен, если вы пишете дисковую утилиту для Mac OS X или пытаетесь запустить какую-нибудь альтернативную операционную систему, например Linux, на компьютере Macintosh.

Секреты GPT, image #1

Дорога к ГПТ

Предыдущая схема разбиения диска Apple, известная как Apple Partition Map (APM), была представлена с Macintosh II в 1987 году. Схема была очень хорошо разработана и сохранилась, с небольшими изменениями, в течение почти двадцати лет.
Тем не менее, в последние годы ограничения APM вырисовываются на горизонте.В частности, APM ограничен 32-битными блоками. При стандартном размере блока 512 байт это означает, что максимальный размер диска составляет 2 ТБ. Учитывая скорость роста жестких дисков, легко представить себе типичный настольный компьютер с объемом хранения более 2 ТБ в следующие несколько лет.
Apple решила расширить APM для поддержки дисков большего размера. Однако, поскольку такое изменение нарушило бы все существующие инструменты разбиения, было так же удобно перейти на совершенно новую схему разбиения.После некоторых серьезных размышлений Apple решила принять GPT.
Схема разбиения таблицы разделов GUID (GPT) была введена Intel в рамках усилий по внедрению более современных встроенных программ для аппаратного обеспечения ПК. Традиционное аппаратное обеспечение ПК использует прошивку BIOS, которая использует схему разбиения, известную как основная загрузочная запись (MBR). MBR имеет множество серьезных ограничений и не подходит для современного компьютера. Современная прошивка Intel, известная как расширяемый интерфейс прошивки (EFI), включает в себя новую схему разделения, GPT.
Одна из приятных особенностей GPT заключается в том, что она определяется формальным стандартом. В частности, GPT определяется следующими документами:

  • Раздел 11.2.2 «Спецификации расширяемого интерфейса прошивки», версия 1.1, доступная от Intel
  • Глава 5 «Формат таблицы разделов GUID» «Спецификации унифицированного расширяемого интерфейса микропрограммы», версия 2.0, доступна на Unified EFI Forum

Поскольку GPT определяется формальной спецификацией, нет необходимости подробно описывать ее здесь. Таким образом, этот technote концентрируется на том, как GPT используется Apple. Это начинается с общего обзора GPT. Затем описывается, как Apple развернула поддержку GPT, включая обсуждение нашей политики разделения. Наконец, он завершается некоторыми советами по работе с GPT на Macintosh.

Обзор
GPT GPT - это простая, но эффективная схема разбиения. В таблице 1 показана сводная информация о компоновке блоков, используемой GPT. В этой таблице n - это количество блоков на диске, а b - это количество блоков, используемых для описания массива записей раздела (обычно 32, но обсуждение этого см. Ниже).

блок

Описание

Защитный MBR

1

Заголовок таблицы разделов (основной)

От 2 до 2 + б-1

Массив записи раздела (основной)

2 + б через н-2-б

данные раздела

от n-2-b + 1 до n-2

Массив записи раздела (резервная копия)

н-1

Заголовок таблицы разделов (резервная копия)

Защитная MBR , является MBR , который определяет одну запись раздела ,который охватывает всю площадь диска , используемого GPT структур и перегородок. Оно разработано для предотвращения случайного изменения не GPT-программами диска GPT. Программа, не поддерживающая GPT, видит диск GPT как MBR-диск с одним неизвестным разделом. В некотором смысле это похоже на оболочку HFS вокруг диска HFS Plus.

Предупреждение: см. Защитное MBR для важного обсуждения защитного MBR.Заголовок таблицы разделов представляет собой структуру , которая определяет различные аспекты диска, в то числе с GUID для уникальной идентификации диска, начального блока ввода массива разделов, и размера каждой записи раздела в этом массиве. Массив начального раздела



является массивом записей разделов, каждая из которых определяет раздел (или имеет все ноль, указывая, что запись не используется). Массив хранится в непрерывном диапазоне блоков на диске, который рассматривается как массив байтов. Первая запись раздела начинается с первого байта массива, следующая запись раздела следует сразу после этого и так далее. Размер этих записей задается полем в заголовке таблицы разделов.
Каждая запись раздела содержит идентификатор GUID для уникальной идентификации самого раздела, идентификатор GUID для определения типа раздела, начальный и конечный блоки раздела и имя раздела.
Для получения более подробной информации об этих структурах прочитайте спецификацию GPT. Читая, пожалуйста, имейте в виду следующее:

  • GPT немного порядковый; то есть, многобайтовые количества сохраняются с младшим байтом в первую очередь.
  • В GPT считается, что GUID имеет структуру, и вы должны обращаться со структурированными частями как с прямым порядком байтов. Например, GUID для типа раздела ESP показан в документации как C12A7328-F81F-11D2-BA4B-00A0C93EC93B, но записанные на диск байты: 0x28 0x73 0x2a 0xc1 0x1f 0xf8 0xd2 0x11 0xba 0x4b 0x3 0x3 0x0x0x0x0x0x0 0x0x0x0x0x0x0x0x0x0x0 То есть первые три поля GUID с разделителями-тире хранятся с прямым порядком байтов, а последние два поля - нет. См. Приложение A спецификации EFI для более подробной информации.
  • Когда одна структура GPT указывает на другую, она делает это через номер блока (в терминах, используемых в спецификации, это адрес логического блока или LBA). Чтобы соотнести это с байтовым смещением (например, если вы ищете в узле устройства), вы должны умножить его на размер блока. Вы можете получить размер блока узла устройства, вызвав ioctl с помощью селектора DKIOCGETBLOCKSIZE (определенного в <sys / disk.h>). Не думайте, что размер блока всегда будет 512 байт.
  • GPT требует, чтобы длина массива записи раздела была не менее 16 КБ. Для блока размером 512 байт это преобразуется в 32 блока. Для блока размером 4096 байт это всего 4 блока. Это минимальное значение; массив записи раздела может быть длиннее.
  • При переборе массива записей разделов важно, чтобы вы использовали поле SizeOfPartitionEntry заголовка таблицы разделов, чтобы определить размер записей. Не записывайте текущий размер записи раздела (128 байт).
  • В отличие от APM, не требуется, чтобы каждый блок был покрыт разделом.Любой блок между первым и последним используемым блоком (обозначенный полями FirstUsableLBA и LastUsableLBA заголовка таблицы разделов), который не покрыт допустимым разделом, считается свободным.Таким образом, нет эквивалента типу раздела Apple_Free.
  • Нет необходимости сортировать записи раздела в массиве записей раздела.


Поддержка Apple GPT
Любой компьютер Macintosh под управлением Mac OS X 10.4 и более поздних версий может подключать диски с разделами GPT.
Компьютеры Macintosh на базе Intel могут загружаться с GPT. По умолчанию внутренний жесткий диск отформатирован как GPT.

Важное замечание: Хотя компьютеры Macintosh на базе Intel могут загружаться из GPT и APM, Apple поддерживает загрузку Mac OS X на этих машинах только из GPT.Инструменты Apple от GUI, такие как Installer, не позволят вам установить Mac OS X для Mac на базе Intel на диски без GPT.

На всех компьютерах Macintosh на базе Intel (и, начиная с Mac OS X 10.4.6, а также на компьютерах на базе PowerPC), Disk Utility полностью поддерживает GPT.Инструмент командной строки diskutil также включает поддержку GPT.

Примечание: Если вы используете компьютер на базе PowerPC под управлением Mac OS X 10.4.6, вы будете разочарованы, обнаружив, что справочная страница diskutil не была обновлена для GPT. Будьте уверены, что код фактического диска является GPT-осведомленным. Используйте встроенную справку инструмента, чтобы узнать, как создать диск GPT.
Рекомендации для разделителей
Спецификация GPT очень гибкая; стандарт не определяет, как именно разделить диск, он просто описывает область возможного. Когда Apple внедрила нашу поддержку GPT, мы приняли ряд политических решений о том, как расположить диск, и мы рекомендуем, чтобы сторонние дисковые утилиты для Macintosh следовали нашим правилам. Типы разделов GPT
Большинство типов разделов GPT определены в спецификации GPT. Кроме того, Apple определила несколько идентификаторов GUID для обозначения специфических для Apple типов разделов. Они описаны в таблице 2.

Тип

GUID

APM Эквивалент

HFS [Подробнее]

48465300-0000-11AA-AA11-00306543ECAC

Apple_HFS

UFS

55465300-0000-11AA-AA11-00306543ECAC

Apple_UFS

ботинок

426F6F74-0000-11AA-AA11-00306543ECAC

Apple_Boot

RAID

52414944-0000-11AA-AA11-00306543ECAC

Apple_RAID

Автономный RAID

52414944-5F4F-11AA-AA11-00306543ECAC

Apple_RAID_Offline

этикетка

4C616265-6C00-11AA-AA11-00306543ECAC

Apple_Label

Политика
разбиения диска При разбиении диска как GPT мы размечаем карту разделов по-разному, в зависимости от того, маленький диск, маленький или большой. Ради этого обсуждения крошечный диск - это тот, чей размер меньше 1 ГБ, маленький диск - от 1 до 2 ГБ, а большой диск - тот, чей размер составляет 2 ГБ или более.
Политика разделения Apple выглядит следующим образом:

  • Для всех типов дисков мы выравниваем каждый раздел по границе 4 КБ.
  • Для крошечных дисков мы создаем разделы более или менее, как указано пользователем. То есть мы не создаем лишних разделов и не оставляем за собой значительного количества свободного места.
  • Для маленьких дисков мы не создаем лишних разделов, но мы оставляем 128 МБ свободного места после каждого раздела.
  • Для больших дисков мы всегда создаем системный раздел EFI (ESP) объемом 200 МБ (см. Объяснение ESP) в качестве первого раздела на диске. Мы также оставляем 128 МБ свободного места после каждого раздела (не включая ESP).

Таблица 3 представляет сводную информацию о политике для каждого типа диска.

Тип

Диапазон размеров

Выравнивание раздела

Свободное место

ESP

крошечный

0 <= размер <1 ГБ

4 KB

нет

никто

Небольшой

1 ГБ <= размер <2 ГБ

4 KB

128 МБ после каждого раздела

никто

большой

2 ГБ <= размер

4 KB

128 МБ после каждого раздела (кроме ESP)

200 MB


Важное замечание: Мы выравниваем разделы по 4 КБ, чтобы учесть ограничения реализации файловой системы HFS Plus в Mac OS X (r. [Rdar: // problem / 4259751 | 4259751]).
Примечание. Мы оставляем свободное место после каждого раздела, чтобы в будущем системному программному обеспечению было проще манипулировать картой разделов способами, которые мы не можем ожидать в настоящее время.

ESP Разъяснения системный раздел EFI (ESP) представляет собой специальный раздел , с которого можно загрузить EFI EFI (время загрузки) драйверы устройств.Прошивка EFI на компьютерах Macintosh полностью поддерживает ESP, хотя Apple в настоящее время не использует его ни для чего. Мы создаем ESP на больших дисках, чтобы упростить задачу, если нам когда-либо понадобятся драйверы на основе ESP. Мы настоятельно рекомендуем вам сделать то же самое.

При инициализации ESP имейте в виду, что он должен соответствовать спецификации в документации EFI. Хотя ESP выглядит как том FAT32, на самом деле это файловая система EFI, которая «будет поддерживаться спецификацией и со временем не будет развиваться, чтобы иметь дело с ошибками или вариантами интерпретаций в драйверах файловой системы ОС». Для получения дополнительной информации см. Раздел 12.2 «Формат файловой системы» Спецификации UEFI, версия 2.0.
Таким образом, вам не следует использовать утилиту [x-man-page_ / 8 / newfs_msdos.html | newfs_msdos] для создания ESP, поскольку нет способа гарантировать, что он создаст файловую систему EFI. Вы можете подумать о включении (сжатого) образа диска ESP в свою дисковую утилиту.

Советы и подсказки
В этом разделе описан ряд полезных советов по работе с инструментами командной строки GPT.GPT.
Начиная с Mac OS X 10.4, Apple включила инструмент командной строки gpt для изучения и изменения GPT-дисков. Вы можете узнать больше об этом инструменте, прочитав его [x-man-page_ / 8 / gpt.html | man page]. Источник для этого инструмента включен в Дарвин .
Системы, которые полностью поддерживают GPT, включают версию diskutil, которая понимает GPT.
Имейте в виду, что эти два инструмента основаны на разных исходных базах.Инструмент gpt - это стандартная программа, созданная на основе инструмента FreeBSD gpt, и его источник находится в Дарвине. Инструмент diskutil - это созданная Apple программа, которая использует частную инфраструктуру Apple (инфраструктуру управления дисками и, в свою очередь, инфраструктуру MediaKit) для своей работы.
Важно: Из-за своего наследия инструмент gpt не реализует политику разделения, описанную в разделе Политика разделения.

Одна приятная особенность инструмента diskutil состоит в том, что он будет отображать известные типы разделов GPT в удобочитаемой форме, а не в виде необработанного идентификатора GUID. Проблемы с копированием
Будьте осторожны при копировании блоков GPT с блочных блоков. Идентификатор GUID в заголовке таблицы разделов, который идентифицирует диск (и идентификаторы GUID в каждой записи раздела), должен быть глобально уникальным , и системное программное обеспечение Apple использует эту функцию. Если вы блокируете копирование диска, вам следует подумать, стоит ли устанавливать эти GUID в новые значения. Например:

  • Если вы блокируете копирование диска в целях резервного копирования (то есть копия хранится в автономном режиме и может быть восстановлена только поверх оригинала), вам не следует обновлять GUID в GPT. Таким образом, когда вы восстанавливаете диск, он полностью идентичен оригиналу.
  • С другой стороны, если вы дублируете диск (то есть копируете содержимое одного диска на другой), вы должны обновить GUID в GPT. Таким образом, система увидит оригинал и копию как разные диски.

Если вы не будете следовать этому совету, у вас могут возникнуть странные проблемы. Например, если вы дублируете диск без обновления идентификаторов GUID, компьютер может загружаться либо с оригинала, либо с копии непредсказуемым образом (возможно, переключаясь с boot to boot ).

Тип

GUID

Эквивалент APM

HFS [Плюс]

48465300-0000-11AA-AA11-00306543ECAC

Apple_HFS

УФС

55465300-0000-11AA-AA11-00306543ECAC

Apple_UFS

Ботинок

426F6F74-0000-11AA-AA11-00306543ECAC

Apple_Boot

РЕЙД

52414944-0000-11AA-AA11-00306543ECAC

Apple_RAID

Оффлайн RAID

52414944-5F4F-11AA-AA11-00306543ECAC

Apple_RAID_Оффлайн

Этикетка

4C616265-6C00-11AA-AA11-00306543ECAC

Apple_Label

Советы и подсказки

В этом разделе описан ряд полезных советов по работе с GPT.

Инструменты командной строки GPT

Начиная с Mac OS X 10.4, Apple включила инструмент командной строки, gpt, для исследования и изменения дисков GPT. Вы можете узнать больше об этом инструменте, прочитав его страницу руководства . Исходный код этого инструмента включен в Darwin .

Системы, полностью поддерживающие GPT, включают версию, diskutilкоторая понимает GPT.

Имейте в виду, что эти два инструмента основаны на разных исходных базах. gptИнструмент представляет собой стандартную программу, полученную из gptинструмента FreeBSD, и его источник находится в Darwin. diskutilИнструмент представляет собой программу, созданную Apple, которая использует частную инфраструктуру Apple (фреймворк Disk Management и, лежащий в его основе, фреймворк MediaKit) для выполнения своей работы.

Важно: Из-за своего наследия gptинструмент не реализует политику разбиения на разделы, описанную в разделе Политика разбиения на разделы .

Приятной особенностью инструмента diskutilявляется то, что он отображает известные типы разделов GPT в удобной для восприятия форме, а не в виде необработанного GUID.

Копирование проблем

Будьте осторожны при выполнении поблочного копирования диска GPT. GUID в заголовке таблицы разделов, который идентифицирует диск (и GUID в каждой записи раздела), должны быть глобально уникальными , и системное программное обеспечение Apple полагается на эту функцию. Если вы выполняете блочное копирование диска, вам следует подумать, уместно ли устанавливать для этих GUID новые значения. Например:

  • Если вы блокируете копирование диска в целях резервного копирования (то есть копия хранится офлайн и может быть восстановлена только поверх оригинала), вам не следует обновлять GUID в GPT. Таким образом, когда вы восстанавливаете диск, он будет полностью идентичен оригиналу.
  • С другой стороны, если вы дублируете диск (то есть копируете содержимое одного диска на другой), вам следует обновить GUID в GPT. Таким образом, система будет видеть оригинал и копию как разные диски.

Если вы не последуете этому совету, вы можете столкнуться со странными проблемами. Например, если вы дублируете диск, не обновив GUID, компьютер может загрузиться либо с оригинала, либо с копии непредсказуемым образом (возможно, переключаясь с загрузки на загрузку).

Последний блок

Существует ряд сторонних дисководов, которые из-за глючной прошивки сообщают об ошибке при доступе к последнему блоку на диске. Это не было серьезной проблемой для APM. Легко создать APM, который обходит последний блок, создав небольшой Apple_Freeраздел в конце диска (именно это делает реализация APM от Apple).

Однако для GPT эта проблема гораздо серьезнее. Спецификация GPT требует, чтобы последний блок диска содержал заголовок резервной таблицы разделов; вы не можете просто так этого избежать!

Apple решает эту проблему, игнорируя любые ошибки при чтении заголовка резервной таблицы разделов в последнем блоке диска GPT. Если возникает такая ошибка, диск имеет допустимую первичную таблицу разделов и недопустимую резервную копию. Согласно правилам, изложенным в спецификации GPT, такой диск все равно считается допустимым диском GPT.

С другой стороны, если при разбиении диска на разделы как GPT запись в последний блок приводит к ошибке, операция разбиения завершится неудачей. Такой диск нельзя разбить на разделы как GPT с помощью программного обеспечения Apple.

Защитный МБР

По определению, все диски GPT начинаются с защитной MBR. Это MBR, которая определяет одну запись раздела (типа 0xEE), которая охватывает всю область диска, используемую структурами и разделами GPT. Она предназначена для предотвращения случайного изменения диска GPT программами, не знающими о GPT.

Программа, поддерживающая GPT, может распознать, что диск содержит GPT, проверив блок 1 и последний блок, как описано в спецификации EFI . Кроме того, она должна проверить, что блок 0 содержит защитную MBR. Если блок 0 содержит любую другую форму MBR, она должна отказаться от манипуляций с диском. В частности, если блок 0 содержит MBR с более чем одной записью раздела или одну запись раздела, которая OSTypeне является 0xEE, это несовместимый диск GPT, и манипуляции с GPT могут вызвать опасные несоответствия между ним и устаревшей MBR.

33 views·1 share