Зачем нужен LVM
LVM размещает три слоя между дисками и ФС: физические тома (PV) объединяют дисковое пространство, группы томов (VG) агрегируют PV, логические тома (LV) нарезают именованные срезы. Это позволяет изменять размер, объединять диски и перемещать данные без переразбивки.
Ты разбиваешь новый сервер: /dev/sda1 под root, /dev/sda2 под /var, каждый фиксированного размера. Через полгода /var заполнен на 95%, а у root 40 ГБ свободно. С обычными разделами это пространство не переместить — придётся отмонтировать, загрузиться с rescue-диска, изменить размер через parted и надеяться, что файловая система не пострадала. Учения в 3 ночи, которых никто не хочет.
LVM существует, чтобы это стало 30-секундной операцией. Он вставляет тонкий слой абстракции между физическими дисками и файловыми системами — слой, позволяющий изменять размер, объединять несколько дисков и делать согласованные снапшоты прямо в рабочей системе.
После этого урока ты сможешь объяснить трёхуровневую модель LVM (PV → VG → LV), создать базовую конфигурацию LVM с нуля, инспектировать каждый уровень командами pvs/vgs/lvs и чётко сформулировать, что даёт LVM по сравнению с обычными разделами.
LVM имеет три уровня. Каждый — отдельная единица абстракции.
Диск или раздел → Physical Volume (PV) → Volume Group (VG) → Logical Volume (LV) → файловая система.
- Physical Volume (PV): диск или раздел, инициализированный для LVM. Это сырой ингредиент. Подходит любое блочное устройство:
/dev/sdb,/dev/sdc1, даже software RAID (/dev/md0). - Volume Group (VG): пул, агрегирующий один или несколько PV. Именно в VG живёт дисковое пространство. Добавление PV в VG расширяет пул. Удаление PV опустошает его.
- Logical Volume (LV): именованный срез, вырезанный из пула VG. LV выглядит как блочное устройство (
/dev/myvg/data) и содержит файловую систему. Ты расширяешь, сжимаешь, делаешь снапшоты и перемещаешь LV, не трогая разделы или диски напрямую.
# Посмотреть что знает LVM о каждом уровне
pvs # список физических томов
vgs # список групп томов
lvs # список логических томов
# Подробнее
pvdisplay /dev/sdb
vgdisplay myvg
lvdisplay /dev/myvg/dataСоздание PV: инициализация блочного устройства для LVM.
# Сначала определи диск (НЕ делай это на диске с нужными данными)
lsblk
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sdb 8:16 0 50G 0 disk
# sdc 8:32 0 50G 0 disk
# Инициализируй /dev/sdb как физический том
sudo pvcreate /dev/sdb
# Physical volume "/dev/sdb" successfully created.
# И /dev/sdc для двухдискового пула
sudo pvcreate /dev/sdc
# Physical volume "/dev/sdc" successfully created.
# Проверь
sudo pvs
# PV VG Fmt Attr PSize PFree
# /dev/sdb lvm2 --- <50.00g <50.00g
# /dev/sdc lvm2 --- <50.00g <50.00g
# Столбец VG пуст — ещё не назначены в группуpvcreate записывает заголовок метаданных LVM на устройство. Данные диска фактически заменяются — выполняй только на чистом или выделенном диске.
Создание VG: объединение PV в пул.
# Создай группу томов "datavg", объединяющую оба PV
sudo vgcreate datavg /dev/sdb /dev/sdc
# Volume group "datavg" successfully created
sudo vgs
# VG #PV #LV #SN Attr VSize VFree
# datavg 2 0 0 wz--n- <99.99g <99.99g
# В VG теперь ~100 ГБ объединённого пространства (2 × 50 ГБ)
# #LV равно 0 — ничего ещё не вырезано
# Позже можно добавить PV в существующую VG:
# sudo vgextend datavg /dev/sddИмя VG используется во всех последующих командах LVM. Выбирай осмысленное: vg0, datavg, prod-vg. Имя встраивается в пути к устройствам.
Создание LV: вырезание именованного среза из VG.
# Создай логический том "appdata" на 30 ГБ в datavg
sudo lvcreate -L 30G -n appdata datavg
# Logical volume "appdata" created.
# Создай второй LV, используя 20% оставшегося свободного пространства
sudo lvcreate -l 20%FREE -n logs datavg
# Logical volume "logs" created.
sudo lvs
# LV VG Attr LSize
# appdata datavg -wi-a----- 30.00g
# logs datavg -wi-a----- 14.00g
# LV теперь доступен как блочное устройство по двум эквивалентным путям:
ls -l /dev/datavg/appdata
# lrwxrwxrwx /dev/datavg/appdata -> ../dm-0
ls -l /dev/mapper/datavg-appdata
# То же устройство, другой симлинк
# Форматируй и монтируй LV как любое блочное устройство:
sudo mkfs.ext4 /dev/datavg/appdata
sudo mkdir /mnt/appdata
sudo mount /dev/datavg/appdata /mnt/appdata
# Добавь в /etc/fstab, используя путь device mapper (стабильный):
# /dev/datavg/appdata /mnt/appdata ext4 defaults,nofail 0 2Что даёт LVM по сравнению с обычными разделами.
| Операция | Обычные разделы | LVM |
|---|---|---|
| Расширить файловую систему | Офлайн, рискованное изменение размера | Онлайн в большинстве случаев |
| Объединить несколько дисков | Невозможно без RAID | vgextend затем lvextend |
| Согласованный снапшот для бэкапа | Невозможно без поддержки ФС | lvcreate -s (copy-on-write) |
| Переместить данные между дисками | dd + отмонтирование + переразбивка | pvmove онлайн |
| Называть тома | /dev/sda2 навсегда | /dev/vg0/postgres |
Преимущество именования недооценено. /dev/myvg/postgres переживает замены дисков и миграции серверов. /dev/sda2 — топология оборудования, зашитая в конфиг.
# Полная картина: какие PV backing'ят какие LV
sudo pvdisplay --maps
# --- Physical volume ---
# PV Name /dev/sdb
# VG Name datavg
# ...
# --- Physical Segments ---
# Physical extent 0 to 7679:
# Logical volume /dev/datavg/appdata
# Logical extents 0 to 7679Настройка LVM на новом диске данных, от начала до конца.
# Сценарий: новый диск 200 ГБ /dev/sdb добавлен на веб-сервер.
# Цель: создать группу томов с двумя LV: один для загрузок приложения, другой для логов.
# 1. Убедись, что диск чист и это правильное устройство
lsblk /dev/sdb
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sdb 8:16 0 200G 0 disk
# (нет потомков = нет разделов, можно использовать)
# 2. Инициализируй как PV (раздел не нужен — LVM может использовать весь диск)
sudo pvcreate /dev/sdb
# Physical volume "/dev/sdb" successfully created.
# 3. Создай VG
sudo vgcreate webvg /dev/sdb
# Volume group "webvg" successfully created
# 4. Создай LV: 150 ГБ для загрузок, 40 ГБ для логов
sudo lvcreate -L 150G -n uploads webvg
sudo lvcreate -L 40G -n logs webvg
# 5. Форматируй оба
sudo mkfs.xfs /dev/webvg/uploads
sudo mkfs.ext4 /dev/webvg/logs
# 6. Точки монтирования + fstab
sudo mkdir -p /srv/uploads /var/log/app
sudo mount /dev/webvg/uploads /srv/uploads
sudo mount /dev/webvg/logs /var/log/app
# Добавь в /etc/fstab:
# /dev/webvg/uploads /srv/uploads xfs defaults,nofail 0 2
# /dev/webvg/logs /var/log/app ext4 defaults,nofail 0 2
# Проверь fstab перед перезагрузкой
sudo mount -a
# 7. Проверь
sudo lvs webvg
# LV VG Attr LSize
# logs webvg -wi-ao---- 40.00g
# uploads webvg -wi-ao---- 150.00g
# 'a' в Attr = активен, 'o' = открыт (смонтирован)▸Почему это работает
Почему использовать весь диск (/dev/sdb), а не раздел (/dev/sdb1) как PV? Оба варианта работают, но использование всего диска напрямую проще, если диск целиком выделен под LVM — никаких накладных расходов на таблицу разделов, никакой путаницы с нумерацией разделов. Исключение: если диск когда-нибудь может понадобиться для dual-boot или совместного использования с файловой системой не под LVM — сначала создай раздел и только его делай PV. Большинство выделенных серверных дисков данных идут напрямую в LVM.
▸Частая ошибка
Распространённая ошибка: запустить pvcreate на диске, который уже смонтирован или содержит активную файловую систему. LVM предупредит, но исторически позволял продолжить в некоторых версиях. Результат — повреждение данных. Всегда проверяй lsblk и mount | grep /dev/sdb, что целевое устройство отмонтировано и не используется, перед вызовом pvcreate.
У тебя есть группа томов со 100 ГБ свободного пространства, и ты хочешь добавить второй диск 50 ГБ, чтобы увеличить пул до 150 ГБ свободного. Какая последовательность команд это делает?
LVM вставляет три уровня между дисками и файловыми системами. Физические тома (PV) инициализируют блочные устройства для LVM командой pvcreate. Группы томов (VG) объединяют один или несколько PV в именованный пул командой vgcreate; добавление PV позже через vgextend расширяет пул онлайн. Логические тома (LV) — именованные срезы, вырезанные из VG командой lvcreate -L <размер> -n <имя> <vg>; они появляются как блочные устройства в /dev/<vg>/<lv> и содержат файловые системы как обычные разделы. Выгода перед обычными разделами: изменение размера онлайн, объединение нескольких дисков, снапшоты, перемещение данных вживую и семантическое именование хранилища вместо имён по аппаратному слоту.
Практика
Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.