Fdisk, parted, gdisk и cfdisk
fdisk, parted, gdisk и cfdisk — инструменты Linux для просмотра и изменения таблиц разделов диска.
Эти программы изменяют разметку, но обычно не создают файловую систему. После создания раздела файловую систему формируют отдельно через mkfs, а swap — через mkswap.
Руководство ориентировано на Linux. Большинство операций изменения разметки требуют прав root.
[!CAUTION] Ошибка в имени устройства может сделать данные недоступными. Перед командами записи проверьте диск через
lsblk, размонтируйте его разделы и сохраните резервную копию таблицы разделов.
Содержание
- Основные различия
- GPT и MBR
- Имена устройств
- Безопасная подготовка
- Резервная копия
- Просмотр разметки
- Fdisk
- Parted
- Gdisk
- Cfdisk
- Создание файловой системы
- Изменение размеров
- Применение новой таблицы
- Работа с образом диска
- Устранение неполадок
- Шпаргалка
Основные различия
| Инструмент | Интерфейс | 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/sdbParted
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 freeGdisk
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:
- сохраните точный начальный сектор;
- размонтируйте файловую систему;
- при уменьшении сначала уменьшите файловую систему;
- удалите запись;
- создайте её снова с тем же начальным сектором;
- задайте новый конечный сектор;
- проверьте таблицу и только затем выполните
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/sdb2LUKS:
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup open /dev/sdb1 secure_dataLVM PV:
sudo pvcreate /dev/sdb1[!CAUTION]
mkfs,mkswap,cryptsetup luksFormatиpvcreateзаписывают новые сигнатуры. Используйте их только для правильного нового или намеренно очищаемого раздела.
Изменение размеров
граница раздела ≠ размер файловой системыПри расширении обычно делают так:
- создать резервную копию;
- расширить раздел вправо, не меняя начало;
- перечитать таблицу;
- расширить внутренние уровни — LUKS, LVM или RAID, если они есть;
- расширить файловую систему.
Пример для раздела 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/dataESP и 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/sdbgdisk может предложить переместить резервный заголовок. Автоматическая команда:
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) и не меняйте начальный сектор раздела без точного плана.