Fdisk, parted, gdisk и cfdisk

fdisk, parted, gdisk и cfdisk — инструменты Linux для просмотра и изменения таблиц разделов диска. Эти программы изменяют разметку, но обычно не создают файловую систему. После создания раздела файловую систему формируют отдельно через mkfs, а swap — через mkswap.

Руководство ориентировано на Linux. Большинство операций изменения разметки требуют прав root.

[!CAUTION] Ошибка в имени устройства может сделать данные недоступными. Перед командами записи проверьте диск через lsblk, размонтируйте его разделы и сохраните резервную копию таблицы разделов.

Содержание

Основные различия

Инструмент Интерфейс GPT MBR/DOS Типичное применение
fdisk Текстовый интерактивный Да Да Универсальная ручная разметка
parted Командный и интерактивный Да Да Скрипты, размеры в MiB/GiB, изменение границ
gdisk Текстовый интерактивный Да Ограниченно Точная работа, диагностика и восстановление GPT
cfdisk Полноэкранный TUI Да Да Наглядное ручное редактирование
fdisk  → универсальный редактор GPT и MBR
parted → удобные единицы, скрипты и resizepart
gdisk  → специализированный инструмент для GPT
cfdisk → полноэкранный интерфейс для ручной разметки

Редактор таблиц разделов не является средством резервного копирования. Перед изменениями сохраните как таблицу, так и важные файлы.

GPT и MBR

Свойство GPT MBR/DOS
Современные компьютеры Предпочтительный вариант В основном совместимость со старым ПО
Большие диски Поддерживает современные диски Ограничение около 2 TiB при секторе 512 байт
Разделы Обычно до 128 без primary/extended До 4 основных либо 3 основных и extended
Резервные метаданные Есть копия заголовка в конце диска Встроенной копии нет
UEFI Стандартный вариант с ESP Зависит от прошивки

Для нового диска обычно выбирают GPT:

sudo parted --script /dev/sdb mklabel gpt

Эта команда уничтожает сведения о прежней таблице разделов. Не выполняйте её на диске с нужными данными.

Имена устройств

/dev/sda          SATA, SAS, USB или виртуальный диск
/dev/sdb          второй диск
/dev/nvme0n1      NVMe-диск
/dev/mmcblk0      eMMC или карта памяти
/dev/vda          VirtIO-диск
/dev/loop0        loop-устройство для образа

Разделы обычно называются так:

/dev/sda1         первый раздел SATA-диска
/dev/nvme0n1p1    первый раздел NVMe
/dev/mmcblk0p2    второй раздел eMMC

Редактор запускают для всего диска:

sudo fdisk /dev/sdb

а не для раздела:

sudo fdisk /dev/sdb1

Безопасная подготовка

Найти нужный диск

lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,LABEL,UUID,PARTTYPENAME,MOUNTPOINTS,MODEL
sudo fdisk -l
sudo blkid

Проверить пользователей раздела:

findmnt --source /dev/sdb1
sudo fuser -vm /dev/sdb1

Перед разрушительной операцией сверяйте не только имя, но и размер, модель и точки монтирования.

Размонтировать разделы

sudo umount /dev/sdb1
sudo umount /dev/sdb2
sudo swapoff /dev/sdb2

Проверить:

lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS /dev/sdb
swapon --show

Системный диск с /, /boot или активным swap лучше изменять из Live-системы.

Проверить сигнатуры без удаления:

sudo wipefs -n /dev/sdb

Параметр -n только показывает найденные сигнатуры.

Резервная копия

Таблица через sfdisk

sudo sfdisk --dump /dev/sdb > sdb-partitions.sfdisk

Восстановление выполняйте только после проверки диска:

sudo sfdisk /dev/sdb < sdb-partitions.sfdisk

Резервная копия GPT

Пакет gdisk также предоставляет sgdisk:

sudo sgdisk --backup=sdb-gpt.bin /dev/sdb
sudo sgdisk --load-backup=sdb-gpt.bin /dev/sdb

Сохранить диагностические сведения:

sudo fdisk -l /dev/sdb > sdb-fdisk.txt
sudo parted /dev/sdb unit s print free > sdb-parted.txt
lsblk -f > lsblk.txt

Резервная копия таблицы сохраняет разметку, но не содержимое файловых систем.

Просмотр текущей разметки

Fdisk

sudo fdisk -l /dev/sdb
sudo fdisk -l -u sectors /dev/sdb

Parted

sudo parted /dev/sdb print
sudo parted /dev/sdb print free
sudo parted /dev/sdb unit MiB print free
sudo parted /dev/sdb unit s print free

Gdisk

sudo gdisk -l /dev/sdb

Или интерактивно:

sudo gdisk /dev/sdb

затем команда p, а для выхода — q.

Cfdisk

sudo cfdisk /dev/sdb

Текущая таблица отображается в полноэкранном интерфейсе. Для выхода без записи выберите Quit.

Fdisk

fdisk входит в пакет util-linux и работает с GPT и MBR.

sudo fdisk /dev/sdb

Основные команды внутри:

Команда Назначение
m Справка
p Показать таблицу
g Создать новую GPT
o Создать новую MBR/DOS
n Создать раздел
d Удалить раздел
t Изменить тип
l Список типов
v Проверить таблицу
i Сведения о разделе
w Записать и выйти
q Выйти без записи

До w изменения обычно находятся только в памяти программы. Это позволяет выполнить p и v, а при ошибке выйти через q.

Создать GPT и раздел на весь диск

g       создать новую GPT
n       создать раздел
1       номер раздела
Enter   принять первый сектор
Enter   занять всё доступное место
p       проверить таблицу
v       проверить корректность
w       записать изменения

Создать раздел заданного размера

n
1
Enter
+512M

Для раздела на 20 GiB укажите +20G. Для следующего раздела на оставшемся месте примите предложенный конечный сектор клавишей Enter.

Создать MBR

o       новая DOS/MBR
n       новый раздел
p       primary
1       номер
Enter   первый сектор
Enter   последний сектор
w       записать

Удалить раздел

d
2
p
w

Удаление записи не обязательно стирает данные немедленно, но делает раздел недоступным обычным способом. Если раздел удалён случайно, не выполняйте mkfs и не записывайте новые данные.

Изменить тип

t
1
l       посмотреть список

Ориентируйтесь на название типа в списке. Изменение типа не форматирует раздел: Linux swap не заменяет mkswap, а Linux filesystem не создаёт ext4.

Изменить границу

При ручном пересоздании записи в fdisk:

  1. сохраните точный начальный сектор;
  2. размонтируйте файловую систему;
  3. при уменьшении сначала уменьшите файловую систему;
  4. удалите запись;
  5. создайте её снова с тем же начальным сектором;
  6. задайте новый конечный сектор;
  7. проверьте таблицу и только затем выполните w.

Изменение начального сектора может сделать содержимое недоступным.

Parted

parted удобен для MiB/GiB, процентов, точных секторов и автоматизации.

sudo parted /dev/sdb

Команды:

Команда Назначение
help Справка
print Показать таблицу
print free Показать свободное место
unit MiB Выбрать MiB
unit s Выбрать сектора
mklabel gpt Создать GPT
mklabel msdos Создать MBR
mkpart Создать раздел
name N NAME Назвать GPT-раздел
set N FLAG on/off Изменить флаг
resizepart N END Изменить конечную границу
rm N Удалить раздел
align-check optimal N Проверить выравнивание
quit Выйти

В отличие от fdisk, parted обычно применяет команду сразу. Не рассчитывайте, что quit отменит уже выполненные операции.

Создать GPT и ext4-раздел

sudo parted --script /dev/sdb \
  mklabel gpt \
  mkpart data ext4 1MiB 100%

ext4 здесь только описание назначения. Файловую систему создают отдельно:

sudo partprobe /dev/sdb
sudo mkfs.ext4 -L data /dev/sdb1

Создать несколько разделов

sudo parted --script /dev/sdb \
  mklabel gpt \
  mkpart ESP fat32 1MiB 513MiB \
  set 1 esp on \
  mkpart swap linux-swap 513MiB 8705MiB \
  mkpart root ext4 8705MiB 100%

После перечитывания таблицы:

sudo mkfs.fat -F 32 -n EFI /dev/sdb1
sudo mkswap /dev/sdb2
sudo mkfs.ext4 -L rootfs /dev/sdb3

Флаги

sudo parted /dev/sdb set 1 esp on
sudo parted /dev/sdb set 1 esp off
sudo parted /dev/sdb align-check optimal 1

Частые флаги: esp, boot, bios_grub, lvm, raid, swap, msftdata. Флаг меняет метаданные, но не создаёт соответствующий объект.

Изменить конечную границу

sudo parted /dev/sdb resizepart 2 100GiB
sudo parted /dev/sdb resizepart 2 100%

resizepart меняет только границу раздела. Он не расширяет файловую систему, LUKS, LVM или RAID.

Gdisk

gdisk — GPT fdisk, специализированный инструмент для GPT.

sudo gdisk /dev/sdb

Основные команды:

Команда Назначение
? Справка
p Показать таблицу
n Создать раздел
d Удалить раздел
t Изменить код типа
i Подробные сведения
l Коды типов
v Проверить GPT
b Сохранить GPT в файл
r Меню восстановления
x Экспертное меню
w Записать и выйти
q Выйти без записи

Создать раздел GPT

n
1
Enter
Enter
8300
p
v
w

Распространённые коды:

Код Назначение
EF00 EFI System Partition
EF02 BIOS boot partition
8200 Linux swap
8300 Linux filesystem
8309 Linux LUKS
8E00 Linux LVM
FD00 Linux RAID
0700 Microsoft basic data

Код типа не создаёт файловую систему, шифрование, LVM или RAID.

Проверка и восстановление GPT

Проверка выполняется командой v. Перед действиями восстановления сохраните метаданные:

sudo sgdisk --backup=before-repair.bin /dev/sdb
sudo gdisk -l /dev/sdb > before-repair.txt

Меню восстановления открывается через r. Не выбирайте команды исправления наугад: сначала определите, какой из заголовков GPT является корректным.

Cfdisk

cfdisk — полноэкранный редактор из util-linux.

sudo cfdisk /dev/sdb

Типичные действия:

Пункт Назначение
New Создать раздел
Delete Удалить запись
Resize Изменить размер, если поддерживается
Type Выбрать тип
Name Назвать GPT-раздел
Bootable Изменить загрузочный флаг
Write Записать таблицу
Quit Выйти

Для нового диска выберите gpt, выделите Free space, выберите New, укажите размер, при необходимости назначьте Type, затем проверьте итоговую таблицу и только после этого выберите Write.

cfdisk удобен для ручной работы, но для воспроизводимых скриптов лучше использовать parted --script, sfdisk или sgdisk.

Создание файловой системы

После создания раздела проверьте его имя:

lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE /dev/sdb

Примеры:

sudo mkfs.ext4 -L data /dev/sdb1
sudo mkfs.xfs -L data /dev/sdb1
sudo mkfs.fat -F 32 -n EFI /dev/sdb1
sudo mkswap -L swap /dev/sdb2
sudo swapon /dev/sdb2

LUKS:

sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup open /dev/sdb1 secure_data

LVM PV:

sudo pvcreate /dev/sdb1

[!CAUTION] mkfs, mkswap, cryptsetup luksFormat и pvcreate записывают новые сигнатуры. Используйте их только для правильного нового или намеренно очищаемого раздела.

Изменение размеров

граница раздела ≠ размер файловой системы

При расширении обычно делают так:

  1. создать резервную копию;
  2. расширить раздел вправо, не меняя начало;
  3. перечитать таблицу;
  4. расширить внутренние уровни — LUKS, LVM или RAID, если они есть;
  5. расширить файловую систему.

Пример для раздела 2 и ext4:

sudo parted /dev/sdb resizepart 2 100%
sudo partprobe /dev/sdb
sudo resize2fs /dev/sdb2

Для XFS:

sudo xfs_growfs /mountpoint

Для LVM PV:

sudo pvresize /dev/sdb2

При уменьшении порядок обратный: сначала файловая система, затем внутренние контейнеры, затем раздел. Для ext4 пример начинается так:

sudo umount /dev/sdb2
sudo e2fsck -f /dev/sdb2
sudo resize2fs /dev/sdb2 80G

Только после успешного уменьшения файловой системы меняйте конечную границу раздела. XFS штатно не уменьшается; обычно создают меньшую файловую систему и копируют данные.

Нельзя безопасно делать так:

sudo parted /dev/sdb resizepart 2 80GiB

если файловая система внутри всё ещё больше 80 GiB.

Применение новой таблицы

После записи таблицы попросите ядро перечитать её:

sudo partprobe /dev/sdb
sudo partx -u /dev/sdb
lsblk /dev/sdb

Если диск занят, ядро может продолжить использовать старую таблицу. Размонтируйте разделы, отключите swap, закройте LUKS/LVM/RAID и повторите операцию. Иногда нужна перезагрузка.

Практические сценарии

Новый диск: GPT и ext4

lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL
sudo wipefs -n /dev/sdb
sudo parted --script /dev/sdb \
  mklabel gpt \
  mkpart data ext4 1MiB 100%
sudo partprobe /dev/sdb
sudo mkfs.ext4 -L data /dev/sdb1
sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data

ESP и Linux-раздел

sudo parted --script /dev/sdb \
  mklabel gpt \
  mkpart ESP fat32 1MiB 513MiB \
  set 1 esp on \
  mkpart root ext4 513MiB 100%
sudo partprobe /dev/sdb
sudo mkfs.fat -F 32 -n EFI /dev/sdb1
sudo mkfs.ext4 -L rootfs /dev/sdb2

Создание разделов само по себе не устанавливает загрузчик.

LVM-раздел

sudo parted --script /dev/sdb \
  mklabel gpt \
  mkpart lvm 1MiB 100% \
  set 1 lvm on
sudo partprobe /dev/sdb
sudo pvcreate /dev/sdb1
sudo vgcreate vgdata /dev/sdb1
sudo lvcreate -L 100G -n files vgdata
sudo mkfs.ext4 /dev/vgdata/files

Учебный образ диска

truncate -s 2G disk.img
LOOP=$(sudo losetup --find --show --partscan disk.img)
sudo parted --script "$LOOP" mklabel gpt mkpart data ext4 1MiB 100%
sudo partprobe "$LOOP"
lsblk "$LOOP"
sudo mkfs.ext4 "${LOOP}p1"
sudo losetup -d "$LOOP"
rm disk.img

Имена разделов loop-устройства зависят от системы; сверяйте их через lsblk.

Удаление сигнатур и таблиц

Показать сигнатуры:

sudo wipefs -n /dev/sdb

Удалить известные сигнатуры:

sudo wipefs -a /dev/sdb

Удалить GPT и MBR-метаданные:

sudo sgdisk --zap-all /dev/sdb

Создать пустую таблицу:

sudo parted --script /dev/sdb mklabel gpt
sudo parted --script /dev/sdb mklabel msdos

Эти операции разрушительны и не являются безопасным стиранием всего содержимого диска.

Устранение неполадок

Device or resource busy

Проверить использование:

lsblk -o NAME,TYPE,FSTYPE,MOUNTPOINTS /dev/sdb
findmnt
swapon --show
sudo fuser -vm /dev/sdb1

Размонтируйте разделы и отключите swap. Для LUKS, LVM и RAID сначала проверьте зависимости.

Ядро использует старую таблицу

sudo partprobe /dev/sdb
sudo partx -u /dev/sdb
udevadm settle
lsblk /dev/sdb

Если устройство занято, может потребоваться перезагрузка.

unrecognised disk label

Проверьте формат без записи:

sudo fdisk -l /dev/sdb
sudo parted /dev/sdb unit s print
sudo gdisk -l /dev/sdb
sudo wipefs -n /dev/sdb

Если данные нужны, не создавайте новую таблицу до создания образа или попытки восстановления.

Резервная GPT не в конце диска

После клонирования на диск большего размера проверьте:

sudo sgdisk --backup=before-fix.bin /dev/sdb
sudo gdisk /dev/sdb

gdisk может предложить переместить резервный заголовок. Автоматическая команда:

sudo sgdisk --move-second-header /dev/sdb

Используйте её только после проверки правильного устройства.

Неправильное выравнивание

sudo parted /dev/sdb align-check optimal 1
sudo parted /dev/sdb unit s print

Для новой разметки обычно начинают первый раздел с 1MiB и принимают предложенные fdisk границы. Исправление существующего раздела может потребовать переноса данных.

Файловая система меньше раздела

Редактор увеличил только границу раздела:

sudo resize2fs /dev/sdb1
sudo xfs_growfs /точка/монтирования

Выбирайте команду по фактическому типу из lsblk -f.

Случайно удалён раздел

Если таблица ещё не записана, в fdisk или gdisk используйте q. Если запись уже выполнена, прекратите запись на диск, не запускайте mkfs, сохраните образ на другой носитель и работайте с копией. Повторное создание записи с прежним начальным сектором иногда возвращает доступ, но ошибка в границах может ухудшить ситуацию.

Диск больше 2 TiB ограничен примерно 2 TiB

Вероятно, используется MBR. Проверить:

sudo parted /dev/sdb print

Для пустого диска можно создать GPT:

sudo parted --script /dev/sdb mklabel gpt

Нельзя создать пятый основной раздел

MBR допускает максимум четыре основные записи. Один раздел можно сделать extended и создать logical-разделы внутри, но для нового диска обычно проще GPT.

Шпаргалка

Просмотр

Действие Команда
Устройства и точки монтирования lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL
Таблица fdisk sudo fdisk -l /dev/sdb
Свободное место sudo parted /dev/sdb print free
Точные сектора sudo parted /dev/sdb unit s print free
GPT sudo gdisk -l /dev/sdb
Сигнатуры без удаления sudo wipefs -n /dev/sdb

Команды редакторов

Действие Команда
Fdisk sudo fdisk /dev/sdb
Новая GPT в fdisk g
Создать раздел в fdisk n
Проверить fdisk v
Записать fdisk w
Выйти без записи q
Parted, один ext4-раздел sudo parted -s /dev/sdb mklabel gpt mkpart data ext4 1MiB 100%
Расширить границу sudo parted /dev/sdb resizepart 1 100%
Gdisk sudo gdisk /dev/sdb
Проверить GPT в gdisk v
Cfdisk sudo cfdisk /dev/sdb
Записать cfdisk Write

После разметки

Действие Команда
Перечитать таблицу sudo partprobe /dev/sdb
Ext4 sudo mkfs.ext4 -L data /dev/sdb1
XFS sudo mkfs.xfs -L data /dev/sdb1
FAT32/ESP sudo mkfs.fat -F 32 /dev/sdb1
Swap sudo mkswap /dev/sdb2
Проверить результат lsblk -f /dev/sdb
Резервная копия GPT sudo sgdisk --backup=gpt.bin /dev/sdb

Минимум для запоминания

lsblk -f                         определить диски и файловые системы
sudo fdisk -l /dev/sdb           показать таблицу
sudo fdisk /dev/sdb              изменить GPT или MBR
sudo parted /dev/sdb print free  показать свободное место
sudo gdisk /dev/sdb              работать с GPT
sudo cfdisk /dev/sdb             открыть TUI
sudo partprobe /dev/sdb          перечитать таблицу

Главное правило: сначала резервная копия и проверка устройства, затем изменение таблицы, затем создание или изменение файловой системы. Не путайте весь диск (/dev/sdb) с разделом (/dev/sdb1) и не меняйте начальный сектор раздела без точного плана.