Disk Growth — Cloud/VM Expansion

If you like this project, consider supporting me on Buy Me a Coffee ☕️

Disk Growth — Cloud/VM Expansion

Disk growth (online disk expansion) is the process of increasing disk, partition, and filesystem sizes on running systems — typically in cloud VMs, hypervisors, or bare-metal servers. This is one of the most common sysadmin operations in cloud environments where storage needs grow dynamically.

The workflow follows a strict layer-by-layer approach: disk → partition → (LVM) → filesystem. Each layer must be expanded in order. Skipping a layer (e.g., trying to resize a filesystem without growing the partition first) will fail.

Key tools / Основные инструменты:

📚 Official Docs / Официальная документация: growpart(1) · resize2fs(8) · xfs_growfs(8) · parted(8)

Partition Growth / Расширение раздела

Automatic Partition Resize / Автоматическое изменение размера раздела

sudo growpart /dev/sda 1                      # Grow partition №1 / Расширить раздел №1
sudo growpart /dev/vda 1                      # Grow partition (KVM/QEMU) / Расширить раздел (KVM/QEMU)
sudo growpart /dev/nvme0n1 1                  # Grow NVMe partition / Расширить раздел NVMe

Check Before Growth / Проверка перед расширением

lsblk                                         # List block devices / Список блочных устройств
df -h                                         # Check filesystem usage / Проверить использование ФС
sudo fdisk -l /dev/sda                        # Check partition table / Проверить таблицу разделов
sudo parted /dev/sda print                    # Alternative check / Альтернативная проверка

Manual Partition Resize (parted) / Ручное изменение (parted)

sudo parted /dev/sda                          # Enter parted / Войти в parted
# (parted) print                              # Show partitions / Показать разделы
# (parted) resizepart 1 100%                  # Resize to 100% / Изменить до 100%
# (parted) quit                               # Exit / Выйти

Install growpart / Установка growpart

sudo apt install cloud-guest-utils            # Debian/Ubuntu
sudo dnf install cloud-utils-growpart         # RHEL/Fedora/CentOS
sudo pacman -S cloud-guest-utils              # Arch Linux

Filesystem Expansion / Расширение файловой системы

[!CAUTION] Always create a backup or snapshot before resizing a filesystem. Data loss is possible if the operation is interrupted. Всегда создавайте резервную копию или снимок перед изменением размера ФС. Потеря данных возможна при прерывании операции.

EXT2/EXT3/EXT4

sudo resize2fs /dev/sda1                      # Grow EXT4 / Увеличить EXT4
sudo resize2fs /dev/vda1                      # Grow EXT4 (KVM) / Увеличить EXT4 (KVM)
sudo e2fsck -f /dev/sda1                      # Check before resize / Проверить перед изменением
sudo resize2fs /dev/sda1 50G                  # Resize to specific size / Изменить до конкретного размера

XFS

sudo xfs_growfs /mountpoint                   # Grow XFS / Увеличить XFS
sudo xfs_growfs /                             # Grow root XFS / Увеличить корневой XFS
sudo xfs_growfs -d /mnt/data                  # Grow data filesystem / Увеличить ФС данных

[!WARNING] XFS can only be grown (not shrunk) and must be mounted during resize. EXT4 can be shrunk, but only when unmounted. XFS можно только увеличить (не уменьшить) и ФС должна быть смонтирована при изменении. EXT4 можно уменьшить, но только когда размонтирована.

Btrfs

sudo btrfs filesystem resize max /mountpoint  # Grow Btrfs to max / Увеличить Btrfs до максимума
sudo btrfs filesystem resize +10G /mnt        # Grow by 10GB / Увеличить на 10GB
sudo btrfs filesystem resize 1:max /mnt       # Grow device 1 to max / Увеличить устройство 1 до максимума

Check Filesystem Type / Проверка типа ФС

df -T                                         # Show filesystem types / Показать типы ФС
lsblk -f                                      # Show filesystems / Показать файловые системы
sudo blkid /dev/sda1                          # Show filesystem UUID and type / Показать UUID и тип ФС

LVM Growth / Расширение LVM

Extend Physical Volume / Расширить физический том

sudo pvresize /dev/sda2                       # Resize PV to use full disk / Изменить PV на весь диск
sudo pvs                                      # List PVs / Список PV
sudo pvdisplay /dev/sda2                      # Show PV details / Показать детали PV

Extend Logical Volume / Расширить логический том

sudo lvextend -l +100%FREE /dev/vg0/lv_root   # Extend to use all free space / Расширить на всё свободное место
sudo lvextend -L +10G /dev/vg0/lv_data        # Extend by 10GB / Расширить на 10GB
sudo lvextend -L 50G /dev/vg0/lv_data         # Extend to 50GB total / Расширить до 50GB всего
sudo lvs                                      # List LVs / Список LV

Resize Filesystem After LVM / Изменить ФС после LVM

sudo lvextend -r -l +100%FREE /dev/vg0/lv_root  # Extend and resize FS / Расширить и изменить ФС
sudo lvextend -L +10G /dev/vg0/lv_root && sudo resize2fs /dev/vg0/lv_root  # EXT4 manual / EXT4 вручную
sudo lvextend -L +10G /dev/vg0/lv_root && sudo xfs_growfs /mount  # XFS manual / XFS вручную

[!TIP] Use lvextend -r to automatically resize the filesystem along with the LV — this is the safest and most convenient method. Используйте lvextend -r для автоматического изменения ФС вместе с LV — это самый безопасный и удобный метод.

Complete LVM Workflow / Полный процесс LVM

# 1. Check current state / Проверить текущее состояние
lsblk
df -h
sudo pvs
sudo vgs
sudo lvs

# 2. Grow partition / Расширить раздел
sudo growpart /dev/sda 2

# 3. Resize PV / Изменить PV
sudo pvresize /dev/sda2

# 4. Extend LV and resize FS / Расширить LV и изменить ФС
sudo lvextend -r -l +100%FREE /dev/vg0/lv_root

# 5. Verify / Проверить
df -h

Cloud Providers / Облачные провайдеры

AWS EC2

# After resizing EBS volume in AWS Console / После изменения размера тома EBS в консоли AWS
lsblk
sudo growpart /dev/xvda 1
sudo resize2fs /dev/xvda1                     # For EXT4 / Для EXT4
sudo xfs_growfs /                             # For XFS / Для XFS

[!NOTE] AWS EBS volume modification can take several minutes. Monitor progress in EC2 console under "Volumes" → "State" column. The volume must be in optimizing or completed state before resizing on the OS level. Модификация тома EBS может занять несколько минут. Следите за прогрессом в консоли EC2.

Google Cloud Platform (GCP)

# After resizing disk in GCP Console / После изменения размера диска в консоли GCP
lsblk
sudo growpart /dev/sda 1
sudo resize2fs /dev/sda1                      # For EXT4 / Для EXT4
sudo xfs_growfs /                             # For XFS / Для XFS

Azure

# After resizing disk in Azure Portal / После изменения размера диска в Azure Portal
lsblk
sudo growpart /dev/sda 1
sudo resize2fs /dev/sda1                      # For EXT4 / Для EXT4
sudo xfs_growfs /                             # For XFS / Для XFS

[!NOTE] Azure may require stopping and deallocating the VM before resizing the OS disk. Data disks can be resized while the VM is running. Azure может потребовать остановки и деаллокации ВМ перед изменением размера диска ОС.

DigitalOcean

# After resizing droplet / После изменения размера дроплета
lsblk
sudo growpart /dev/vda 1
sudo resize2fs /dev/vda1                      # For EXT4 / Для EXT4

VMware / Proxmox

# After increasing disk size in hypervisor / После увеличения размера диска в гипервизоре
lsblk
sudo growpart /dev/sda 1
sudo resize2fs /dev/sda1                      # For EXT4 / Для EXT4
sudo xfs_growfs /                             # For XFS / Для XFS

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

Common Issues / Распространённые проблемы

# Check if partition table is GPT or MBR / Проверить тип таблицы разделов
sudo parted /dev/sda print

# Kernel not recognizing new size / Ядро не распознаёт новый размер
sudo partprobe /dev/sda                       # Reread partition table / Перечитать таблицу разделов
sudo partx -u /dev/sda                        # Update kernel partition table / Обновить таблицу разделов ядра

# LVM not showing full size / LVM не показывает полный размер
sudo pvscan                                   # Scan for PVs / Сканировать PV
sudo vgscan                                   # Scan for VGs / Сканировать VG
sudo lvscan                                   # Scan for LVs / Сканировать LV

"NOCHANGE" from growpart / growpart возвращает "NOCHANGE"

# This means the partition already uses all available space
# Это означает, что раздел уже использует всё доступное пространство
lsblk                                         # Verify disk size vs partition size / Проверить размер диска vs раздела

# If disk was resized but kernel doesn't see it:
# Если диск был увеличен, но ядро не видит:
echo 1 > /sys/class/block/sda/device/rescan   # Rescan SCSI device / Пересканировать SCSI устройство

Verify Growth / Проверка расширения

# Before / До
lsblk
df -h

# After partition growth / После расширения раздела
lsblk

# After filesystem resize / После изменения ФС
df -h

Filesystem Check / Проверка файловой системы

# EXT4 check / Проверка EXT4
sudo e2fsck -f /dev/sda1

# XFS check / Проверка XFS
sudo xfs_repair /dev/sda1

# Btrfs check / Проверка Btrfs
sudo btrfs check /dev/sda1

Real-World Examples / Примеры из практики

Standard Cloud Growth (EXT4) / Стандартное расширение в облаке (EXT4)

# 1. Resize disk in cloud console / Изменить размер диска в консоли облака
# 2. SSH to server / SSH на сервер

# 3. Check current state / Проверить текущее состояние
df -h
lsblk

# 4. Grow partition / Расширить раздел
sudo growpart /dev/sda 1

# 5. Resize filesystem / Изменить размер ФС
sudo resize2fs /dev/sda1

# 6. Verify / Проверить
df -h

LVM in Production / LVM в продакшене

# Scenario: Root LV on LVM / Сценарий: Корневой LV на LVM

# 1. Check state / Проверить состояние
sudo vgs
sudo lvs
df -h

# 2. Grow partition (if needed) / Расширить раздел (если нужно)
sudo growpart /dev/sda 2

# 3. Resize PV / Изменить PV
sudo pvresize /dev/sda2

# 4. Extend LV with filesystem / Расширить LV с ФС
sudo lvextend -r -l +100%FREE /dev/mapper/vg0-root

# 5. Verify / Проверить
df -h
sudo lvs

Add New Disk to LVM / Добавить новый диск к LVM

# 1. Identify new disk / Идентифицировать новый диск
lsblk

# 2. Create PV / Создать PV
sudo pvcreate /dev/sdb

# 3. Extend VG / Расширить VG
sudo vgextend vg0 /dev/sdb

# 4. Extend LV / Расширить LV
sudo lvextend -l +100%FREE /dev/vg0/lv_data

# 5. Resize filesystem / Изменить ФС
sudo resize2fs /dev/vg0/lv_data              # EXT4
sudo xfs_growfs /mount                        # XFS

Emergency Filesystem Recovery / Аварийное восстановление ФС

# Boot into rescue mode / Загрузиться в режим восстановления

# Unmount filesystem / Отмонтировать ФС
sudo umount /dev/sda1

# Check and repair / Проверить и исправить
sudo e2fsck -f /dev/sda1                      # EXT4
sudo xfs_repair /dev/sda1                     # XFS

# Resize / Изменить размер
sudo resize2fs /dev/sda1                      # EXT4
sudo mount /dev/sda1 /mnt && sudo xfs_growfs /mnt  # XFS

# Remount / Перемонтировать
sudo mount /dev/sda1 /

Best Practices / Лучшие практики

[!IMPORTANT]

  • Always backup before resizing — snapshots in cloud, LVM snapshots, or full backups.
  • Check filesystem integrity before resize with e2fsck -f or xfs_repair.
  • Use LVM for flexibility — it allows online resizing without rebooting.
  • Take snapshots in cloud before resize — they are your safety net.
  • Document growth operations — track disk changes for audit trails.
  • Monitor disk usage after resize with df -h.

[!WARNING]

  • Never shrink XFS — it does not support shrinking at all.
  • Never run e2fsck on a mounted filesystem — it will corrupt data.
  • growpart requires free space after the target partition — if another partition follows, you must move or delete it first.

Filesystem Resize Comparison / Сравнение возможностей изменения размера ФС

Feature EXT4 XFS Btrfs
Grow online ✅ Yes / Да ✅ Yes / Да ✅ Yes / Да
Shrink ✅ Offline only / Только offline ❌ No / Нет ✅ Online / Онлайн
Must be mounted No for grow, unmount for shrink Yes — must be mounted No
Resize command resize2fs xfs_growfs btrfs filesystem resize
Check command e2fsck -f xfs_repair btrfs check
Best for General purpose / Общее назначение Large files, high-performance / Большие файлы Snapshots, CoW / Снапшоты

Typical Growth Workflow / Типичный процесс расширения

  1. Increase disk size in hypervisor/cloud console / Увеличить размер диска в гипервизоре/облаке
  2. Rescan (if needed): echo 1 > /sys/class/block/sda/device/rescan
  3. growpart to expand partition / расширение раздела
  4. pvresize (if LVM) / если LVM
  5. lvextend (if LVM) / если LVM
  6. resize2fs / xfs_growfs to expand filesystem / расширение ФС
  7. df -h to verify / проверка

[!NOTE] Some cloud providers (e.g., GCP) auto-resize the filesystem on reboot. Always verify with df -h. Некоторые облачные провайдеры (например, GCP) автоматически расширяют ФС при перезагрузке. Всегда проверяйте с df -h.


On this page

Disk Growth — Cloud/VM Expansion Partition Growth / Расширение раздела Automatic Partition Resize / Автоматическое изменение размера раздела Check Before Growth / Проверка перед расширением Manual Partition Resize (parted) / Ручное изменение (parted) Install growpart / Установка growpart Filesystem Expansion / Расширение файловой системы EXT2/EXT3/EXT4 XFS Btrfs Check Filesystem Type / Проверка типа ФС LVM Growth / Расширение LVM Extend Physical Volume / Расширить физический том Extend Logical Volume / Расширить логический том Resize Filesystem After LVM / Изменить ФС после LVM Complete LVM Workflow / Полный процесс LVM Cloud Providers / Облачные провайдеры AWS EC2 Google Cloud Platform (GCP) Azure DigitalOcean VMware / Proxmox Troubleshooting / Устранение неполадок Common Issues / Распространённые проблемы "NOCHANGE" from growpart / growpart возвращает "NOCHANGE" Verify Growth / Проверка расширения Filesystem Check / Проверка файловой системы Real-World Examples / Примеры из практики Standard Cloud Growth (EXT4) / Стандартное расширение в облаке (EXT4) LVM in Production / LVM в продакшене Add New Disk to LVM / Добавить новый диск к LVM Emergency Filesystem Recovery / Аварийное восстановление ФС Best Practices / Лучшие практики Filesystem Resize Comparison / Сравнение возможностей изменения размера ФС Typical Growth Workflow / Типичный процесс расширения Documentation Links