LVM (Logical Volume Manager) — уровень абстракции между физическими дисками и файловыми системами в Linux. Позволяет создавать, изменять размер, удалять логические тома без потери данных и без перезагрузки сервера. LVM используется по умолчанию в большинстве Linux-серверных дистрибутивов (RHEL, AlmaLinux, Ubuntu Server).
Как работает
LVM строится из трёх слоёв:
- PV (Physical Volume) — физический диск или раздел (
/dev/sda1,/dev/nvme0n1p2). Создаётся командойpvcreate /dev/sdb. - VG (Volume Group) — группа PV, объединяющая несколько дисков в одно пространство. Создаётся
vgcreate vgdata /dev/sdb /dev/sdc. - LV (Logical Volume) — виртуальный том из пространства VG. Создаётся
lvcreate -L 100G -n lvwww vgdata. На LV создаётся файловая система:mkfs.ext4 /dev/vgdata/lvwww.
Расширение тома без размонтирования: lvextend -L +50G /dev/vgdata/lvwww, затем resize2fs /dev/vgdata/lvwww (для ext4) или xfs_growfs /mnt/www (для XFS). Уменьшение тома возможно только для ext4 (не XFS) и требует размонтирования.
Снапшоты LVM создают точку восстановления без остановки сервиса: lvcreate -L 10G -s -n snap_www /dev/vgdata/lvwww. Снапшот хранит изменённые блоки — не копирует весь том. Используется для резервного копирования баз данных без lock-ов.
История
Концепция LVM пришла из HP-UX, где появилась в 1988 году. LVM для Linux создан Heinz Mauelshagen в 1998–1999 годах. LVM2 — переработанная версия — разрабатывается компанией Red Hat с 2002 года и является стандартным инструментом в современных дистрибутивах. Device Mapper — подсистема ядра Linux, лежащая в основе LVM2, Docker-хранилища и шифрования LUKS.
LVM: типичные операции и устранение неполадок
Ежедневные операции с LVM: pvs/vgs/lvs — показать физические тома, группы и логические тома; lvcreate -L 10G -n mydata vg0 — создать логический том 10 ГБ; mkfs.ext4 /dev/vg0/mydata — отформатировать; mount /dev/vg0/mydata /data — смонтировать. Расширение без остановки: lvextend -L +5G /dev/vg0/mydata && resize2fs /dev/vg0/mydata.
LVM snapshot — механизм copy-on-write: lvcreate -s -L 1G -n mydata_snap /dev/vg0/mydata создаёт снапшот. При изменении исходного тома оригинальные данные копируются в снапшот. Использование: создать снапшот перед обновлением БД, откатиться через lvconvert --merge при проблемах. Ограничение: размер снапшота должен покрывать объём изменений за время его жизни.
На что обращать внимание
LVM добавляет сложность: при повреждении метаданных VG восстановление данных значительно сложнее, чем с обычных разделов. Для VPS-серверов с хостером, поддерживающим снапшоты на уровне гипервизора (KVM), LVM менее критичен. В Docker: Docker может использовать devicemapper (LVM-based) как storage driver, но это устаревший подход — рекомендуется overlay2.
LVM на VPS и выделенных серверах
LVM устанавливается по умолчанию на большинстве Linux дистрибутивов при выборе LVM-разметки. На VPS: хостинг-провайдер использует LVM для управления дисковым пространством гипервизора — каждый VPS получает LV (Logical Volume). Docker может использовать LVM backend через devicemapper. Снапшоты LVM полезны перед системными обновлениями: lvcreate -s -L 5G -n snap /dev/vg0/root. Если обновление сломало систему, откат: lvconvert --merge /dev/vg0/snap. На AlmaLinux и RHEL LVM с файловой системой XFS — стандартная конфигурация.