Вы когда-нибудь сталкивались с непонятным GUID раздела на GPT-диске? Представьте: проверяете тип раздела через hex-редактор, сравниваете с таблицами из интернета, а ваш GUID просто… не существует. Давайте разберёмся, почему так происходит и как с этим работать.
Почему GUID из GPT не совпадает с таблицами?
Первое, что нужно понять: GUID в GPT хранится в смешанном формате endianness (порядок байтов). Это значит, что байты в шестнадцатеричном представлении на диске не соответствуют текстовой записи GUID. Исторически так сложилось из-за Microsoft: первые три поля GUID (например, 0fc63daf-8483-4772) хранятся в обратном порядке.
Возьмём пример:
af3dc60f838472478e793d69d8477de4
Если прочитать эти байты как есть, GUID будет казаться бессмысленным. Но при конвертации с учётом endianness он превращается в 0fc63daf-8483-4772-8e79-3d69d8477de4 – это стандартный тип для Linux-разделов (ext4). Вот как это работает в Python:
import uuid
bytes = bytes.fromhex("af3dc60f838472478e793d69d8477de4")
guid = uuid.UUID(bytes_le=bytes)
print(guid) # Вывод: 0fc63daf-8483-4772-8e79-3d69d8477de4
Кстати, bytes_le здесь указывает на little-endian порядок для первых полей. Если бы мы использовали bytes, GUID остался бы «перевёрнутым».
Кто решает, какой GUID использовать?
Типы GUID делятся на две категории:
- Стандартные: Определены UEFI (например, ESP-раздел для загрузчика).
- Пользовательские: Создаются разработчиками ОС или софта. Например, Microsoft резервирует GUID для своих разделов, а Linux-сообщество – для ext4, LVM и т.д.
Важный нюанс: официального реестра GUID не существует. Каждый вендор генерирует их через алгоритм UUID (например, uuidgen в Linux), чтобы избежать конфликтов. Поэтому, если ваш GUID не найден в списках, это не ошибка – возможно, его просто ещё не добавили в публичные таблицы.
Вот примеры популярных GUID:
Тип раздела | GUID |
EFI System Partition | c12a7328-f81f-11d2-ba4b-00a0c93ec93b |
Linux filesystem (ext4) | 0fc63daf-8483-4772-8e79-3d69d8477de4 |
Microsoft Basic Data | ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 |
Как проверить GUID и исправить ошибки
Допустим, вы видите в GPT странный GUID, который не распознаётся. Вот пошаговый алгоритм:
1. Извлеките байты GUID. Используйте gdisk или sgdisk:
sudo sgdisk -i 1 /dev/sda # Показать информацию о 1-м разделе
В разделе «Partition GUID code» вы увидите текстовый GUID (уже сконвертированный).
2. Сравните с таблицами. Проверьте:
- Список на Wikipedia.
- Исходники fdisk (файл libfdisk/src/gpt_types.c).
3. Если GUID неизвестен:
- Попробуйте конвертировать байты вручную через Python-скрипт, как выше.
- Проверьте, не использовал ли разработчик вашего дистрибутива кастомный GUID (напр., для ZFS или LUKS).
Ошибка, с которой можно столкнуться: неправильный порядок байтов при ручном извлечении. Например, если вы скопировали байты из hex-редактора без учёта endianness, GUID покажется неверным. Всегда используйте инструменты вроде gdisk – они автоматически применяют коррекцию.
Совет: Если раздел не распознаётся ОС (например, Windows игнорирует Linux-разделы), проверьте не только GUID, но и флаги в GPT. Иногда проблема в них, а не в типе.
И напоследок: даже если ваш GUID нигде не упомянут, это не критично – главное, чтобы ОС корректно работала с разделом. Но если хочется порядка, можно вручную задать стандартный GUID через sgdisk -t 1:0FC63DAF-… (только осторожно, это меняет метаданные диска!).