open atlas
↑ К треку
Linux: операционная система LIN · 07 · 01

Зачем нужен LVM

LVM размещает три слоя между дисками и ФС: физические тома (PV) объединяют дисковое пространство, группы томов (VG) агрегируют PV, логические тома (LV) нарезают именованные срезы. Это позволяет изменять размер, объединять диски и перемещать данные без переразбивки.

LIN Middle ◷ 20 min
Уровень
ОсновыJuniorMiddleSenior

Ты разбиваешь новый сервер: /dev/sda1 под root, /dev/sda2 под /var, каждый фиксированного размера. Через полгода /var заполнен на 95%, а у root 40 ГБ свободно. С обычными разделами это пространство не переместить — придётся отмонтировать, загрузиться с rescue-диска, изменить размер через parted и надеяться, что файловая система не пострадала. Учения в 3 ночи, которых никто не хочет.

LVM существует, чтобы это стало 30-секундной операцией. Он вставляет тонкий слой абстракции между физическими дисками и файловыми системами — слой, позволяющий изменять размер, объединять несколько дисков и делать согласованные снапшоты прямо в рабочей системе.

Цель

После этого урока ты сможешь объяснить трёхуровневую модель LVM (PV → VG → LV), создать базовую конфигурацию LVM с нуля, инспектировать каждый уровень командами pvs/vgs/lvs и чётко сформулировать, что даёт LVM по сравнению с обычными разделами.

1

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
2

Создание 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 на устройство. Данные диска фактически заменяются — выполняй только на чистом или выделенном диске.

3

Создание 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. Имя встраивается в пути к устройствам.

4

Создание 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
5

Что даёт LVM по сравнению с обычными разделами.

ОперацияОбычные разделыLVM
Расширить файловую системуОфлайн, рискованное изменение размераОнлайн в большинстве случаев
Объединить несколько дисковНевозможно без RAIDvgextend затем 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-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources4
expand
  1. 01
  2. 02
  3. 03
  4. 04

Trademarks belong to their respective owners. Editorial reference only.