Как расширить диск на VPS без потери данных
После увеличения диска в панели провайдера файловая система не растёт сама — нужно расширить раздел утилитой growpart, а затем саму ФС: resize2fs для ext4 или xfs_growfs для XFS. Операция выполняется на смонтированном диске без потери данных. Ниже — точная последовательность.
Как устроено расширение
Увеличение диска происходит в три слоя:
- Провайдер увеличивает виртуальный диск (например, с 40 до 80 ГБ).
- Раздел (
/dev/vda1) расширяется до нового размера диска —growpart. - Файловая система расширяется до размера раздела —
resize2fs/xfs_growfs.
Важно: перед операциями сделайте резервную копию или снимок. Риск минимален, но диск — это данные.
Шаг 1. Проверка текущего состояния
df -h
lsblk
df -h покажет занятое место на смонтированных ФС, lsblk — реальный размер диска и разделов. Если диск (vda) уже 80 ГБ, а раздел (vda1) — всё ещё 40 ГБ, значит нужно расширять.
Определите тип файловой системы:
findmnt -no FSTYPE /
Вернёт ext4, xfs или другой тип — от этого зависит команда на шаге 3.
Шаг 2. Расширение раздела через growpart
Установите утилиту, если её нет:
apt install -y cloud-guest-utils
Расширьте раздел. Обратите внимание на пробел между именем диска и номером раздела:
growpart /dev/vda 1
Здесь /dev/vda — диск, 1 — номер раздела. Проверьте результат:
lsblk
Раздел vda1 теперь должен занимать весь диск.
Шаг 3. Расширение файловой системы
Для ext4/ext3
resize2fs /dev/vda1
resize2fs умеет расширять смонтированную ФС на лету — размонтировать не нужно.
Для XFS
XFS расширяется по точке монтирования, а не по устройству:
xfs_growfs /
Шаг 4. Проверка
df -h /
Теперь корневой раздел должен показывать новый размер. Данные на месте, перезагрузка не требуется.
Случай с LVM
Если используется LVM, порядок другой. Сначала расширьте физический том и логический:
pvresize /dev/vda1
lvextend -l +100%FREE /dev/mapper/vg-root
resize2fs /dev/mapper/vg-root
Для XFS вместо resize2fs — xfs_growfs /.
Проверьте разметку LVM:
pvs
vgs
lvs
Если growpart недоступен
На системах без cloud-guest-utils раздел расширяют через parted или fdisk (удаление и пересоздание раздела с теми же начальными секторами и большим концом). Это рискованнее — обязательно сделайте снимок и действуйте по инструкции для конкретной разметки.
Добавление отдельного диска
Иногда провайдер выдаёт не увеличенный, а второй диск (/dev/vdb). Его размечают и монтируют отдельно. Создайте файловую систему:
mkfs.ext4 /dev/vdb
Смонтируйте, например, под данные:
mkdir -p /mnt/data
mount /dev/vdb /mnt/data
Чтобы диск подключался автоматически после перезагрузки, добавьте запись в /etc/fstab по UUID:
blkid /dev/vdb
UUID=<полученный-uuid> /mnt/data ext4 defaults 0 2
Проверьте корректность fstab без перезагрузки:
mount -a
df -h /mnt/data
Ошибка в fstab может помешать загрузке, поэтому mount -a — обязательная проверка.
Расширение swap при нехватке памяти
Если увеличили диск ради подкачки, можно нарастить swap-файл. Отключите текущий и создайте больше:
swapoff /swapfile
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
Проверьте:
free -h
Быстрая шпаргалка
| Шаг | ext4 | XFS |
|---|---|---|
| Раздел | growpart /dev/vda 1 |
growpart /dev/vda 1 |
| ФС | resize2fs /dev/vda1 |
xfs_growfs / |
| Проверка | df -h |
df -h |
Частые вопросы
Нужно ли размонтировать диск? Нет. resize2fs и xfs_growfs работают на смонтированной корневой ФС без остановки.
Потеряю ли я данные? При правильных командах — нет. Но всегда делайте снимок или бэкап перед операцией с разделами.
growpart пишет NOCHANGE — почему?
Раздел уже занимает весь диск. Убедитесь, что провайдер действительно увеличил диск (lsblk).
Можно ли уменьшить диск так же? Уменьшение сложнее и рискованнее: ext4 требует размонтирования, XFS вообще не поддерживает сжатие. Планируйте размер заранее.
Нужна ли перезагрузка? Обычно нет. Если система не видит новый размер диска, помогает перезагрузка после увеличения на стороне провайдера.
Нужен диск побольше? Масштабируйте на аренде VPS с NVMe или возьмите VPS для VPN и безопасности. Расширение и обслуживание без простоя выполнит Администрирование серверов.
