Тип розділу диска (partition type або partition ID) – це показник (ідентифікатор), що зберігається у записі таблиці розділів накопичувача і визначає призначення або файлову систему цього розділу. У класичній схемі Master Boot Record (MBR) такий ідентифікатор є однобайтовим кодом, записаним у таблиці розділів, тоді як у сучасній GUID Partition Table (GPT) для цього використовується 128-бітний глобально унікальний ідентифікатор (GUID). Цей код (або GUID) не містить самих даних файлової системи – він лише слугує міткою, за якою операційна система та прошивка можуть розпізнати тип розділу і вирішити, як з ним поводитися. Іншими словами, тип розділу вказує, який очікуваний вміст або роль має розділ (наприклад, розділ з файловою системою NTFS, розділ підкачки Linux, системний завантажувальний розділ EFI тощо).
Історія та еволюція схем розмітки MBR і GPT MBR (Master Boot Record) – історично перша широко використовувана схема розділення дисків на ПК. Вона була запроваджена 1983 року в PC DOS 2.0 для IBM PC-сумісних комп’ютерів. MBR займає перші 512 байтів диска і містить завантажувальний код BIOS та таблицю розділів. Таблиця розділів MBR складається максимум з чотирьох записів по 16 байт – через це MBR підтримує не більше 4 основних розділів (primary partitions). Щоб обійти це обмеження, була придумана концепція розширеного розділу: один з основних записів MBR може позначати розширений розділ (тип 0x05 або 0x0F), всередині якого розміщуються додаткові записи розділів (так звані логічні розділи) у спеціальних розширених завантажувальних записах (EBR). Окрім ліміту на кількість розділів, MBR має і інше суттєве обмеження – розмір адресації. Поля для адрес в таблиці MBR – 32-бітові, що при стандартному розмірі сектора 512 байт дає максимальний адресований обсяг близько 2,2 ТБ. Ця межа стала критичною з появою більших накопичувачів.
Для розв’язання обмежень MBR компанією Intel у рамках специфікації EFI (згодом UEFI) була розроблена схема GUID Partition Table (GPT). GPT стала частиною стандарту UEFI і мала на меті замінити застарілий MBR. GPT використовує 64-бітні поля для адрес, що дозволяє підтримувати диски надзвичайно великого розміру (теоретично до 8–9 зетабайт). Кількість розділів також не обмежена жорстко числом 4 – за замовчуванням GPT таблиця містить місце під 128 розділів (і це число можна збільшити, збільшивши розмір запису). Структурно GPT зберігає метадані на початку і в кінці диска (основна та резервна GPT), що підвищує надійність. Перехід на GPT почався в 2000-х: спершу на 64-бітових системах (Itanium) та у Mac OS X для Mac з процесорами Intel (з 2006), пізніше – у Windows (підтримка GPT-дисків з’явилась у Windows XP x64 Edition і Windows Vista). На сьогодні GPT підтримується всіма сучасними ОС, особливо вона є обов’язковою для завантаження в режимі UEFI на сучасних системах (Windows для UEFI-встановлення потребує GPT), тоді як MBR поступово витісняється.
Підсумовуючи, MBR – це стара схема розділів з обмеженнями 2 ТБ і 4 розділи, що використовує 1-байтові коди типів. GPT – сучасна схема без цих обмежень, частина стандарту UEFI, що використовує GUID-и типів розділів і зберігає дублікати метаданих для надійності.
Коди типів розділів у MBR (система ідентифікаторів MBR) У таблиці розділів MBR кожен запис розділу містить поле ідентифікатора типу в розмірі 1 байт (так званий partition type byte або system ID byte). Це поле знаходиться за зміщенням 0x04 у 16-байтовому записі розділу і задається у шістнадцятковому форматі (наприклад, 0x07, 0x83 тощо). Значення 0x00 зарезервовано для позначення незаповненого (вільного) запису таблиці, тобто відсутності розділу. Кожне інше ненульове значення теоретично відповідає певному типу розділу або файлової системи.
Спочатку ідея полягала в тому, що цей код типу MBR вказує, яка файлова система чи призначення розділу всередині нього (наприклад, FAT16, NTFS, Linux ext, Linux swap тощо). Завантажувачі операційних систем, читаючи таблицю розділів, перевіряють ці коди, щоб зрозуміти, чи містить розділ знайому файлову систему, яку можна змонтувати або з якої можна завантажитися. Наприклад, код 0x07 зазвичай означає розділ з файловою системою NTFS (Windows) або HPFS (OS/2), 0x83 – розділ Linux із файловою системою ext4/ext3/іншою, 0x82 – розділ підкачки Linux або розділ Solaris, а коди 0x0B/0x0C позначають розділи FAT32 для Windows/DOS. Деякі коди не прив’язані до конкретної ФС, а мають особливе призначення – так, 0x05 і 0x0F сигналізують, що розділ є розширеним і містить вкладену таблицю розділів (для логічних розділів), а код 0xEE (238) використовується для захисного розділу GPT (докладніше нижче).
Варто зазначити, що стандарту на призначення цих кодів фактично не існувало – їх визначали виробники ОС та ПЗ за домовленістю. За десятиліття різні системи призначили собі чимало однакових значень, через що виникли колізії та дублювання. Microsoft зарезервувала значну частину діапазону для своїх систем, а проте код 0x07 використовується відразу для кількох FS (NTFS, exFAT, OS/2 HPFS), а більшість дистрибутивів Linux для всіх своїх власних файлових систем традиційно використовують один і той же код 0x83 (називаючи його “Linux native”). Відсутність єдиного реєстру призвела до того, що деякі менш відомі ОС або утиліти використовують “вільні” значення на свій розсуд. Попри це, склалася певна загальноприйнята таблиця відповідностей кодів і систем. Нижче наведено таблицю з найбільш поширеними кодами розділів MBR та їх значеннями.
GUID типів розділів у GPT У схемі GPT концепція типу розділу реалізована інакше. Кожен запис розділу в таблиці GPT має поле розміром 16 байтів, що містить GUID типу розділу (Partition Type GUID). GUID – це глобально унікальний ідентифікатор, записаний у формі 128-бітного числа. Таким чином, кожен тип розділу GPT має власний унікальний GUID, спільний для всіх розділів цього типу. На відміну від MBR, де доступно лише 256 можливих значень типу, простір GUID практично необмежений, тож конфліктів між різними системами не виникає – кожен виробник ОС або програм може визначити новий GUID для свого типу розділу при потребі.
Запис GPT для розділу містить не лише GUID типу, а й окремий GUID самого розділу (унікальний для кожного екземпляра розділу). Перші 16 байтів визначають тип (тобто що це за розділ), а наступні 16 байтів – унікальний ідентифікатор конкретного розділу. Наприклад, EFI System Partition (системний розділ EFI) має типовий GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B – всі розділи EFI у світі записані з таким кодом типу. Натомість кожен конкретний розділ EFI ще матиме свій власний унікальний GUID (другі 16 байтів), який відрізняє його від інших розділів навіть того ж типу.
GUID типів розділів визначені в специфікаціях UEFI та документації ОС. Деякі ключові GUID встановлено стандартом UEFI Forum (загальні для всіх систем), інші зарезервовані виробниками (Microsoft, Apple, Linux-спільнота тощо). Наприклад, окрім згаданого розділу EFI, стандартними є GUID для «BIOS boot partition» – спеціального розділу для завантажувачів на GPT-дисках під BIOS (його GUID 21686148-6449-6E6F-744E-656564454649 має ASCII-послідовність “HNOVH…” і є впізнаваним), а також зарезервований всесистемний GUID “Unused Entry” (00000000-0000-0000-0000-000000000000), який означає порожній запис GPT (відсутній розділ).
Для кожної великої платформи визначено власні GUID типів розділів. У Microsoft для GPT-дисків використовуються, зокрема: Microsoft Reserved Partition (MSR) з GUID E3C9E316-0B5C-4DB8-817D-F92DF00215AE та Microsoft Basic Data (звичайний розділ даних NTFS/exFAT) з GUID EBD0A0A2-B9E5-4433-87C0-68B6B72699C7. Розділ відновлення Windows (Windows RE) має свій GUID DE94BBA4-06D1-4D40-A16A-BFD50179D6AC, а динамічні диски (Windows LDM) – два спеціальних GUID для метаданих і даних Logical Disk Manager. Linux-спільнотою зареєстровані GUID для основного розділу з даними (наприклад ext4 – 0FC63DAF-8483-4772-8E79-3D69D8477DE4), для розділу підкачки (0657FD6D-A4AB-43C4-84E5-0933C84B4F4F), для програмного RAID (A19D880F-05FC-4D3B-A006-743F0F84911E), LVM (E6D6D379-F507-44C2-A23C-238F2A3DF928) тощо. Apple для своїх Mac-комп’ютерів використовує низку власних GUID: наприклад, розділ з файловою системою HFS+ позначається GUID 48465300-0000-11AA-AA11-00306543ECAC (ASCII “HFS”), контейнер нової файлової системи APFS – GUID 7C3457EF-0000-11AA-AA11-00306543ECAC, розділ Recovery (Apple Boot) – 426F6F74-0000-11AA-AA11-00306543ECAC (ASCII “Boot”), тощо. Подібним чином, FreeBSD визначає окремі GUID для своїх розділів (UFS, ZFS, swap тощо), Solaris має власні GUID (наприклад, розділ кореня Solaris – 6A85CF4D-1DD2-11B2-99A6-080020736631) і т.д. Таким чином, GPT надає гнучкий і однозначний механізм ідентифікації типів розділів.
Нижче наведено узагальнені таблиці з найбільш поширеними кодами MBR та GUID GPT для різних типів розділів.
Поширені коди типів розділів (MBR) +Код MBRТип розділу (MBR)Хто зарезервував ідентифікаторПримітки / Використання0x00Не використано (Empty)IBMПорожній запис таблиці (відсутній розділ)0x01FAT12IBMDOS 2.0+, дискети, невеликі розділи0x04FAT16 < 32 МБMicrosoftDOS 3.0+ (малі томи FAT16)0x05Розширений розділ (Extended DOS CHS)IBMDOS 3.3+ розширений розділ (ланцюжок EBR)0x06FAT16 > 32 МБCompaqDOS 4.0+, Windows 9x (великі томи FAT16, до ~2 ГБ)0x07HPFS/NTFS/exFATMicrosoft, IBM, Quantum Software SystemsOS/2, Windows NT/2000/XP+ основний розділ (NTFS); також використовується для exFAT, HPFS, і до 1988 року для QNX0x0BFAT32 (CHS)MicrosoftWindows 95 OSR2, Windows 98 (Primary FAT32)0x0CFAT32 (LBA)MicrosoftWindows 98, ME, 2000+ (LBA-адресація для FAT32)0x0EFAT16 (LBA)MicrosoftWindows 95 OSR2+ (LBA для великого FAT16)0x0FРозширений розділ (LBA)MicrosoftРозширений розділ з LBA-адресацією (DOS/Windows)0x11Hidden FAT12 (прихований)IBMПрихований розділ FAT12 (утиліти, OEM) – не монтується Windows0x12Diagnostics (Комpaq)KompaqСервісний розділ діагностики (OEM)0x17Hidden NTFS (прихований)IBM, MicrosoftПрихований розділ NTFS (OEM recovery, сховано від ОС)0x1BHidden FAT32 (прихований)IBMПрихований розділ FAT32 (OEM)0x27Windows Recovery (WinRE)Microsoft, AcerРозділ відновлення Windows (Vista/7/8/10), прихований0x42Microsoft LDM (Dynamic Disk)MicrosoftДинамічний диск Windows (метадані LDM)0x82Linux Swap / Solaris x86LinuxРозділ підкачки Linux; в старих версіях Solaris x86 також використовувався цей код0x83Linux native (Linux filesystem)LinuxРозділ з файловою системою Linux (ext2/3/4, xfs, btrfs тощо)0x85Linux ExtendedLinuxРозширений розділ Linux (альтернативний код до 0x05/0x0F)0x8ELinux LVMLinuxРозділ фізичного тома LVM (Linux Logical Volume Manager)0xA0IBM ThinkPad hibernationIBMРозділ гібернації (службовий для IBM/Lenovo)0xA5FreeBSDFreeBSDРозділ ОС FreeBSD (UFS)0xA6OpenBSDOpenBSDРозділ ОС OpenBSD0xA8Apple Darwin UFSAppleРозділ Mac OS X (Unix File System) – не HFS+0xABApple Boot (Bootstrap)AppleЗавантажувальний розділ Apple (Boot Camp/інсталятор)0xAFApple HFS+AppleРозділ Mac OS X HFS+ (Mac OS Extended) – основний том macOS0xBESolaris x86 (старий)Sun MicrosystemsРозділ Solaris (версії до Solaris 8)0xBFSolarisSun MicrosystemsРозділ Solaris/illumos x86 (Solaris 8+, ZFS кореневий тощо)0xEEGPT Protective MBRMicrosoftЗахисний запис MBR для GPT-диска (покриває весь диск)0xEFEFI System Partition (MBR)IntelРозділ системи EFI на MBR-диску (FAT32, для UEFI) Примітка: Деякі значення кодів MBR позначені як “приховані” (hidden) – вони використовувалися для приховування розділів від ОС DOS/Windows. Наприклад, код 0x17 – це той самий тип, що і 0x07 (NTFS), але позначений як прихований (Windows не призначає йому букву диска). Аналогічно 0x1x – приховані варіанти FAT. Це застосовувалося OEM-виробниками для службових розділів або утиліт.
Поширені GUID типів розділів (GPT)