Таблица разделов GUID

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

GUID Partition Table, аббр. GPT — стандарт формата размещения таблиц разделов на физическом жестком диске. Он является частью Extensible Firmware Interface (EFI) — стандарта, предложенного Intel на смену BIOS. EFI использует GPT там, где BIOS использует Главную загрузочную запись (англ. Master Boot Record, MBR).

Диаграмма, схематично поясняющая формат GUID Partition Table. Каждый логический блок (LBA) имеет размер 512 байт, а каждая запись (entry) — 128 байт. Отрицательные адреса логических блоков обозначают нумерацию с конца диска (-1 — последний блок, −2 — предпоследний и т. д.)

Возможности

В отличие от MBR, которая начинается с исполняемой двоичной программы, призванной идентифицировать и загрузить активный раздел, GPT опирается на расширенные возможности EFI для осуществления этих процессов. Однако MBR присутствует в самом начале диска (блок LBA 0) как для защиты, так и в целях совместимости. Собственно GPT начинается с Оглавления таблицы разделов (англ. Partition Table Header).

GPT использует современную систему адресации логических блоков (LBA) вместо применявшейся в MBR адресации «Цилиндр — Головка — Сектор» (CHS). MBR, доставшаяся по наследству со всей своей информацией, содержится в блоке LBA 0, оглавление GPT — в блоке LBA 1. В оглавлении содержится адрес блока, где начинается сама таблица разделов, обычно это следующий блок — LBA 2. Количество разделов не ограничено стандартом и зависит от операционной системы[1] (технически ограничено порядка 264 разделами из-за разрядности полей). Так в Microsoft Windows в таблице разделов резервируется место для 128 записей по 128 байт каждая (в GNU/Linux ядро поддерживает до 256 разделов[2]). Таким образом для таблицы разделов в Windows резервируется 16 384 байт (при использовании сектора размером 512 байт это будет 32 сектора), так что первым используемым сектором каждого жёсткого диска в ней будет блок LBA 34.

Кроме того, GPT обеспечивает дублирование — оглавление и таблица разделов записаны как в начале, так и в конце диска.

Теоретически, GPT позволяет создавать разделы диска размером до 9,4 ЗБ (9,4 × 1021 байт) (при размере сектора 512 байт, иначе — больше), в то время как MBR может работать только до 2,2 ТБ (2,2 × 1012 байт).

GPT позволяет назначать разделам идентификаторы GUID, имена и атрибуты, независимо от внутренних UUID файловых систем, их меток и прочего, и позволяет обращаться по таким именам вместо меток и номеров разделов. Благодаря поддержке Юникода в именах и щадящих ограничений на них, разделы могут быть названы на любом языке и сгруппированы по папкам[3].

Наследственный MBR (LBA 0)

Основная цель помещения MBR в начало диска — защитная. MBR-ориентированные дисковые утилиты могут не распознать и даже перезаписать GPT-диски. Чтобы избежать этого, указывается наличие всего одного раздела, охватывающего весь GPT-диск. Системный идентификатор (англ. System ID) для этого раздела устанавливается в значение 0xEE, указывающее, что применяется GPT. Вследствие этого EFI игнорирует MBR. Некоторые 32-битные операционные системы, например Windows XP, не приспособленные для чтения дисков, содержащих GPT, тем не менее распознаю́т этот Системный идентификатор и представляют том в качестве недоступного GPT-диска. Более старые ОС[какие?] обычно представляют диск как содержащий единственный раздел неизвестного типа и без свободного места; как правило, они отказываются модифицировать такой диск, пока пользователь явно не потребует и не подтвердит удаление данного раздела. Таким способом предотвращается случайное стирание содержимого GPT-диска.

Оглавление таблицы разделов (LBA 1)

Оглавление таблицы разделов указывает те логические блоки на диске, которые могут быть задействованы пользователем (англ. the usable blocks). Оно также указывает число и размер записей данных о разделах, составляющих таблицу разделов. Стандартно в Microsoft Windows резервируется 128 записей данных о разделах. Таким образом, возможно создание 128 разделов на диске.

Оглавление содержит GUID (англ. Globally Unique IDentifier — «глобально уникальный идентификатор») диска. В оглавлении также содержится его собственный размер и местоположение (всегда блок LBA 1), а также размер и местоположение вторичного (запасного) оглавления и таблицы разделов, которые всегда размещаются в последних секторах диска. Важно, что оно также содержит контрольную сумму CRC32 для себя и для таблицы разделов. Эти контрольные суммы проверяются процессами EFI при загрузке машины. Из-за проверок контрольных сумм недопустима и бессмысленна модификация содержимого GPT в шестнадцатеричных редакторах. Всякое редактирование нарушит соответствие содержания контрольным суммам, после чего EFI перезапишет первичный GPT вторичным. Если же оба GPT будут содержать неверные контрольные суммы, доступ к диску станет невозможным. (Впрочем, редактирование возможно — см. https://www.linux.org.ru/forum/admin/13360627?cid=13363080)

Записи данных о разделах (LBA 2-33)

Записи данных о разделах (англ. Partition entries) просты и расположены с равным приращением адресов. Первые 16 байт определяют GUID типа раздела. Например, GUID системного EFI-раздела имеет вид «C12A7328-F81F-11D2-BA4B-00A0C93EC93B». Следующие 16 байт содержат GUID, уникальный для данного конкретного раздела. Далее записываются данные о начале и конце 64-битных LBA, если они имеются. Остальное место отводится информации об именах и атрибутах разделов.

Идентификаторы (GUID) различных типов разделов

Ассоц. платф. Тип раздела Глобально-уникальный идентификатор (GUID)
(Нет) Неиспользуемая запись данных 00000000-0000-0000-0000-000000000000
Схема разделов MBR 024DEE41-33E7-11D3-9D69-0008C781F39F
Системный раздел EFI C12A7328-F81F-11D2-BA4B-00A0C93EC93B
BIOS boot partition 21686148-6449-6E6F-744E-656564454649
Раздел Intel Fast Flash (iFFS) (для технологии Intel Rapid Start) D3BFE2DE-3DAF-11DF-BA40-E3A556D89593
Загрузочный раздел Sony F4019732-066E-4E12-8273-346C5641494F
Загрузочный раздел Lenovo BFBFAFE7-A34F-448A-9A5B-6213EB736C22
Windows Резервный раздел Microsoft E3C9E316-0B5C-4DB8-817D-F92DF00215AE
Раздел основных данных EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
Менеджер логических томов, раздел мета-данных 5808C8AA-7E8F-42E0-85D2-E1E90434CFB3
Менеджер логических томов, раздел данных AF9B60A0-1431-4F62-BC68-3311714A69AD
Раздел восстановления DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
HP-UX Раздел данных 75894C1E-3AEB-11D3-B7C1-7B03A0000000
Раздел Сервиса E2A1E728-32E3-11D6-A682-7B03A0000000
Linux Раздел данных 0FC63DAF-8483-4772-8E79-3D69D8477DE4
RAID раздел A19D880F-05FC-4D3B-A006-743F0F84911E
Своп-раздел 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
Раздел Менеджера логических томов (LVM) E6D6D379-F507-44C2-A23C-238F2A3DF928
Раздел /home 933AC7E1-2EB4-4F13-B844-0E14E2AEF915
Раздел /srv (данные сервера) 3B8F8425-20E0-4F3B-907F-1A25A76F98E8
Раздел dm-crypt 7FFEC5C9-2D00-49B7-8941-3EA10A5586B7
Раздел LUKS CA7D7CCB-63ED-4C53-861C-1742536059CC
Зарезервировано 8DA63339-0007-60C0-C436-083AC8230908
FreeBSD Загрузочный раздел 83BD6B9D-7F41-11DC-BE0B-001560B84F0F
Раздел данных 516E7CB4-6ECF-11D6-8FF8-00022D09712B
Своп-раздел 516E7CB5-6ECF-11D6-8FF8-00022D09712B
Раздел UFS (Unix File System) 516E7CB6-6ECF-11D6-8FF8-00022D09712B
Раздел менеджера томов Vinum 516E7CB8-6ECF-11D6-8FF8-00022D09712B
Раздел ZFS 516E7CBA-6ECF-11D6-8FF8-00022D09712B
macOS Раздел HFS+ (Hierarchical File System) 48465300-0000-11AA-AA11-00306543ECAC
Раздел APFS (Apple File System) 7C3457EF-0000-11AA-AA11-00306543ECAC
Apple UFS 55465300-0000-11AA-AA11-00306543ECAC
ZFS 6A898CC3-1DD2-11B2-99A6-080020736631
Apple RAID раздел 52414944-0000-11AA-AA11-00306543ECAC
Apple RAID раздел, offline 52414944-5F4F-11AA-AA11-00306543ECAC
Загрузочный раздел Apple 426F6F74-0000-11AA-AA11-00306543ECAC
Apple Label 4C616265-6C00-11AA-AA11-00306543ECAC
Раздел Apple TV Recovery 5265636F-7665-11AA-AA11-00306543ECAC
Раздел Apple Core Storage (то есть Lion FileVault) 53746F72-6167-11AA-AA11-00306543ECAC
Solaris Загрузочный раздел 6A82CB45-1DD2-11B2-99A6-080020736631
Корневой раздел 6A85CF4D-1DD2-11B2-99A6-080020736631
Своп раздел 6A87C46F-1DD2-11B2-99A6-080020736631
Backup-раздел 6A8B642B-1DD2-11B2-99A6-080020736631
Раздел /usr 6A898CC3-1DD2-11B2-99A6-080020736631
Раздел /var 6A8EF2E9-1DD2-11B2-99A6-080020736631
Раздел /home 6A90BA39-1DD2-11B2-99A6-080020736631
EFI_ALTSCTR 6A9283A5-1DD2-11B2-99A6-080020736631
Зарезервированные разделы 6A945A3B-1DD2-11B2-99A6-080020736631
6A9630D1-1DD2-11B2-99A6-080020736631
6A980767-1DD2-11B2-99A6-080020736631
6A96237F-1DD2-11B2-99A6-080020736631
6A8D2AC7-1DD2-11B2-99A6-080020736631
NetBSD Своп раздел 49F48D32-B10E-11DC-B99B-0019D1879648
Раздел FFS 49F48D5A-B10E-11DC-B99B-0019D1879648
Раздел LFS[англ.] 49F48D82-B10E-11DC-B99B-0019D1879648
Раздел RAID 49F48DAA-B10E-11DC-B99B-0019D1879648
Соединённый раздел 2DB519C4-B10F-11DC-B99B-0019D1879648
Шифрованный раздел 2DB519EC-B10F-11DC-B99B-0019D1879648
Chrome OS Ядро ChromeOS FE3A2A5D-4F32-41A7-B725-ACCC3285A309
ChromeOS rootfs 3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC
Для будущего использования ChromeOS 2E0A753D-9E48-43B0-8337-B15192CB1B5E
QNX Power-safe (QNX6) file system[4] CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1
OS/2 ArcaOS Type 1[5] 90B6FF38-B98F-4358-A21F-48F35B4A8AD3

Примечание 1: GUID для раздела данных Linux ранее являлся дубликатом GUID для раздела основных данных Microsoft Windows.

Примечание 2: Порядок записи байтов в написаниях GUID — little-endian. К примеру, GUID системного раздела EFI записан как: C12A7328-F81F-11D2-BA4B-00A0C93EC93B, что соответствует последовательности 16 байтов: 28 73 2A C1 1F F8 D2 11 BA 4B 00 A0 C9 3E C9 3B. Обратите внимание, что байты пишутся задом наперед только в первых трех блоках (C12A7328-F81F-11D2).

Недостатки

  • Противоречивые реализации поддержки GPT, возможно, из-за закрытости большей части стандарта (например, GUID для раздела данных Linux был изменён на другой, в старых версиях parted используется нестандартная кодировка имён).
  • Не предусмотрено возможности назначать имя всему диску, как отдельным разделам (хотя у него есть свой GUID).
  • По-прежнему сильна привязка раздела к его номеру в таблице (например, многие загрузчики ОС предпочитают номер именам и GUID).
  • Количество дубликатов таблиц строго ограничено двумя, их позиции зафиксированы, что в случае повреждения диска, ошибок администрирования или ошибок программ недостаточно для удобного восстановления данных.
  • Ни резервная копия GPT, ни основная не позволяют аннулировать другую копию в случае, если та неверна, но имеет правильную контрольную сумму и не может быть стёрта, то есть не предусмотрено защиты от повреждённых секторов (плохих блоков), которая давно есть в некоторых(ext3, ext4[6]) файловых системах.

См. также

Примечания

  1. What’s the Difference Between GPT and MBR When Partitioning a Drive?. Дата обращения: 5 апреля 2016. Архивировано 6 апреля 2016 года.
  2. Lingzhu Xiang. linux - What is the maximum number of partitions with EFI? (англ.). Super User (19 апреля 2013). Дата обращения: 5 апреля 2016.
  3. Для создания папок с разделом имя раздела должно содержать / и представлять относительный путь к разделу.
  4. QNX Power-safe filesystem. Дата обращения: 15 февраля 2016. Архивировано 24 сентября 2015 года.
  5. Arca Noae announces GUID for OS/2 Type 1 GPT partitions. Дата обращения: 2 ноября 2020. Архивировано 30 октября 2020 года.
  6. Лечение жесткого диска с бэд блоками bad blocks испорченные блоки (Решение) | Kubuntu.ru. www.kubuntu.ru. Дата обращения: 15 июля 2020. Архивировано 16 июля 2020 года.

Ссылки