GUID Partition Table (GPT) |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Таблица разделов GUID (GPT) это стандартная схема разметки физического устройства хранения данных для компьютера, такого как жесткий диск (HDD) или диск на основе FLASH-памяти (solid-state drive, SSD). В этой схеме используются универсальные, уникальные идентификаторы, также известные как globally unique identifier (GUID). Несмотря на то, что GPT является частью нового стандарта для firmware материнских плат Unified Extensible Firmware Interface (UEFI), который призван заменить старый PC BIOS, GPT все равно используется в некоторых системах со старой BIOS, потому что существуют ограничения старой системы таблицы разделов master boot record (MBR), которая основана на 32-битной логической адресации (logical block addressing, LBA) традиционных секторов диска по 512 байт (перевод статьи Википедии [1]). Все современные операционные системы персонального компьютера поддерживают GPT. Некоторые, включая macOS и Microsoft Windows на архитектуре x86, поддерживают загрузку с разделов GPT только когда в системе присутствует EFI, однако FreeBSD и большинство дистрибутивов Linux могут загружаться из разделов GPT на системах как с традиционными, старыми BIOS, так и с EFI. Система формирования разделов диска на основе Master Boot Record (MBR), широко используемая в начале 1980-х годов начиная с MS-DOS, накладывает ограничения на размер диска при использовании современного оборудования. Главная проблема - ограниченное максимальное количество секторов диска при кодировании их номеров 32-битным адресом блока. Для жестких дисков, у которых сектора по 512 байт, таблица MBR позволяет отформатировать диск размером не более 2 терабайта TiB (232 x 512 байт). В конце 1990-х, компания Intel разработала новый формат таблицы разделов GPT как часть того, что в конечном счете стало стандартом Unified Extensible Firmware Interface (UEFI). В 2010 году GPT сформировала подмножество спецификации UEFI. GPT использует 64 бита для логического адреса блока, что позволяет иметь на диске 264 секторов. Для дисков с секторами по 512 байт, максимальный 9.4 зетабайт ZB (9.4 x 1024 байт), или 8 ZiB (264 секторов, каждый по 29 байт). Также, как и современные MBR, GPT использует логическую адресацию блоков (LBA) вместо ранней, ушедшей в прошлое системы адресации на основе номеров цилиндров, головки и сектора (cylinder-head-sector, CHS). Protective MBR сохраняется в LBA 0, заголовок GPT в LBA 1, и в заголовке GPT есть указатель на таблицу разделов (Partition Entry Array), обычно находящуюся начиная с LBA 2. Каждая запись в Partition Entry Array имеет размер 128 байт. Спецификация UEFI предусматривает выделение под Partition Entry Array как минимум 16384 байт, независимо от размера сектора. Таким образом, если на диске сектора имеют размер 512 байт, сектор 34 будет первым сектором, который можно использовать непосредственно под раздел диска. Производители жестких дисков начали производить свои новые изделия с секторами по 4096 байт. Первые такие диски продолжали представляться для операционной системы как диски с 512-байтными физическими секторами. Могло произойти ухудшение производительности, когда физические границы 4-KiB сектора диска не совпадают с логическими блоками 4 KiB, страницами кластеров и страницами виртуальной памяти, что повсеместно используется в операционных и файловых системах. Это в частности создавало проблему на операциях записи, когда привод был вынужден выполнять две операции read-modify-write (чтение, модификация, запись), чтобы обработать одну не выровненную операцию записи 4 KiB. [Варианты MBR, используемые с GPT] Protective MBR (LBA 0). Для ограниченной обратной совместимости пространство традиционной MBR все еще резервировалось спецификацией GPT, однако это теперь используется способом, который предотвращает неправильное определение диска старыми утилитами, рассчитанными на традиционную MBR, и уменьшает вероятность ошибочной перезаписи дисков GPT. Это называется как protective MBR. Тип одного раздела EEh [2], обозначающий весь диск GPT (здесь "весь" на самом деле подразумевает то, как этот диск может быть представлен в MBR) показывает раздел GPT. Операционные системы и утилиты, которые не могут читать диски GPT, обычно распознают диск как содержащий один раздел неизвестного типа и без свободного места, и в результате отказываются модифицировать диск, если пользователь явно не разрешит и не подтвердит удаление этого раздела. Такой подход минимизирует случайные уничтожения данных. Кроме того, осведомленные о GPT операционные системы могут проверить protective MBR, и если вложенный тип раздела не EEh, или если существует несколько разделов на целевом диске, то операционная система может отказаться от манипулирования таблицей разделов. Хотя MBR и protective MBR были определены в расчете 512 байт на сектор, на различных носителях реальный размер сектора может быть больше (на магнитооптических дисках и жестких дисках с Advanced Format [3]). Если реальный размер диска превышает максимальный размер раздела, представленный традиционными 32-битными записями LBA в MBR, то зарегистрированный размер этого раздела обрезается на максимуме, игнорируя таким образом остальную часть диска. Это в результате дает максимальный размер диска 2 TiB в предположении, что в каждом секторе 512 байт (см. [3]). Это могло бы предоставить 16 TiB при размере сектора 4 KiB, но поскольку многие устаревшие операционные системы и инструменты жестко заточены на размер сектора 512 байт, или ограничены 32-разрядными вычислениями, превышение предела 2 TiB могло вызывать проблемы совместимости. Hybrid MBR (LBA 0 + GPT). В операционных системах, которые поддерживают загрузку на основе GPT через службы BIOS, отличающиеся от EFI, первый сектор все еще используется для сохранения кода загрузчика (bootloader) первой стадии, однако модифицированный для распознавания разделов GPT. Загрузчик в MBR не должен подразумевать размер сектора 512 байт. Заголовок таблицы разделов (LBA 1). В таблице ниже приведен формат заголовка GPT. Таблица 1. Формат заголовка GPT.
Примечание (1): Добавление суффикса ULL обозначает тип константы как unsigned long long int. Заголовок таблицы разделов определяет блоки диска, которые можно использовать. Он также определяет количество и размер элементов раздела, которые составляют таблицу разделов. Элементы раздела (LBA 2 - 23). После заголовка идет Partition Entry Array, где описываются разделы, и здесь каждая запись занимает минимум 128 байт. Начальное расположение массива на диске и размер каждой записи даются в заголовке GPT. Первые 16 байт каждой записи обозначают глобальный уникальный идентификатор (GUID) типа раздела. Например, GUID для системного раздела EFI будет C12A7328-F81F-11D2-BA4B-00A0C93EC93B (см. таблицу 9 ниже). Следующие 16 байт это GUID, уникальный для раздела. Затем идут начальный и конечный 64-битные адреса LBA, атрибуты раздела и затем символьное имя раздела (36 символов максимум) в кодировке Unicode. Сущность и цель идентификаторов GUID, как это определено в RFC4122[9] - систему уникальной идентификации типов раздела без необходимости центрального реестра. Таблица 2. Формат элемента раздела GPT.
64-разрядные атрибуты таблицы разделов совместно используются 48-разрядными общими атрибутами для всех типов разделов и 16-битными атрибутами, зависящими от типа раздела: Таблица 3. Атрибуты раздела.
Microsoft определяет атрибуты, зависящие от типа, для базовых разделов данных следующим образом: Таблица 4. Атрибуты раздела базового типа.
Google определяет атрибуты, зависящие от типа, для ядра Chrome OS следующим образом: Таблица 5. Атрибуты раздела Chrome OS kernel.
[GPT в операционных системах] Ниже в таблицах показана поддержка GPT различными операционными системами. Таблица 6. Поддержка GPT на UNIX и других операционных системах стиля and Unix.
Таблица 7. Поддержка GPT на 32-битных версиях Windows (платформа IA-32).
Windows 7 и более ранние версии Windows не поддерживают UEFI на 32-битных платформах, поэтому они не поддерживают загрузку с GPT-разделов. Таблица 8. Поддержка GPT на 64-битных версиях Windows.
Таблица 9. Значения GUID типов раздела.
[Linux: переход с MBR на GPT] MS-DOS Master Boot Record. MBR должна была находиться в первых 512 байтах диска, и здесь содержится загрузчик и таблица разделов. Код загрузчика занимает 446 байт, таблица разделов использует 64 байта, и последние 2 байта хранят сигнатуру загрузки (boot signature). MBR ограничена четырьмя главными разделами (primary partitions), один primary-раздел может содержать расширенный раздел (extended partition), который может быть поделен на логические разделы. Linux поддерживает (теоретически) неограниченное количество логических разделов. Ранние версии Linux ограничивались 63-мя разделами IDE и 15-ю разделами SCSI, потому что ядро было ограничено общим количеством устройств, которое оно могло выделить. Сейчас менеджер устройств udev выделяет номера устройств динамически, поэтому такого ограничения уже нет. Маленькая и не гибкая MBR просуществовала на Linux довольно долго благодаря хитрым хакам, позволяющим обходить ограничения MBR. Система логической адресации блоков LBA, сменившая старую систему адресации на основе цилиндров, головок и секторов CHS позволила поддерживать диски до 2 терабайт при размере сектора 512 байт. Более продвинутые модификации Linux позволяли использовать сектора по 4096 байт, что давало максимальный размер диска 16 терабайт. GUID Partition Table (GPT). Современный Linux не нуждается в EFI BIOS для загрузки с раздела GPT, так как может использовать GPT даже на системах со старым BIOS. Операционные системы Mac OS X и Windows не обладают такой гибкостью. У GPT не существует разделения на primary-раздел и логические разделы, здесь диск просто разбивается на отдельные разделы. Когда Вы форматируете жесткий диск и хотите использовать GPT, просто выберите для этого в выпадающем списке опцию gpt. У GPT есть несколько важных преимуществ перед MBR: • 64-битная адресация позволяет иметь на диске 264 секторов, что дает размер диска 8 ZiB при 512-байтных блоках. Дисков такого размера физически пока что не существует. Уникальные идентификаторы. Идентификаторы GPT GUID (Globally Unique IDentifiers) и идентификаторы Linux UUID (Universally Unique IDentifiers) не одно и то же, хотя они служат одной и той же полезной цели: дают уникальные имена блочным устройствам. Linux UUID это функция файловых систем, и они создаются, когда создается файловая система. Чтобы посмотреть Linux UUID, выполните команду blkid: $ sudo blkid /dev/sda1: LABEL="storage" UUID="60e97193-e9b2-495f-8db1 -651f3a87d455" TYPE="ext4" /dev/sda2: LABEL="oldhome" UUID="e6494a9b-5fb6-4c35-ad4c- 86e223040a70" TYPE="ext4" В этом примере также показаны метки файловой системы, это произвольные имена, которые пользователь может дать своим блоковым устройствам. Мы можем использовать UUID в /etc/fstab примерно так: # storage, /dev/sda1 data storage UUID=60e97193-e9b2-495f-8db1-651f3a87d455 /home/carla/storage ext4 user,defaults 0 0 Или можем использовать метку устройства: LABEL=storage /home/carla/storage ext4 user,defaults 0 Чтобы получить идентификаторы GUID, нужно использовать команду gdisk: # gdisk /dev/sdc GPT fdisk (gdisk) version 0.8.1 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): Этот вывод сразу дал полезную информацию: диск использует GPT, где MBR применена в защищенном режиме (protective MBR). Protected MBR позволяет загружаться на компьютере со старым BIOS, и защищает GPT от утилит, которые не знакомы с GPT (таких как fdisk) и от операционных систем, которые не могут работать с GPT. Вместо GPT-диска они увидят MBR-диск с разделом неизвестного типа, на котором нет свободного места. Команда gdisk выдает подробную информацию о разделах на диске. Нажмите клавишу p, чтобы увидеть все разделы: Command (? for help): p Disk /dev/sdc: 3907029168 sectors, 1.8 TiB Logical sector size: 512 bytes Disk identifier (GUID): 058D39EE-5D06-409F-AA0C-298A3E6CC302 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 3907029134 Partitions will be aligned on 2048-sector boundaries Total free space is 819142765 sectors (390.6 GiB) Number Start (sector) End (sector) Size Code Name 1 2048 1953791 953.0 MiB 0700 2 1953792 80078847 37.3 GiB 0700 3 80078848 2033203199 931.3 GiB 0700 4 2033203200 3009765375 465.7 GiB 0700 5 3009765376 3048826879 18.6 GiB 0700 6 3048826880 3087888383 18.6 GiB 8200 Обратите внимание, что показанный размер логического сектора составляет 512 байт. Новые большие диски могут использовать сектора по 4096 байт, и это именно такой диск. Что на самом деле происходит? Чтобы узнать размер физического сектора, можно запустить команду lsblk: $ lsblk -t /dev/sdc NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE sdc 0 4096 0 4096 512 1 cfq 128 |--sdc1 0 4096 0 4096 512 1 cfq 128 |--sdc2 0 4096 0 4096 512 1 cfq 128 |--sdc3 0 4096 0 4096 512 1 cfq 128 Команда lsblk показала, что физические сектора имеют размер 4096 байт. Это магическое число на больших HDD используется по нескольким причинам: оно позволяет более эффективно использовать пространство хранилища данных, потому что обычная страница памяти на x86 компьютерах составляет 4096 байт, и файловые системы ext3, ext4 по умолчанию используют кластеры размером 4KB. Но для обеспечения обратной совместимости (контроллеры диска, старое ПО и старые операционные системы) производители жестких дисков эмулируют сектора по 512 байт. Вернемся обратно в gdisk и проверим один раздел. Нажмите i, и введите номер раздела. На старом Linux Mint 13 можно увидеть следующее: Command (? for help): i Partition number (1-6): 3 Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data) Partition unique GUID: 8C208C30-4E8F-4096-ACF9-858959BABBAA First sector: 80078848 (at 38.2 GiB) Last sector: 2033203199 (at 969.5 GiB) Partition size: 1953124352 sectors (931.3 GiB) Attribute flags: 0000000000000000 Partition name: '' Обратите внимание на Partition GUID code, он обозначен как "Microsoft basic data". На самом деле Microsoft не сможет прочитать этот раздел (он будет виден как не отформатированный), потому что раздел отформатирован в системе EXT4. Так раздел будет отображаться на старых версиях Linux до 2011 года, когда не существовали никакие GUID файловой системы Linux. Теперь GUID есть, и если Вы используете современный Linux, то вместо этого увидите правильный Linux GUID (0FC63DAF-8483-4772-8E79-3D69D8477DE4). Уникальный Partition GUID это то, что Вы будете использовать в fstab, примерно так: PARTUUID=8C208C30-4E8F-4096-ACF9-858959BABBAA /data ext4 user,defaults 0 0 [Ссылки] 1. GUID Partition Table site:wikipedia.org. |