Расширение диска на VDS — задача, которая встречается чаще, чем апгрейд CPU или RAM. Сервисы растут, логи и медиа копятся, а остановить прод-окружение ради увеличения файловой системы обычно нельзя. Хорошая новость: в Linux большинство сценариев расширения можно выполнить онлайн — без перезагрузки и без размонтирования тома. В статье соберу проверенные последовательности команд с пояснениями: growpart для расширения раздела, resize2fs для ext4 и xfs_growfs для XFS, а также pvresize/lvextend для LVM. Если требуется масштабирование инфраструктуры, апгрейд тарифа VDS делается без миграции ОС.
Когда реально обойтись без простоя
Онлайн-расширение диска возможно, если выполнены условия:
- Файловая система поддерживает онлайн-увеличение: ext4 (через
resize2fs) и XFS (черезxfs_growfs). - Растёт последний раздел на диске (или используется LVM поверх физического тома, который можно расширить).
- Ядро видит новый размер устройства (рескан устройства выполним без ребута).
- Нет нестандартных прослоек, требующих отдельного шага (например, LUKS перед LVM).
Снижение риска: сделайте бэкап или снапшот в облаке перед началом. Операции безопасны, но ошибка в номере устройства или форс-перезапись таблицы разделов могут привести к простоям.
Аудит текущей разметки и ФС
Для начала зафиксируйте, как устроен диск: тип устройства, разметка (MBR/GPT), есть ли LVM, какая ФС, какие точки монтирования и UUID. Это поможет выбрать корректную последовательность команд.
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
lsblk -f
df -hT
sudo fdisk -l
cat /etc/fstab
sudo pvs
sudo vgs
sudo lvs -a -o +devices
Частые ситуации:
- Один раздел на всём диске (например,
/dev/vda1или/dev/nvme0n1p1) с ext4 или XFS и без LVM. - LVM поверх одного раздела (например,
/dev/vda2→PV→VG→ один или несколькоLV), ФС ext4/XFS на логическом томе. - Несколько разделов, где нужный — последний, что упрощает расширение.
Как ОС узнает о новом размере диска
После увеличения диска в панели провайдера (или через API) ядро может не сразу увидеть новый размер. Выполните рескан устройства. Виртуальные диски на KVM/QEMU обычно видны как /dev/vda (virtio) или /dev/sda (SCSI), на NVMe — /dev/nvme0n1.
# Универсально попытаться перечитать таблицу разделов
sudo partprobe
sudo blockdev --rereadpt /dev/vda
# Для NVMe
echo 1 | sudo tee /sys/class/block/nvme0n1/device/rescan
# Для virtio/SCSI можно инициировать хост-скан (с осторожностью, число хостов разнится)
for h in /sys/class/scsi_host/host*; do echo "- - -" | sudo tee $h/scan; done
lsblk -o NAME,SIZE,TYPE
Когда устройство «увеличилось», можно расширять раздел и файловую систему.

Сценарий A: один раздел ext4 без LVM
Классика: один-единственный раздел, на нём корневая файловая система ext4. Для онлайн-расширения понадобятся growpart и resize2fs. Пакет с growpart называется cloud-guest-utils (Debian/Ubuntu) или cloud-utils-growpart (RHEL/CentOS/Alma/Rocky).
# Установить growpart (если отсутствует)
# Debian/Ubuntu
sudo apt update
sudo apt install -y cloud-guest-utils
# RHEL/CentOS/Alma/Rocky
sudo yum install -y cloud-utils-growpart
# Проверить текущее состояние
lsblk -f
# Предположим, диск /dev/vda и раздел /dev/vda1 — последний и единственный
sudo growpart /dev/vda 1
# Обновить данные ядра о таблице разделов
sudo partprobe /dev/vda
# Расширить ext4 онлайн (при смонтированном /)
sudo resize2fs /dev/vda1
# Проверить
df -hT
lsblk -f
resize2fs умеет онлайн-расширение ext4, если раздел смонтирован в rw. Если вы увеличиваете не корень, а, например, /var или /home, порядок тот же. Главное — сначала расширить раздел (growpart), затем файловую систему (resize2fs).
Сценарий B: один раздел XFS без LVM
XFS расширяется только онлайн и только в смонтированном состоянии. Используем growpart для раздела и xfs_growfs для ФС.
# Убедитесь, что установлен пакет с xfs_growfs (обычно xfsprogs)
sudo xfs_info /
# Предположим, /dev/nvme0n1p1 — корневой раздел XFS
sudo growpart /dev/nvme0n1 1
sudo partprobe /dev/nvme0n1
# Расширяем ФС на весь доступный размер раздела (указываем точку монтирования)
sudo xfs_growfs /
# Проверяем
df -hT
sudo xfs_info /
Для XFS рекомендуют явно указывать точку монтирования (/path), хотя можно и устройство. Если расширяется не корень, замените / на нужную точку.
Сценарий C: LVM поверх одного раздела
Самый популярный прод-сценарий: диск → раздел → PV → VG → LV → ФС. Здесь цепочка длиннее, но тоже выполняется онлайн.
# Пример: /dev/vda2 — физический том LVM (PV) для VG=vg0, LV=lv_root
# 1) Расширяем раздел
sudo growpart /dev/vda 2
sudo partprobe /dev/vda
# 2) Расширяем физический том LVM
sudo pvresize /dev/vda2
# 3) Увеличиваем логический том (на весь свободный space)
sudo lvextend -l +100%FREE /dev/vg0/lv_root
# 4a) Если ext4 — расширяем ФС
sudo resize2fs /dev/vg0/lv_root
# 4b) Если XFS — расширяем ФС
sudo xfs_growfs /mnt_or_root
# Проверяем
sudo lvs -a -o +seg_size,seg_start_pe
df -hT
Вместо двух шагов 3–4 можно использовать lvextend -r (auto-resize FS), но на проде лучше иметь явный контроль над файловой системой:
# Автоматическое расширение ФС вместе с LV
sudo lvextend -l +100%FREE -r /dev/vg0/lv_root
Если в VG несколько LV, решите заранее, какой из них получит свободное место. Можно распределить точечными значениями, например -L +20G, вместо «всё свободное».

Сценарий D: несколько разделов, нужный — последний
Если у вас несколько разделов, и расширять нужно именно последний — всё просто: применяйте growpart к нему, затем растите ФС. Если раздел не последний, без переноса данных и сложных манипуляций (например, LVM, pvmove или бэкап → перестройка) онлайн-расширение проблематично. На практике для гибкости рекомендуют мигрировать на схему с LVM, чтобы в будущем масштабировать без танцев с разделами.
GPT vs MBR, имена устройств и номера разделов
Нюансы, которые часто путают:
- MBR ограничен 2 ТБ на диск. Для больших дисков используйте GPT.
- У NVMe дисков разделы имеют суффикс
p:/dev/nvme0n1p1,/dev/nvme0n1p2. - У virtio/SCSI обычно
/dev/vda1,/dev/sda1. growpartпринимает номер раздела, а не имя устройства:growpart /dev/vda 1,growpart /dev/nvme0n1 1.
Если вы предпочитаете parted, можно использовать resizepart в неинтерактивном режиме. Но growpart прозрачнее и аккуратнее работает с границами разделов в типовых шаблонах облачных образов.
Проверки до/после и телеметрия
Сравните состояние до и после операций:
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT
sudo pvs; sudo vgs; sudo lvs -a -o +devices
sudo xfs_info / # если XFS
sudo dumpe2fs -h /dev/mapper/vg0-lv_root | grep -i 'block count\|block size' # если ext4
Нагрузочные сервисы (БД, очереди) сохранят доступность, но на период растягивания ФС возможны кратковременные пики I/O. Планируйте окно низкой нагрузки, если к задержкам крайне чувствительны.
Частые ошибки и как их избежать
- Запуск
resize2fsилиxfs_growfsбез расширения раздела. Сначалаgrowpart, затем расширение ФС. - Забыли
pvresizeв LVM-сценарии. Без этого VG не увидит новые PE,lvextendвернёт нехватку места. - Расширение не последнего раздела. Планируйте миграцию в LVM или переразметку с бэкапом.
- Несоответствие устройства. Путают
/dev/vdaи/dev/vda1,/dev/nvme0n1и/dev/nvme0n1p1. Проверяйтеlsblk -f. - Зашифрованные тома (LUKS) забыли расширить. Порядок иной: раздел → LUKS (
cryptsetup resize) → PV → VG → LV → ФС. - Нет бэкапа. Даже при онлайн-операциях необходима точка возврата.
Пакеты и команды по дистрибутивам
- Debian/Ubuntu:
cloud-guest-utilsдляgrowpart,xfsprogsдля XFS,lvm2для LVM. - RHEL/CentOS/Alma/Rocky:
cloud-utils-growpart,xfsprogs,lvm2.
# Debian/Ubuntu
sudo apt update
sudo apt install -y cloud-guest-utils xfsprogs lvm2
# RHEL/CentOS/Alma/Rocky
sudo yum install -y cloud-utils-growpart xfsprogs lvm2
Мини-чеклисты команд
ext4 без LVM
lsblk -f
sudo growpart /dev/vda 1
sudo partprobe /dev/vda
sudo resize2fs /dev/vda1
df -hT
XFS без LVM
lsblk -f
sudo growpart /dev/nvme0n1 1
sudo partprobe /dev/nvme0n1
sudo xfs_growfs /
df -hT
LVM (ext4)
lsblk -f; sudo pvs; sudo vgs; sudo lvs
sudo growpart /dev/vda 2
sudo partprobe /dev/vda
sudo pvresize /dev/vda2
sudo lvextend -l +100%FREE /dev/vg0/lv_data
sudo resize2fs /dev/vg0/lv_data
LVM (XFS)
lsblk -f; sudo pvs; sudo vgs; sudo lvs
sudo growpart /dev/vda 2
sudo partprobe /dev/vda
sudo pvresize /dev/vda2
sudo lvextend -L +50G /dev/vg0/lv_logs
sudo xfs_growfs /var/log
Наблюдаемое поведение и безопасность
Операции «resize» обычно быстрые: growpart мгновенный, resize2fs на ext4 работает пропорционально размеру ФС и может занять минуты на очень больших томах; xfs_growfs как правило работает быстро. На загруженных системах планируйте окно, когда дисковая подсистема не забита.
Важно: операции расширения увеличивают доступное пространство, но не исправляют физические проблемы накопителя. Следите за SMART/health метриками, I/O задержками и лимитами хранилища в облаке.
Траблшутинг
growpartжалуется на несогласованность таблицы разделов. Проверьте, что раздел — последний, и диск действительно увеличен на уровне гипервизора. Иногда помогаетsgdisk -eдля восстановления GPT backup header (делайте бэкап перед операцией).resize2fs: Not enough space. Значит, раздел не расширен. Проверьтеfdisk -l,lsblk.pvresize: Failed to read PV. Убедитесь, что указываете именно PV-устройство (например,/dev/vda2), а не whole disk.xfs_growfs: new size equal to old size. Раздел не вырос или LV не увеличен (в LVM-сценарии). Проверьте выходные данныеlvs.
Полезно к прочтению: тюнинг ext4/XFS на VDS и снапшоты LVM для горячих бэкапов.
Итоги
Онлайн-расширение диска на VDS — рутинная операция: расширяем устройство на стороне гипервизора, убеждаемся, что ядро видит новый размер, увеличиваем последний раздел через growpart, затем расширяем файловую систему — resize2fs для ext4 или xfs_growfs для XFS. В LVM добавляются шаги pvresize и lvextend. При аккуратной подготовке и проверках всё выполняется без простоя и перезагрузки.


