Изменение таблицы разделов — одна из самых опасных операций. Ошибка в одной цифре может стоить всех данных на диске, а «отмена» здесь не работает. Поэтому сначала — главное правило: перед любыми действиями с gdisk или parted сделайте резервную копию важных файлов на другой физический носитель и сохраните дамп таблицы разделов. Ниже — как пройти этот путь аккуратно и какие проверки выполнить до записи изменений.
Подготовка и идентификация диска
Сначала точно определите устройство. Имена /dev/sdb и /dev/nvme0n1 могут измениться после перезагрузки, поэтому ориентируйтесь на серийный номер и модель. Команда lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS показывает дерево устройств, а blkid — типы файловых систем и UUID. Убедитесь, что раздел не смонтирован: изменение таблицы на занятом разделе ядро может не применить или применить частично.
Проверьте, не лежат ли на диске LVM, RAID или шифрованный контейнер. В таких схемах сначала нужно остановить верхний слой, иначе parted увидит физический диск, а файловая система останется занятой. Для корневого раздела потребуется загрузка с live-носителя: менять разделы работающей системы — плохая идея.
lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS
sudo blkid /dev/sdb
findmnt /dev/sdb1
sudo lsof /dev/sdb
Резервная копия таблицы разделов
GPT хранит основную таблицу в начале диска и резервную копию в конце. sgdisk умеет сохранять обе структуры в бинарный файл, который потом можно загрузить обратно. Это не заменяет копию данных, но спасает от ошибки в разметке. Сохраните дамп на другой носитель и проверьте, что файл не нулевой. Дополнительно пригодится текстовый вывод sfdisk --dump: его удобно читать и хранить в документации.
sudo sgdisk --backup=/root/sdb-gpt.bak /dev/sdb
sudo sgdisk --verify /dev/sdb
sudo sfdisk --dump /dev/sdb > /root/sdb-sfdisk.txt
ls -l /root/sdb-gpt.bak /root/sdb-sfdisk.txt
Восстановление выполняется командой sgdisk --load-backup=/root/sdb-gpt.bak /dev/sdb. Но сначала убедитесь, что диск тот самый: загрузка чужой таблицы на другой носитель уничтожит его разметку. Держите резервную копию вне изменяемого диска — на флешке, сетевом ресурсе или другом разделе.
gdisk: работа с GPT
gdisk — интерактивный редактор GPT. После запуска команда p печатает текущую таблицу, n создаёт новый раздел, d удаляет, t меняет тип, c задаёт имя. Изменения накапливаются в памяти и применяются только по команде w. Это важное свойство: до записи можно несколько раз проверить раскладку через p и выйти через q, ничего не изменив. Команда o создаёт новую пустую таблицу — не нажимайте её на диске с данными.
sudo gdisk /dev/sdb
# в интерактивном режиме: p, n, t, c, p, w
sudo gdisk -l /dev/sdb
sudo sgdisk --print /dev/sdb
При создании раздела gdisk предложит первый и последний сектор. По умолчанию он выравнивает границы, и это правильно: не стоит вручную задавать секторы «на глаз». Для раздела данных подойдёт тип Linux filesystem, для EFI — EF00, для swap — 8200. Если диск был в MBR, gdisk может предложить конвертацию; делайте это только после резервной копии и понимания, что загрузчик настроен на GPT.
parted: просмотр и изменение разделов
parted удобен для сценариев и точных операций. Указывайте единицы явно, например unit MiB, иначе размеры будут в секторах. Команда print free показывает таблицу и свободные промежутки — по ним проще планировать изменения. Перед записью проверьте, что не задеваете соседние разделы и служебные области в начале и конце диска.
sudo parted /dev/sdb unit MiB print free
sudo parted /dev/sdb unit MiB mkpart data ext4 20480 40960
sudo parted /dev/sdb unit MiB resizepart 2 61440
sudo partprobe /dev/sdb
После изменения таблицы ядро должно перечитать её. partprobe просит ядро обновить сведения, а udevadm settle даёт время создать устройства. Если раздел был занят, перечитывание может не сработать — тогда поможет размонтирование или перезагрузка. Не создавайте файловую систему поверх существующей: mkfs уничтожит данные. Сначала проверьте blkid и lsblk -f.
Расширение файловой системы
Увеличение раздела — только половина дела. Файловая система внутри должна узнать о новом пространстве. Для ext4 растущий раздел можно расширить на смонтированной файловой системе командой resize2fs. Для XFS используется xfs_growfs по точке монтирования, и XFS умеет только расти. Btrfs расширяется командой btrfs filesystem resize max по точке монтирования. Сначала проверьте тип через lsblk -f, чтобы не применить неподходящую команду.
sudo resize2fs /dev/sdb1
sudo xfs_growfs /mnt/data
sudo btrfs filesystem resize max /mnt/data
df -h /mnt/data
Сжатие сложнее и опаснее. ext4 можно уменьшить только на размонтированном разделе: сначала e2fsck -f, затем resize2fs до меньшего размера и только потом parted resizepart. Порядок нельзя менять: если сначала сжать раздел, файловая система выйдет за его границы. XFS сжимать не умеет — надёжный путь здесь только создание новой файловой системы и перенос данных.
Риски и типичные ошибки
- Выбран не тот диск: перепутаны
/dev/sdbи/dev/sdc. - Раздел смонтирован, и ядро не применило новую таблицу.
- Границы заданы в секторах вместо MiB и задели соседний раздел.
- Файловая система не расширена после увеличения раздела.
- Раздел уменьшен до сжатия файловой системы.
- Резервная копия GPT осталась на том же диске.
- Изменение выполняется на работающей корневой системе без live-носителя.
Если таблица повреждена, не создавайте новые разделы и не форматируйте диск. Сначала попробуйте восстановить резервную копию GPT через sgdisk, затем проверьте результат через parted print. Для поиска потерянных разделов используйте testdisk, но работайте с копией диска, если данные действительно ценны.
Чек-лист перед записью
- Важные данные скопированы на другой носитель.
- Дамп GPT и вывод
sfdisk --dumpсохранены вне диска. - Устройство идентифицировано по модели и серийному номеру.
- Раздел размонтирован, верхние слои LVM/RAID остановлены.
- План разделов проверен по
print free. - Единицы измерения — MiB, границы выровнены.
- После записи выполнены
partprobeи проверкаlsblk. - Файловая система расширена отдельной командой.
Итог
gdisk и parted — точные инструменты, но они не прощают невнимательности. Сначала резервная копия данных и таблицы разделов, затем идентификация диска, размонтирование и только потом изменения. Помните, что расширение раздела и расширение файловой системы — разные шаги, а сжатие XFS невозможно. При малейших сомнениях остановитесь и проверьте раскладку ещё раз: восстановление данных всегда дороже пары минут внимания.