Зачем
Без LVM раздел /dev/sda1 - фиксированный кусок диска. Чтобы расширить
/home - надо двигать физические разделы. С LVM ты добавляешь диск в
pool и расширяешь логический том на лету, не размонтируя.
Дополнительно: снапшоты, миграция между дисками, RAID, thin provisioning.
Иерархия
PV (Physical Volume) ← обычный раздел или диск целиком
↓
VG (Volume Group) ← пул из одного или нескольких PV
↓
LV (Logical Volume) ← виртуальный том внутри VG, под него делаешь ФС
Создание с нуля
# 1. Подготовить физические тома (на разделах или целом диске)
sudo pvcreate /dev/sdb1 /dev/sdc1
sudo pvs # список PV
sudo pvdisplay /dev/sdb1 # подробно
# 2. Создать volume group из них
sudo vgcreate vg-data /dev/sdb1 /dev/sdc1
sudo vgs # список VG
sudo vgdisplay vg-data
# 3. Нарезать logical volumes
sudo lvcreate -L 50G -n web vg-data # 50 GB том "web"
sudo lvcreate -l 100%FREE -n logs vg-data # весь оставшийся объём
sudo lvs # список LV
sudo lvdisplay /dev/vg-data/web
# 4. Создать ФС и смонтировать
sudo mkfs.ext4 /dev/vg-data/web
sudo mount /dev/vg-data/web /var/www
Имена для fstab - /dev/<vg>/<lv> или /dev/mapper/<vg>-<lv>
(оба указывают на один device).
Расширение онлайн (главная фича)
# 1. Добавить ещё один диск в VG
sudo pvcreate /dev/sdd1
sudo vgextend vg-data /dev/sdd1
# 2. Расширить LV
sudo lvextend -L +100G /dev/vg-data/web # +100 GB
sudo lvextend -l +100%FREE /dev/vg-data/logs # весь свободный
# 3. Расширить ФС поверх (БЕЗ размонтирования)
sudo resize2fs /dev/vg-data/web # ext4
sudo xfs_growfs /var/www # xfs (по mount-точке!)
# ext4: всё одной командой
sudo lvextend -L +100G -r /dev/vg-data/web # -r = автоматом resize2fs
Уменьшение (опасно!)
Поддерживает только ext4 / btrfs (xfs - нельзя). Порядок ОБРАТНЫЙ: сначала ужать ФС, потом LV.
sudo umount /var/www
sudo e2fsck -f /dev/vg-data/web
sudo resize2fs /dev/vg-data/web 30G
sudo lvreduce -L 30G /dev/vg-data/web
sudo mount /var/www
Если перепутать порядок → потеря данных. Делай бэкап.
Снапшоты
COW-снапшот - мгновенный, занимает место только на изменения:
# Снапшот для бэкапа: 5 GB места под изменения, имя snap-web
sudo lvcreate -L 5G -s -n snap-web /dev/vg-data/web
# Использовать (например, бэкап через rsync с замороженного состояния):
sudo mkdir /mnt/snap
sudo mount -o ro /dev/vg-data/snap-web /mnt/snap
rsync -av /mnt/snap/ /backup/web/
# Удалить снапшот
sudo umount /mnt/snap
sudo lvremove /dev/vg-data/snap-web
ВАЖНО: снапшот сломается если изменений больше выделенного места.
Мониторить: lvs - колонка Data%.
Thin provisioning
Обычные LV занимают своё место сразу. Thin LV - overcommit'ятся: можно создать 5 томов по 100 GB при 200 GB реального места. Потребляют место по мере записи.
sudo lvcreate -L 200G -T vg-data/thin-pool # пул
sudo lvcreate -V 100G -T vg-data/thin-pool -n vm1 # тонкий том 100G "виртуально"
Опасно если кто-то реально запишет - dmesg начнёт ругаться, и тома
начнут стопориться. Мониторить usage пула обязательно.
Миграция между дисками онлайн
Заменить старый диск на новый без downtime:
sudo pvcreate /dev/sde1
sudo vgextend vg-data /dev/sde1
sudo pvmove /dev/sdb1 # переехать с sdb1 на свободные PV
sudo vgreduce vg-data /dev/sdb1
sudo pvremove /dev/sdb1
# Теперь sdb1 можно вынуть
Полезный обзор
sudo pvs && echo --- && sudo vgs && echo --- && sudo lvs
sudo lsblk # дерево с LV видно
sudo lvs -o +devices # на каких PV лежит каждый LV