Шлифуем админское кунг-фу. Расширим раздел диска и файловую систему на лету без перезагрузки и без потери данных. Я буду расширять диск на виртуальной машине VMware с операционной системой Ubuntu.
Уже была подобная статья, где я расширял отдельный диск /dev/sdb.:
Linux — расширяем раздел на лету
Потом была вторая статья, где я расширял логический системный раздел /dev/sda5, который находится в расширенном разделе:
Linux — расширяем раздел на лету 2
Сегодня рассмотрим более сложный вариант первой статьи, где приведённый алгоритм действий к успеху не приводит, раздел не расширяется, а всё из-за ошибки:
GPT PMBR size mismatch (314572799 != 419430399) will be corrected by w(rite)
Но давайте по порядку. Имеется диск /dev/sdb размером примерно 150 Гб. На диске есть раздел /dev/sdb1 с файловой системой ext4. Раздел забит на 91%, нужно добавить немного свободного места.
df -hT
На виртуальной машине увеличиваем диск до 200 Гб. Командуем операционной системе выполнить сканирование диска sdb:
echo 1>/sys/class/block/sdb/device/rescan
Смотрим что получилось:
lsblk
Система увидела, что диск sdb стал больше, 200 ГБ.
Теперь выполним приём кунг-фу. С помощью fdisk удалим и заново создадим раздел без потери данных. Переходим к управлению разделами диска:
fdisk /dev/sdb
Отобразим список разделов:
p
И вот первые грабли, обнаружено несоответствие размера GPT PMBR. Само оно не починится, я проверял. Если пересоздать раздел /dev/sdb1, то его размер не увеличится. Выполним ещё один приём кунг-фу, пересоздаём метку GPT:
g
Текущий раздел /dev/sdb1 на диске удалится (данные сохранятся). Создадим новый раздел:
n
Номер раздела 1 по умолчанию, остальное тоже по умолчанию. Создан новый раздел. Проверим текущие разделы:
p
Размер /dev/sdb1 200 ГБ, то что нужно.
Сохраняем изменения:
w
Обращаем внимание на предупреждение:
WARNING: Re-reading the partition table failed with error 16: Устройство или ресурс занято.
Ядро всё ещё использует старую таблицу. Новая будет использована при следующей перезагрузке или после выполнения partprobe(8) or kpartx(8)
Обновляем таблицу разделов диска sdb:
partx -u /dev/sdb
Расширяем файловую систему ext4 в разделе sdb1 до конца раздела:
resize2fs /dev/sdb1
Проверяем что получилось:
df -hT
Раздел /dev/sdb1 с файловой системой ext4 занимает 200 ГБ. Раздел забит на 68%.
Задача выполнена. Раздел и файловая система расширены на лету без перезагрузки и без потери данных. И без остановки сервисов, работающих с этим разделом.
Ссылки
Linux — расширяем раздел на лету
Linux — расширяем раздел на лету 2
Linux — расширяем раздел на лету 4
Linux — расширяем раздел на лету 5