В инфраструктуре есть вещи вечные:
- разработчики, которые «ничего не меняли»;
- мониторинг, начинающий орать в пятницу вечером;
- и расширение дисков в виртуалках.
На первый взгляд операция простая. На практике - кто-то забывает про pvresize, кто-то расширяет не тот раздел, а кто-то внезапно обнаруживает, что внутри виртуальной машины XFS, а не ext4. И вот уже вместо «5 минут работы» начинается археология Linux-разделов.
Оставлю нормальную современную шпаргалку по увеличению дисков в Proxmox, с пояснениями, примерами и подводными камнями.
Как вообще устроено расширение диска
Когда вы увеличиваете диск виртуальной машины в Proxmox - это только первый этап.
На самом деле процесс состоит из нескольких уровней:
Proxmox disk
↓
Partition (/dev/sda1)
↓
LVM Physical Volume (PV)
↓
Volume Group (VG)
↓
Logical Volume (LV)
↓
Filesystem (ext4/xfs)
И увеличить нужно все уровни последовательно.
Потому что Linux не умеет читать мысли администратора.
Пока не скажешь pvresize - LVM будет делать вид, что нового места не существует.
Вариант 1. Увеличение существующего LVM-диска
Шаг 1. Увеличиваем диск в Proxmox
Можно через веб-интерфейс:
VM -> Hardware -> Hard Disk -> Disk Action -> Resize
Либо через консоль гипервизора:
qm resize <vmid> <disk> <size>
Пример:
qm resize 100 virtio0 +5G
Что происходит:
- VM ID = 100
- диск = virtio0
- добавляем +5G
После этого гипервизор увеличит виртуальный диск.
Но внутри Linux пока ничего не изменится.
Шаг 2. Проверяем, что ОС увидела новый размер
Заходим в виртуальную машину:
lsblk
или:
fdisk -l
Пример:
fdisk -l /dev/sda
Вы должны увидеть:
- новый размер диска;
- старые разделы;
- свободное место после раздела.
Например:
Disk /dev/sda: 100 GiB
/dev/sda1 95G
Хотя диск уже 100G - раздел всё ещё 95G.
Типичная ситуация.
Шаг 3. Расширяем раздел
Самый удобный способ - cfdisk.
cfdisk /dev/sda
Дальше:
Выбираем partition
-> Resize
-> Enter
-> Write
-> yes
-> Quit
Важно
Если это системный диск:
- внимательно смотрим номер раздела;
- не удаляем EFI;
- не трогаем boot-разделы.
Иначе Linux внезапно превращается в тыкву.
Проверяем результат
lsblk
Теперь раздел должен стать больше.
Например:
sda 100G
└─sda3 100G
Шаг 4. Расширяем Physical Volume (PV)
Теперь нужно сообщить LVM, что раздел стал больше.
pvresize /dev/sda3
Проверяем:
pvdisplay
Или:
pvs
Теперь PV должен показывать новый размер.
Шаг 5. Проверяем свободное место в Volume Group
vgdisplay
или:
vgs
Ищем:
Free PE / Size
Если свободное место появилось - всё хорошо.
Шаг 6. Расширяем Logical Volume
Проверяем LV:
lvs
Пример:
/rootvg/rootlv
Расширяем на всё свободное место:
lvextend -r -l +100%FREE /dev/VolumeGroup/lv
Например:
lvextend -r -l +100%FREE /dev/vg0/root
Что делает ключ
-r
Очень полезная штука. Он автоматически вызывает resize filesystem. То есть: LV увеличился + Filesystem увеличилась. Одной командой.
Современные админы любят автоматизацию. Старые админы любят сначала сделать snapshot. Оба подхода правильные.
Шаг 7. Расширяем файловую систему вручную (если нужно)
Для ext4:
resize2fs /dev/VolumeGroup/lv
Для XFS:
xfs_growfs /
Или:
xfs_growfs /mountpoint
Важно про XFS
XFS:
- умеет только расширение;
- не умеет уменьшение.
Вообще. Никак. Поэтому перед экспериментами с XFS лучше думать заранее, а не после.
Финальная проверка
df -h
И:
lsblk
Пример:
Filesystem Size Used Avail Use%
/dev/mapper/vg0-root 95G 20G 70G
Теперь место появилось. Мониторинг временно перестал вас ненавидеть.
Быстрый сценарий для ext4 + LVM
Если всё стандартно:
qm resize 100 virtio0 +10G
cfdisk /dev/sda
pvresize /dev/sda3
lvextend -r -l +100%FREE /dev/vg0/root
Практически «боевой набор» любого DevOps/SRE.
Увеличение диска БЕЗ LVM
Иногда встречаются древние системы без LVM. Да, такие ещё живы.
Расширяем обычный раздел
fdisk /dev/sda
Дальше:
p
d
n
enter
enter
enter
w
Что здесь происходит
Фактически:
- удаляем раздел;
- создаём заново;
- с тем же началом;
- но с новым размером.
Данные не пропадают, если:
- стартовый сектор совпадает;
- руки не дрожат.
После этого
Для ext4:
resize2fs /dev/sda1
Проверяем:
df -h
Расширение LVM новым диском
Это уже более «правильный» серверный подход.
Особенно:
- базы данных;
- файловые хранилища;
- системы с высокими IO;
- когда не хочется трогать основной диск.
Шаг 1. Добавляем новый диск в VM
Через Proxmox:
VM -> Hardware -> Add -> Hard Disk
Например появился:
/dev/sdf
Проверяем:
fdisk -l
Шаг 2. Создаём раздел
fdisk /dev/sdf
Дальше:
n
enter
enter
enter
t
8e
w
Что такое 8e
Это тип раздела Linux LVM. На GPT-дисках через gdisk/parted это уже не так критично, но старая школа всё ещё помнит магическое 8e.
Шаг 3. Создаём Physical Volume
pvcreate /dev/sdf1
Проверяем:
pvs
Шаг 4. Добавляем диск в Volume Group
Смотрим список VG:
vgs
Добавляем:
vgextend VGS_NAME /dev/sdf1
Например:
vgextend vgdata /dev/sdf1
Шаг 5. Расширяем Logical Volume
Смотрим LV:
lvs
Пример:
/dev/mapper/db--vg-pgdata
Расширяем:
lvextend -l +100%FREE /dev/mapper/db--vg-pgdata
Шаг 6. Расширяем файловую систему
ext4:
resize2fs /dev/mapper/db--vg-pgdata
XFS:
xfs_growfs /pgdata
Проверяем
df -h
Полезные команды, которые реально спасают
Смотреть структуру дисков
lsblk
Смотреть UUID и filesystem
blkid
Смотреть LVM
pvs
vgs
lvs
Смотреть filesystem
df -hT
Частые проблемы
pvresize не видит место
Обычно:
- раздел не расширен;
- kernel не перечитал partition table.
Помогает:
partprobe
или:
reboot
Да, иногда «выключить и включить» всё ещё работает лучше любой магии.
resize2fs: Bad magic number
Обычно filesystem не ext4.
Проверяем:
df -T
Может оказаться XFS.
XFS не растёт
Нужно расширять mountpoint:
Неправильно:
xfs_growfs /dev/mapper/vg0-root
Правильно:
xfs_growfs /
GPT vs MBR
Если диск больше 2 ТБ:
- используйте GPT;
- MBR упрётся в лимиты;
- fdisk может начать грустить.
Современный вариант:
parted
или:
gdisk
Production-рекомендации
Делайте snapshot
Перед любыми операциями.
Особенно:
- базы данных;
- production;
- legacy;
- «тот сервер никто не трогал 7 лет».
Не расширяйте всё впритык
Оставляйте запас в VG.
Это очень удобно:
- для snapshot;
- rollback;
- временных операций;
- emergency resize.
Следите за inode
Иногда место есть.
А файлы создать нельзя.
Потому что inode закончились.
Проверка:
df -i
Для баз данных лучше отдельный диск
Особенно:
- PostgreSQL;
- MySQL;
- ClickHouse;
- Ceph.
Так проще:
- мигрировать;
- расширять;
- мониторить;
- делать IO tuning.
Итог
Расширение диска в Linux - это не одна операция, а цепочка действий:
Disk -> Partition -> PV -> VG -> LV -> Filesystem
И если забыть хотя бы один этап - место «как бы есть», но его «как бы нет». А потом начинается любимая игра всех администраторов:
Почему df показывает старый размер?!
И да - lsblk, pvs, vgs, lvs и df -h должны стать вашими лучшими друзьями в такие моменты.