Что такое GPT и зачем он нужен
GPT (GUID Partition Table) — это современный стандарт разметки дисков, пришедший на смену устаревшей MBR (Master Boot Record). Он является частью спецификаций UEFI и устраняет ключевые ограничения предшественника. Если MBR поддерживает максимум четыре основных раздела и диски объёмом до 2 ТБ, то GPT позволяет создавать до 128 разделов и работать с накопителями практически любого размера — до 9,4 зеттабайт (в теории).
Помимо количества разделов и объёма, GPT предлагает и другие преимущества. Таблица разделов хранится в нескольких копиях (основной и резервной), что повышает устойчивость к повреждениям. Каждый раздел получает уникальный GUID, что упрощает идентификацию и управление. Также GPT включает циклическую проверку избыточности (CRC) для заголовков, позволяющую обнаруживать ошибки.
В современных системах с UEFI использование GPT является обязательным для загрузки операционной системы. Даже если вы используете BIOS (Legacy), GPT может быть полезен для дисков большого объёма или при необходимости создать более четырёх разделов. Однако для загрузки с GPT в режиме BIOS потребуется специальный загрузочный раздел BIOS boot.
Понимание структуры GPT важно для безопасной работы: основная таблица разделов находится в начале диска, а резервная — в конце. При изменении размера диска (например, в виртуальной машине) необходимо переместить резервный заголовок, иначе новое пространство не будет доступно.
Обзор инструментов: gdisk, sgdisk, cgdisk и fdisk
Для работы с GPT в Linux существует несколько утилит, входящих в пакет GPT fdisk, созданный Родом Смитом. Основные из них:
- gdisk — интерактивная текстовая утилита с пошаговыми подсказками. Идеальна для ручного создания и редактирования таблицы разделов. Изменения применяются только после явной команды записи, что снижает риск ошибок.
- sgdisk — неинтерактивная версия для командной строки и сценариев. Позволяет выполнять операции одной командой, что удобно для автоматизации, но требует осторожности, так как изменения применяются немедленно.
- cgdisk — интерфейс на основе curses (псевдографический), предоставляющий более наглядное меню. Подходит для пользователей, предпочитающих текстовый интерфейс с клавиатурной навигацией.
- fixparts — утилита для исправления и преобразования MBR-разметки, но в контексте GPT используется реже.
Кроме того, в современных дистрибутивах утилита fdisk (из пакета util-linux) также умеет работать с GPT. Начиная с определённых версий, fdisk поддерживает создание GPT-таблиц, что может быть удобно, если gdisk не установлен. Однако функциональность fdisk по работе с GPT несколько ограничена по сравнению с gdisk, особенно в части типов разделов и восстановления.
Выбор инструмента зависит от задачи: для разовой ручной разметки удобен gdisk, для скриптов — sgdisk, для новичков — cgdisk. Все они используют одинаковую логику и поддерживают одни и те же типы разделов.
Установка gdisk и подготовка к работе
Перед началом работы необходимо установить пакет gdisk. В большинстве дистрибутивов он доступен в официальных репозиториях. Команды установки различаются в зависимости от менеджера пакетов:
- В Debian/Ubuntu и производных:
sudo apt install gdisk - В Fedora/RHEL/CentOS:
sudo dnf install gdisk - В Arch Linux:
sudo pacman -S gdisk - В openSUSE:
sudo zypper install gdisk
После установки проверьте доступные диски в системе. Используйте команду sudo fdisk -l или lsblk, чтобы определить имя целевого устройства (например, /dev/sda, /dev/nvme0n1, /dev/mmcblk0). Будьте предельно внимательны: выбор неправильного диска приведёт к потере данных.
Перед созданием новой GPT-таблицы обязательно сделайте резервную копию важных данных. Если диск уже содержит разделы, создание новой таблицы полностью уничтожит их. Рекомендуется также проверить, поддерживает ли система GPT: если в выводе fdisk -l для диска указано «GPT», значит, поддержка есть.
Для работы с диском потребуются права суперпользователя, поэтому все команды выполняются с sudo. Убедитесь, что диск не смонтирован и не используется системой, иначе операции могут завершиться ошибкой.
Создание GPT-таблицы с помощью gdisk: пошаговая инструкция
Процесс создания GPT-таблицы в gdisk состоит из нескольких шагов. Рассмотрим его на примере диска /dev/sdc.
- Запустите gdisk с указанием устройства:
sudo gdisk /dev/sdcЕсли диск не содержит таблицы разделов, программа сообщит об этом и предложит создать новую.
- Введите команду
o, чтобы создать новую пустую GPT-таблицу. Появится предупреждение о том, что все существующие разделы будут удалены. Подтвердите действие, введяY.
- Теперь создайте разделы. Введите команду
n. Программа последовательно запросит:
- Номер раздела (от 1 до 128). Обычно используется значение по умолчанию (следующий свободный номер).
- Первый сектор. Можно указать номер сектора или размер с суффиксом (например,
+1Mдля отступа). По умолчанию предлагается сектор 2048, что обеспечивает выравнивание по 1 МиБ. - Последний сектор. Здесь удобно указывать размер в явном виде, например
+500M,+2G, или использовать значение по умолчанию (до конца свободного пространства). - Тип раздела. Введите шестнадцатеричный код или GUID. По умолчанию используется
8300(Linux filesystem). Для просмотра списка кодов введитеL.
- Повторите команду
nдля создания остальных разделов.
- После завершения разметки введите команду
w, чтобы записать изменения на диск. Программа запросит подтверждение — введитеY. После этого таблица разделов будет сохранена.
Важно: все операции в gdisk до команды w выполняются только в памяти, поэтому вы можете отменить изменения, введя q для выхода без сохранения.
Работа с разделами: изменение, удаление, изменение размера
Помимо создания разделов, gdisk позволяет выполнять другие операции. Рассмотрим основные.
Просмотр информации о разделе. Команда i показывает детальную информацию: GUID типа, уникальный GUID, первый и последний сектор, размер, атрибуты и имя. Это полезно перед изменением размера.
Удаление раздела. Команда d удаляет выбранный раздел. После удаления можно создать новый раздел на освободившемся месте.
Изменение размера раздела. В gdisk нет прямой команды для изменения размера. Вместо этого нужно удалить раздел и создать его заново с теми же параметрами, но другим конечным сектором. При этом важно сохранить начальный сектор и GUID раздела, чтобы не нарушить файловую систему. После изменения размера раздела необходимо также изменить размер файловой системы (например, с помощью resize2fs для ext4).
Сортировка разделов. Если нумерация разделов перестала соответствовать их физическому порядку (например, после удаления), можно отсортировать их командой s в sgdisk или через меню gdisk. Это может потребовать обновления /etc/fstab, если используются имена вида /dev/sda1.
Изменение имени раздела. Команда c позволяет задать понятное имя (PARTLABEL), что упрощает идентификацию.
Все изменения, как и при создании, применяются только после команды w.
Неинтерактивная работа с sgdisk: автоматизация и скрипты
sgdisk — это мощный инструмент для автоматизации разметки. Он выполняет операции непосредственно из командной строки, что удобно для сценариев установки или массового конфигурирования.
Основные команды sgdisk:
- Просмотр таблицы разделов:
sudo sgdisk -p /dev/sdc - Создание новой GPT-таблицы:
sudo sgdisk -o /dev/sdc(опция-oсоздаёт новую таблицу, стирая старую) - Создание раздела:
sudo sgdisk -n 1:0:+500M -t 1:8300 /dev/sdc— создаёт раздел номер 1 размером 500 МиБ с типом Linux filesystem. Можно указать начальный и конечный сектор, например-n 1:2048:+1G. - Удаление раздела:
sudo sgdisk -d 1 /dev/sdc - Изменение типа:
sudo sgdisk -t 1:ef00 /dev/sdc(например, для EFI System Partition) - Изменение имени:
sudo sgdisk -c 1:"Linux" /dev/sdc
Преимущество sgdisk в том, что можно объединять несколько операций в одной команде, например:
sudo sgdisk -o -n 1:0:+1M -t 1:ef02 -n 2:0:+512M -t 2:ef00 -n 3:0:0 -t 3:8300 /dev/sdcЭта команда создаст BIOS boot раздел, EFI System Partition и корневой раздел Linux.
Важно помнить, что sgdisk применяет изменения сразу, без дополнительного подтверждения. Поэтому перед выполнением команд убедитесь, что вы указали правильное устройство и не допустили опечаток.
Резервное копирование и восстановление таблицы разделов
Создание резервной копии таблицы разделов — важная профилактическая мера, особенно перед внесением изменений. С помощью sgdisk можно сохранить полную копию GPT, включая защитную MBR, основной и резервный заголовки, а также таблицу разделов.
Создание резервной копии:
sudo sgdisk -b=sgdisk-sda.bin /dev/sdaЭта команда сохранит бинарный файл, который можно использовать для восстановления.
Восстановление из резервной копии:
sudo sgdisk -l=sgdisk-sda.bin /dev/sdaКлонирование структуры разделов на другой диск:
sudo sgdisk -R=/dev/sdc /dev/sdaЕсли оба диска будут использоваться в одном компьютере, необходимо рандомизировать GUID диска и разделов, чтобы избежать конфликтов:
sudo sgdisk -G /dev/sdcРезервное копирование особенно полезно при экспериментах с разметкой или при переносе системы на новый накопитель. Однако помните, что резервная копия таблицы разделов не включает сами данные — она лишь сохраняет структуру.
Преобразование MBR в GPT и обратно
Иногда возникает необходимость перевести диск с MBR на GPT без потери данных. gdisk и sgdisk поддерживают такое преобразование.
Преобразование MBR в GPT с помощью sgdisk:
sudo sgdisk -g /dev/sdaПри этом все первичные и логические разделы MBR становятся разделами GPT с соответствующими GUID типов. Однако после преобразования потребуется переустановить загрузчик, чтобы система могла загружаться с GPT.
Преобразование GPT в MBR:
sudo sgdisk -m /dev/sdaВажно: преобразовать в MBR можно только диск с не более чем четырьмя разделами. Если разделов больше, операция будет невозможна.
Существуют ограничения: если последний раздел MBR простирается до самого конца диска, преобразование может не удаться, так как GPT требует резервную таблицу в конце. В этом случае необходимо сначала уменьшить размер последнего раздела.
Также стоит учитывать, что на ноутбуках с чипсетами Intel в режиме RAID могут возникать проблемы с повреждением резервной копии GPT. Рекомендуется использовать режим AHCI, если это возможно.
Восстановление повреждённой GPT и расширение диска
GPT хранит две копии таблицы — основную в начале диска и резервную в конце. Если одна из них повреждена, её можно восстановить из другой с помощью gdisk.
Восстановление заголовка GPT:
- Запустите
sudo gdisk /dev/sda. - Введите
rдля перехода в режим восстановления и преобразования (экспертный режим). - Выберите:
b— использовать резервный заголовок для восстановления основного;d— использовать основной заголовок для восстановления резервного.
- После восстановления введите
wдля записи изменений.
Расширение диска GPT: Если вы увеличили размер виртуального диска или RAID-массива, новое пространство не будет доступно, пока резервный заголовок GPT не будет перемещён в конец диска. Для этого выполните:
sudo sgdisk -e /dev/sdaПосле этого проверьте таблицу разделов командой sudo sgdisk -p /dev/sda — вы должны увидеть свободное место в конце.
Эти операции помогают восстановить работоспособность диска после сбоев или изменений аппаратной конфигурации.
Типы разделов GPT и их коды
Каждый раздел GPT имеет тип, определяемый GUID. В gdisk и sgdisk используются шестнадцатеричные коды для удобства. Наиболее распространённые типы:
- Linux filesystem — код
8300, GUID0FC63DAF-8483-4772-8E79-3D69D8477DE4. Используется для большинства разделов с данными. - EFI System Partition — код
ef00, GUIDC12A7328-F81F-11D2-BA4B-00A0C93EC93B. Необходим для загрузки в режиме UEFI. - BIOS boot partition — код
ef02, GUID21686148-6449-6E6F-744E-656564454649. Используется для загрузки в режиме BIOS с GPT. - Linux swap — код
8200, GUID0657FD6D-A4AB-43C4-84E5-0933C84B4F4F. - Linux LVM — код
8e00, GUIDE6D6D379-F507-44C2-A23C-238F2A3DF928. - Linux RAID — код
fd00, GUIDA19D880F-05FC-4D3B-A006-743F0F84911E. - Linux LUKS — код
8309, GUIDCA7D7CCB-63ED-4C53-861C-1742536059CC. - Linux dm-crypt — код
8308, GUID7FFEC5C9-2D00-49B7-8941-3EA10A5586B7.
Также существуют специализированные типы для корневых разделов разных архитектур (например, 8304 для x86-64 root), разделов /home, /srv, /var и других. Выбор правильного типа важен для автоматического монтирования systemd и совместимости с другими ОС.
Чтобы просмотреть полный список кодов в gdisk, введите L при запросе типа раздела. В sgdisk можно использовать -L для вывода списка.
Вопросы и ответы
Можно ли создать GPT-таблицу с помощью fdisk?
Да, современная версия fdisk (из пакета util-linux) поддерживает создание GPT-таблиц. Для этого нужно запустить sudo fdisk /dev/sdX, затем ввести g для создания новой GPT-таблицы. После этого можно создавать разделы командой n. Однако fdisk имеет меньше возможностей по работе с типами разделов и восстановлению, чем gdisk. Для сложных задач рекомендуется использовать gdisk или sgdisk.
Что делать, если после создания GPT-таблицы система не загружается?
Если вы используете UEFI, убедитесь, что создан EFI System Partition (ESP) с типом ef00 и на него установлен загрузчик (например, GRUB). Если используется BIOS (Legacy), необходим раздел BIOS boot (тип ef02). Также проверьте, что в BIOS/UEFI включён режим загрузки, соответствующий разметке (UEFI для GPT, Legacy для MBR). После создания разделов переустановите загрузчик, например, с помощью grub-install.
Как изменить размер GPT-раздела без потери данных?
В gdisk нет прямой команды изменения размера. Необходимо удалить раздел (команда d) и создать его заново с тем же начальным сектором и новым конечным сектором (команда n). Важно сохранить GUID раздела, чтобы не сломать файловую систему. После изменения размера раздела нужно изменить размер файловой системы, например, resize2fs /dev/sdX1 для ext4. Все операции выполняйте с осторожностью и после резервного копирования.
Сколько разделов можно создать на GPT-диске?
Стандартная спецификация GPT позволяет создавать до 128 разделов. Это ограничение связано с размером таблицы разделов, которая обычно занимает 33 сектора по 512 байт. В некоторых реализациях количество может быть увеличено, но 128 — это стандартное значение для большинства систем. Этого более чем достаточно для типичных сценариев использования.
Как узнать, GPT или MBR используется на диске?
Используйте команду sudo fdisk -l или sudo gdisk -l /dev/sdX. В выводе будет указано, какая таблица разделов присутствует: GPT или MBR. Также можно использовать lsblk -o NAME,PARTTYPE или parted /dev/sdX print. Если в выводе fdisk есть строка «Disklabel type: gpt», значит, диск размечен как GPT.
Можно ли преобразовать MBR в GPT без потери данных?
Да, это возможно с помощью gdisk или sgdisk. Например, команда sudo sgdisk -g /dev/sda преобразует MBR в GPT, сохраняя разделы. Однако после преобразования необходимо переустановить загрузчик и убедиться, что последний раздел не простирается до конца диска (иначе не хватит места для резервной GPT). Также учтите, что преобразование GPT в MBR возможно только при наличии не более четырёх разделов.