Определение простыми словами
LVM (Logical Volume Manager) — слой абстракции между физическими дисками и файловыми системами в Linux. Состоит из трёх уровней. Physical Volume (PV) — физический диск или раздел, отданный под LVM. Volume Group (VG) — пул из нескольких PV, объединённых в одно адресуемое пространство. Logical Volume (LV) — логический том, нарезанный из VG, на который кладётся файловая система.
Главные преимущества — гибкость и снапшоты. Том можно расширить, добавив новый диск в VG, без размонтирования и простоев. Можно снять снапшот для бэкапа консистентного состояния БД. Минус — добавляется ещё один слой, при сбоях на нём отлаживаться сложнее, чем на голом разделе.
Сравнение подходов к разметке
| Способ | Гибкость | Снапшоты | Сложность |
|---|---|---|---|
| Голый раздел | Низкая | Нет | Низкая |
| LVM | Высокая | Да (CoW) | Средняя |
| Btrfs | Высокая | Да (нативно) | Средняя |
| ZFS | Очень высокая | Да + send/receive | Высокая |
Кейсы использования
- Расширение раздела /var на VPS, когда логи и базы перестают помещаться — добавили диск, расширили VG и LV, ресайзнули ext4.
- Снапшот перед обновлением системы или БД — если что-то пошло не так, откатились командой lvconvert —merge.
- Thin provisioning: создать виртуальный том на 100 ГБ, физически занимая только реально использованные данные.
- Шифрование поверх LVM (LUKS поверх LV) для разных томов с разными ключами.
- Негативный сценарий: снапшоты LVM медленные при большой записи — каждый блок пишется дважды (CoW). Для активно меняющихся БД лучше использовать снапшоты на уровне СУБД или btrfs/ZFS.
Технические детали
Базовый сценарий: собрать VG из двух дисков, нарезать LV, расширить в будущем:
apt install lvm2
# 1. PV из двух дисков
pvcreate /dev/sdb /dev/sdc
# 2. Объединить в VG
vgcreate vg_data /dev/sdb /dev/sdc
# 3. Создать LV на 100 ГБ
lvcreate -L 100G -n lv_db vg_data
mkfs.ext4 /dev/vg_data/lv_db
mount /dev/vg_data/lv_db /mnt/db
# 4. Расширение на лету (добавили sdd в VG)
pvcreate /dev/sdd
vgextend vg_data /dev/sdd
lvextend -L +50G /dev/vg_data/lv_db
resize2fs /dev/vg_data/lv_db
# 5. Снапшот перед миграцией
lvcreate -s -L 10G -n lv_db_snap /dev/vg_data/lv_db
Связку с RAID 10 часто делают так: mdadm собирает массив, сверху ставится PV, дальше LVM нарезает тома под виртуалки.
🔥 Где это применяется
Частые вопросы
Можно ли уменьшить LVM-том?
Да, но порядок строгий: сначала уменьшить файловую систему (resize2fs), потом сам LV (lvreduce). Для XFS уменьшение невозможно — только увеличение.
Тормозят ли снапшоты LVM?
Да, при большой нагрузке на запись. Снапшот хранит изменённые блоки методом Copy-on-Write, и каждая запись становится двойной. Для БД с активной записью используйте снапшоты на уровне СУБД или ZFS.
LVM или Btrfs — что выбрать?
LVM проще, стабильнее и лучше дружит с любой файловой системой. Btrfs даёт нативные снапшоты и сжатие, но менее предсказуем под высокой нагрузкой и требует свежего ядра.