Секреты GPT
Apple переключился на новую схему разбиения дисков на разделы, известную как таблица разделов GUID или GPT. Эта новая схема предлагает много преимуществ перед предыдущей схемой, но это также представляет собой некоторые новые проблемы. Этот technote описывает GPT в целом и предоставляет некоторую определенную подробную информацию о том, как Apple использует GPT.
Необходимо считать этот technote, если Вы пишете программное обеспечение, взаимодействующее с реализацией Apple GPT. В частности, если Вы пишете дисковую утилиту для Mac OS X или пытаетесь выполнить некоторую альтернативную операционную систему, как Linux, на компьютере Macintosh, этот technote жизненно важен.
Дорога к GPT
Предыдущая схема разбиения дисков на разделы Apple, известная как Карта раздела Apple (APM), была начата с Macintosh II в 1987. Схема была очень хорошо разработана, и она оставалась в силе, с очень немногими изменениями, в течение почти двадцати лет.
Однако в последние годы ограничения APM's вырисовывались на горизонте. В частности APM ограничивается ценностью на 32 бита блоков. Со стандартным размером блока 512 байтов это переводит в максимальный размер диска 2 TB. С уровнем, который увеличивают жесткие диски, просто вообразить обычный настольный компьютер, поставляющий больше чем с 2 TB хранения за следующие несколько лет.
Apple действительно полагал, что расширяющийся APM поддерживал большие диски. Однако как таковой изменение повредило бы все существующие инструменты разделения, было столь же удобно переключиться на полностью новую схему выделения разделов. После некоторой серьезной мысли Apple решил принять GPT.
Схема выделения разделов Таблицы разделов GUID (GPT) была представлена Intel как часть усилия представить более современное встроенное микропрограммное обеспечение универсальным аппаратным средствам PC. Традиционные аппаратные средства PC используют встроенное микропрограммное обеспечение BIOS, использующее схему выделения разделов, известную как главная загрузочная запись (MBR). MBR имеет много серьезных ограничений и не является подходящим для современного компьютера. Современное встроенное микропрограммное обеспечение Intel, известное как Extensible Firmware Interface (EFI), включает новую схему выделения разделов, GPT.
Одна из хороших функций о GPT - то, что он определяется формальным стандартом. В частности GPT определяется следующими документами:
Разделите 11.2.2 из «Расширяемой Микропрограммной Интерфейсной Спецификации», версия 1.1, доступная от Intel
Глава 5 «Формат GUID Partition Table (GPT)» «Объединенной Расширяемой Микропрограммной Интерфейсной Спецификации», версия 2.0, доступная от Объединенного Форума EFI
Поскольку GPT определяется формальной спецификацией, не необходимо описать его подробно здесь. Таким образом этот technote концентрируется о том, как GPT используется Apple. Это запускается с общего обзора GPT. Это тогда описывает, как Apple развернул поддержку GPT, включая обсуждение наших политик разделения. Наконец, это завершает некоторыми полезными советами для работы с GPT на Macintosh.
Обзор GPT
GPT является простой, но эффективной схемой выделения разделов. Таблица 1 показывает высокоуровневую сводку блочного расположения, используемого GPT. В этой таблице n является числом блоков на диске, и b является числом блоков, используемых, чтобы описать массив записи раздела (обычно 32, но видеть ниже для обсуждения этого).
Блок | Описание |
|---|---|
0 | Защитный MBR |
1 | (Основной) заголовок таблицы разделов |
2 через 2+b-1 | (Основной) массив записи раздела |
2+b через n-2-b | данные раздела |
n-2-b+1 через n-2 | Массив записи раздела (резервное копирование) |
n-1 | Заголовок таблицы разделов (резервное копирование) |
Защитным MBR является MBR, определяющий единственную запись раздела, покрывающую всю область диска, используемого структурами GPT и разделами. Это разработано для предотвращения GPT-не-сознающих программ от случайного изменения диска GPT. GPT-не-сознающая программа рассматривает диск GPT как диск MBR с единственным, неизвестным разделом. В некотором смысле, это походит на обертку HFS вокруг HFS Плюс диск.
Заголовок таблицы разделов является структурой, определяющей различные аспекты диска, включая GUID для однозначного определения диска, стартового блока массива записи раздела и размера каждой записи раздела в том массиве.
Массив записи раздела является массивом записей раздела, каждая из которых определяет раздел (или весь нуль, указывая, что запись не используется). Массив сохранен в непрерывном диапазоне блоков на диске, обрабатывающемся как массив байтов. Первая запись раздела запускается в первом байте массива, следующая запись раздела следует сразу после этого и т.д. Размер этих записей дан полем в заголовке таблицы разделов.
Каждая запись раздела содержит GUID для однозначного определения самого раздела, GUID для идентификации типа раздела, запуска и блока конца раздела и имени раздела.
Для получения дополнительной информации об этих структурах, считайте спецификацию GPT. Поскольку Вы читаете, имейте в виду следующее:
GPT является прямым порядком байтов; т.е. многобайтовые количества сохранены младшим значащим байтом сначала.
В GPT GUIDs, как полагают, имеет структуру, и необходимо обработать структурированные части как прямой порядок байтов. Например, GUID для типа раздела ESP показан в документации как C12A7328 F81F 11D2 BA4B 00A0C93EC93B, но байты, записанные в диск, являются 0x28 0x73 0x2a 0xc1 0x1f 0xf8 0xd2 0x11 0xba 0x4b 0x00 0xa0 0xc9 0x3e 0xc9 0x3b. Т.е. первые три разграниченных тире поля GUID сохранены прямой порядок байтов, и последние два поля не. См. Приложение A спецификации EFI для большего количества подробных данных.
Когда одна структура GPT указывает другому, она делает так через номер блока (в терминах, использованных спецификацией, это - логический адрес блока или LBA). Для корреляции этого к байтовому смещению (например, если Вы ищете в узле устройства), необходимо умножить его на размер блока. Можно получить размер блока узла устройства путем вызова
ioctlсDKIOCGETBLOCKSIZEселектор (определенный в<sys/disk.h>). Не предполагайте, что размер блока всегда будет 512 байтами.GPT требует, чтобы массив записи раздела был по крайней мере 16 КБ длиной. Для 512-байтового размера блока это переводит в 32 блока. Для 4 096-байтового размера блока это - только 4 блока. Это - минимальное значение; массив записи раздела может быть более длинным.
При итерации по массиву записи раздела жизненно важно, чтобы Вы использовали
SizeOfPartitionEntryполе заголовка таблицы разделов для определения размера записей. Не соединяйте текущий размер проводами записи раздела (128 байтов).В отличие от APM, нет никакого требования что каждый блок быть покрытым разделом. Любой блок между первым и последним применимым блоком (обозначенный
FirstUsableLBAиLastUsableLBAполя заголовка таблицы разделов), который не покрыт допустимым разделом, считается свободным. Таким образом нет никакого эквивалентаApple_Freeтип раздела.Нет никакого требования, чтобы записи раздела быть сортированными в записи раздела выстроили.
Поддержка Apple GPT
Любой компьютер Macintosh рабочий Mac OS X 10.4 и позже может смонтировать GPT-фрагментированные-диски.
Основанные на Intel компьютеры Macintosh могут загрузиться от GPT. По умолчанию внутренний жесткий диск отформатирован как GPT.
На всех основанных на Intel компьютерах Macintosh (и, начиная с Mac OS X 10.4.6, основанные на PowerPC компьютеры также), Дисковая утилита имеет полную поддержку GPT. diskutil инструмент командной строки также включает поддержку GPT. См. его страницу справочника для подробных данных.
Уведомление для Partitioners
Спецификация GPT очень гибка; стандарт не определяет точно, как разделить диск, он просто описывает область того, что возможно. Когда Apple реализовал нашу поддержку GPT, мы сделали много стратегических решений о том, как разметить диск, и мы рекомендуем, чтобы сторонние дисковые утилиты для Macintosh следовали за нашими политиками.
Типы раздела GPT
Большинство типов раздела GPT определяется в спецификации GPT. Кроме того, Apple определил много GUIDs для обозначения специфичных для Apple типов раздела. Они описаны в Таблице 2.
Ввести | ГУИД | Эквивалентный APM |
|---|---|---|
HFS [Плюс] | 48 465 300 0000 11AA AA11 00306543ECAC | Apple_HFS |
UFS | 55 465 300 0000 11AA AA11 00306543ECAC | Apple_UFS |
Начальная загрузка | 426F6F74 0000 11AA AA11 00306543ECAC | Apple_Boot |
RAID | 52 414 944 0000 11AA AA11 00306543ECAC | Apple_RAID |
Оффлайновый RAID | 52 414 944 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 КБАЙТА | нет | ни один |
Маленький | 1 ГБ <= размер <2 ГБ | 4 КБАЙТА | 128 МБ после каждого раздела | ни один |
Большой | 2 ГБ <= размер | 4 КБАЙТА | 128 МБ после каждого раздела (кроме ESP) | 200 МБАЙТ |
Объясненный ESP
Системный раздел EFI (ESP) является специальным разделом, из которого EFI может загрузить EFI (время начальной загрузки) драйверы устройств. Встроенное микропрограммное обеспечение EFI в компьютерах Macintosh полностью поддерживает ESP, несмотря на то, что Apple в настоящее время не использует его ни для чего. Если мы когда-нибудь должны использовать основанные на ESP драйверы, мы создаем ESP на больших дисках для создания вещей проще. Мы строго рекомендуем сделать то же.
Когда Вы инициализируете ESP, имеете в виду, что это должно соответствовать спецификации в документации EFI. В то время как ESP похож на объем FAT32, это - фактически файловая система EFI, которая «будет сохраняться спецификацией и не разовьется в течение долгого времени для контакта с опечатками или различными интерпретациями в драйверах файловой системы OS». Для получения дополнительной информации посмотрите Раздел 12.2 «Форматов Файловой системы» Спецификации UEFI, версии 2.0.
Таким образом Вы не должны использовать newfs_msdos утилиту для создания ESP, потому что нет никакого способа гарантировать, что она создаст файловую систему EFI. Вы могли бы рассмотреть включая (сжатый) образ диска ESP в Вашей дисковой утилите.
Полезные советы
В этом разделе описываются много полезных подсказок при контакте с GPT.
Инструменты командной строки GPT
Начиная с Mac OS X 10.4, Apple включал инструмент командной строки, gpt, для исследования и изменения дисков GPT. Можно узнать больше об этом инструменте путем чтения его страницы справочника. Источник для этого инструмента включен в Дарвина.
Системы, полностью поддерживающие GPT, включают версию diskutil это понимает GPT.
Знайте, что эти два инструмента основываются на основах другого источника. gpt инструмент является стандартно-один программа, полученная из FreeBSD gpt инструмент и его источник находятся в Дарвине. diskutil инструмент является создаваемой Apple программой, использующей частную на Apple инфраструктуру (платформа Управления дисками и, лежа в основе этого, платформы MediaKit) для выполнения ее работы.
Одна хорошая функция diskutil инструмент - то, что это выведет на экран известные типы раздела GPT в человекочитаемой форме, а не как необработанный GUID.
Копирование проблем
Будьте осторожны при выполнении копии блока для блока диска GPT. GUID в заголовке таблицы разделов, идентифицирующем диск (и GUIDs в каждой записи раздела) предназначается, чтобы быть системным программным обеспечением глобально уникального, и Apple, полагается на эту функцию. Если Вы блокируете, копируют диск, необходимо рассмотреть, является ли надлежащим установить этот GUIDs в новые значения. Например:
Если Вы - блок, копируя диск в целях резервного копирования (т.е. копия сохранена оффлайн и может только когда-либо восстанавливаться поверх оригинала), Вы не должны обновлять GUIDs в GPT. Тот путь при восстановлении диска это абсолютно идентично оригиналу.
С другой стороны, при дублировании диска (т.е. Вы копируете содержание одного диска другому), необходимо обновить GUIDs в GPT. Тем путем система будет видеть оригинал и копию как различные диски.
Если Вы не следуете этому совету, можно встретиться со странными проблемами. Например, при дублировании диска, не обновляя GUIDs компьютер мог бы загрузиться или из оригинала или из копии непредсказуемым способом (возможно, переключающийся от начальной загрузки до начальной загрузки).
Последний блок
Существует много сторонних дисководов, вследствие ошибочного встроенного микропрограммного обеспечения, сообщающих об ошибке, если Вы получаете доступ к последнему блоку на диске. Это не было серьезной проблемой для APM. Просто создать APM, избегающий последнего блока путем создания маленького Apple_Free раздел в конце диска (это - то, что реализация Apple APM делает).
Для GPT, однако, эта проблема намного более серьезна. Спецификация GPT требует, чтобы последний блок диска содержал табличный заголовок резервного раздела; Вы не можете просто принять решение избежать его!
Apple решает эту проблему путем игнорирования любой ошибки при чтении табличного заголовка резервного раздела в последнем блоке диска GPT. Если такая ошибка происходит, диск имеет допустимую таблицу основного раздела и недопустимое резервное копирование. Согласно правилам, размеченным спецификацией GPT, такой диск все еще считается допустимым диском GPT.
С другой стороны, при разделении диска как GPT, при записи в последние блочные результаты по ошибке, работа разделения перестанет работать. Такой диск не может быть разделен как диск GPT с помощью программного обеспечения Apple.
Защитный MBR
По определению все диски GPT запускаются с защитного MBR. Это - MBR, определяющий единственную запись раздела (типа 0xEE), который покрывает всю область диска, используемого структурами GPT и разделами. Это разработано для предотвращения GPT-не-сознающих программ от случайного изменения диска GPT.
GPT-осведомленная программа может распознать, что диск содержит GPT путем проверки блока 1 и последнего блока, как обсуждено в спецификации EFI. Кроме того, это должно проверить, что блокируют 0, содержит защитный MBR. Если блок 0 содержит какую-либо другую форму MBR, это должно отказаться управлять диском. В частности, если блок 0 содержит MBR больше чем с одной записью раздела или единственной записью раздела чей OSType не 0xEE, это не совместимый диск GPT, и управление GPT может вызвать опасные несоответствия между ним и устаревшим MBR.
Дополнительные материалы для чтения
«Расширяемая Микропрограммная Интерфейсная Спецификация», версия 1.1, доступная от Intel
«Объединенная Расширяемая Микропрограммная Интерфейсная Спецификация», версия 2.0, доступная от Объединенного Форума EFI
История версии документа
| Дата | Примечания |
|---|---|
| 06.11.2006 | Исправленный орфографическая ошибка. |
| 01.11.2006 | Новый документ, описывающий новый формат карты раздела, используемый основанными на Intel компьютерами Macintosh. |