После увеличения диска на вашем VPS Linux Infrawire виртуальный диск стал больше, но раздел и файловая система сохранили прежний размер. Расширить нужно и то и другое вручную, на работающей системе, не отмонтируя корень.
Руководство охватывает обычные разделы (ext4 и XFS) и конфигурации с LVM на Ubuntu 24.04, Debian 12, AlmaLinux 9 и Rocky 9.
📋 Требования
- VPS, диск которого уже увеличен (новый размер виден в
lsblk) - Доступ по SSH под root (IP и пароль root есть в вашем личном кабинете)
- Свежая резервная копия важных данных
1. Резервная копия перед работой с разделами
Изменение размера смонтированной файловой системы ext4 или XFS обычное дело, но ошибка в таблице разделов может уничтожить данные. Сначала сохраните самое важное:
Bash# Архивируем незаменимые данные tar -czf /root/backup-etc.tar.gz /etc rsync -avz /var/www/ USER@BACKUP_HOST:/backups/www/ # Сохраняем таблицу разделов (пригодится для восстановления) sfdisk -d /dev/vda > /root/vda-partition-table.txt
2. Определите диск, раздел и файловую систему
Bashlsblk -f df -hT /
Типичный вывод: диск vda на 80G, раздел vda1 на 40G, смонтированный в /, файловая система ext4 или xfs. Если корень находится на /dev/mapper/..., используется LVM: см. раздел 5. Диск может называться и sda или nvme0n1 (тогда разделы заканчиваются на p1).
3. Расширьте раздел с помощью growpart
Установите утилиту. В Ubuntu и Debian пакет называется cloud-guest-utils, в AlmaLinux и Rocky cloud-utils-growpart:
Bash# Ubuntu / Debian apt update && apt install -y cloud-guest-utils # AlmaLinux / Rocky dnf install -y cloud-utils-growpart
Затем расширьте раздел номер 1 диска /dev/vda (обратите внимание на пробел между диском и номером):
Bashgrowpart /dev/vda 1
Если в ответе NOCHANGE, раздел уже занимает всё доступное место. В некоторых образах после корневого раздела есть небольшой раздел (например, swap): тогда growpart не сможет расширить корень, и сначала этот раздел нужно удалить или переместить.
Убедитесь, что ядро видит новый размер:
Bashlsblk /dev/vda # Если всё ещё виден старый размер: partprobe /dev/vda
4. Расширьте файловую систему
Используйте команду, соответствующую типу вашей файловой системы (его показывает lsblk -f).
Для ext4:
Bashresize2fs /dev/vda1
Для XFS (по умолчанию в AlmaLinux и Rocky). Аргумент это точка монтирования, а не устройство, и XFS можно только увеличивать, но не уменьшать:
Bashxfs_growfs /
5. Случай LVM: pvresize и lvextend
Если корневой логический том лежит на LVM, добавляется ещё один уровень: раздел, затем физический том, затем логический том, затем файловая система.
Bashlsblk pvs && vgs && lvs # 1. Расширяем раздел с физическим томом (здесь vda3) growpart /dev/vda 3 # 2. Сообщаем LVM, что физический том стал больше pvresize /dev/vda3 # 3. Расширяем логический том и файловую систему одной командой (-r) lvextend -r -l +100%FREE /dev/mapper/VG_NAME-LV_NAME
Опция -r сама вызывает нужную утилиту (resize2fs или xfs_growfs). Подставьте вместо VG_NAME-LV_NAME значение из вывода lvs, например /dev/ubuntu-vg/ubuntu-lv. Чтобы использовать только часть свободного места, замените -l +100%FREE на -L +10G.
6. Проверьте результат
Bashdf -h / lsblk
Столбец Size в df -h теперь должен соответствовать новому объёму, а lsblk должен показывать раздел на весь диск. Перезагрузка не нужна: приложения продолжают работать всё время.
🛠️ Устранение неполадок
growpart: command not found: пакет не установлен. Установите cloud-guest-utils (apt) или cloud-utils-growpart (dnf).
NOCHANGE: partition 1 could not be grown: либо диск на самом деле не был увеличен (сравните lsblk с заказом), либо сразу за нужным разделом идёт другой. Проверьте через fdisk -l /dev/vda.
resize2fs: Bad magic number in super-block: файловая система, скорее всего, XFS, а не ext4. Выполните lsblk -f и используйте xfs_growfs /.
xfs_growfs: / is not a mounted XFS filesystem: вы указали имя устройства, либо файловая система ext4. Укажите точку монтирования и сначала проверьте тип.
lvextend сообщает об отсутствии свободных экстентов: вы пропустили growpart или pvresize. Выполните pvs и посмотрите столбец PFree.
🎉 Дополнительное место на диске готово к использованию: без перезагрузки, без простоя, и df -h это подтверждает!