LVM: управление дисками без головной боли
LVM (Logical Volume Manager) — один из тех инструментов, которые кардинально меняют подход к управлению дисковым пространством в Linux. Если вы ещё работаете с разделами напрямую, эта статья объяснит, почему стоит перейти на LVM уже сегодня.
Концепция PV / VG / LV
LVM работает в три уровня абстракции:
- PV (Physical Volume) — физический диск или раздел, инициализированный под LVM (
/dev/sdb,/dev/sdc1) - VG (Volume Group) — пул из одного или нескольких PV, единое пространство хранения
- LV (Logical Volume) — виртуальный раздел внутри VG, на котором создаётся файловая система
Такая модель даёт главное преимущество: логические тома не привязаны к физическому расположению данных на диске.
Создание: с нуля за пять команд
# 1. Инициализируем диски как PV
pvcreate /dev/sdb /dev/sdc
# 2. Создаём Volume Group
vgcreate vg_data /dev/sdb /dev/sdc
# 3. Создаём Logical Volume (например, 100 ГБ)
lvcreate -L 100G -n lv_storage vg_data
# 4. Создаём файловую систему
mkfs.ext4 /dev/vg_data/lv_storage
# 5. Монтируем
mount /dev/vg_data/lv_storage /mnt/storage
Расширение LV на лету
Это то, ради чего многие переходят на LVM. Расширение без остановки сервиса:
# Добавляем новый диск в VG
pvcreate /dev/sdd
vgextend vg_data /dev/sdd
# Расширяем LV на всё доступное место
lvextend -l +100%FREE /dev/vg_data/lv_storage
# Расширяем файловую систему (ext4 — онлайн, без размонтирования)
resize2fs /dev/vg_data/lv_storage
Для XFS используйте xfs_growfs /mnt/storage — тоже без размонтирования.
Снапшоты
LVM-снапшоты — быстрый способ создать консистентную копию тома для бэкапа:
# Создаём снапшот размером 10 ГБ (COW-хранилище для изменений)
lvcreate -L 10G -s -n lv_storage_snap /dev/vg_data/lv_storage
# Монтируем снапшот (только чтение)
mount -o ro /dev/vg_data/lv_storage_snap /mnt/snap
# После бэкапа удаляем
lvremove /dev/vg_data/lv_storage_snap
Важно: снапшот растёт по мере изменения исходного тома. Если заполнится — он станет невалидным.
Thin Provisioning
Thin-тома позволяют выделить больше места, чем физически есть — удобно для dev-сред и виртуализации:
# Создаём thin pool
lvcreate -L 200G --thinpool tp_main vg_data
# Создаём thin-тома (суммарно больше, чем pool)
lvcreate -V 100G --thin -n vm01_disk vg_data/tp_main
lvcreate -V 100G --thin -n vm02_disk vg_data/tp_main
lvcreate -V 50G --thin -n vm03_disk vg_data/tp_main
Мониторинг заполнения thin pool — обязателен:
lvs -o lv_name,data_percent,metadata_percent vg_data
Миграция данных: pvmove
pvmove позволяет перенести данные с одного физического диска на другой без остановки сервисов:
# Переносим всё с /dev/sdb на другие PV в VG
pvmove /dev/sdb
# После успешного переноса можно удалить PV из VG
vgreduce vg_data /dev/sdb
pvremove /dev/sdb
Процесс можно прервать и продолжить — LVM запоминает прогресс.
Мониторинг
Базовые команды для ежедневного использования:
pvs # состояние физических томов
vgs # состояние групп томов
lvs # состояние логических томов
pvdisplay /dev/sdb # детальная информация о PV
vgdisplay vg_data # детальная информация о VG
LVM + LUKS: шифрование дисков
Связка LVM поверх LUKS — стандартный подход для шифрования данных:
# Шифруем физический диск
cryptsetup luksFormat /dev/sdb
cryptsetup open /dev/sdb sdb_crypt
# Создаём PV на зашифрованном устройстве
pvcreate /dev/mapper/sdb_crypt
vgcreate vg_secure /dev/mapper/sdb_crypt
lvcreate -L 50G -n lv_private vg_secure
LVM — must-have инструмент для любого Linux-администратора. Один раз разобравшись с концепцией PV/VG/LV, вы перестанете бояться перераспределения дискового пространства.
pvmove спас меня несколько раз, когда умирал диск и нужно было срочно эвакуировать данные. Главное — запускать его в screen или tmux, чтобы не потерять прогресс при обрыве SSH-сессии.