LVM и управление томами

Знакомимся с LVM — слоем управления томами, который снимает жёсткость классических разделов: позволяет расширять диски на лету, объединять несколько накопителей и делать снапшоты.

LVM (Logical Volume Manager) — прослойка между физическими дисками и файловыми системами. Она собирает диски в общий пул (VG) и нарезает из него гибкие логические тома (LV), размер которых меняется без переразбивки.

Зачем это знать на практике

Сервер проработал год, и раздел /var под базой данных кончился. С обычными разделами это боль: подвинуть соседний раздел сложно и рискованно. С LVM — две команды на работающей системе, без перезагрузки и простоя. А ещё LVM умеет снапшоты: «заморозить» состояние тома перед опасным обновлением и откатиться, если что-то пошло не так. Для любого, кто администрирует серверы или БД, LVM — стандарт де-факто.

Три уровня LVM

УровеньАббревиатураЧто это
Physical VolumePVфизический «кирпич»: диск или раздел, отданный под LVM
Volume GroupVGпул, объединяющий несколько PV в общее пространство
Logical VolumeLVлогический том, нарезанный из VG; на нём создаётся файловая система

Логика такая: берём диски (PV) → ссыпаем их в один пул (VG) → нарезаем из пула тома нужного размера (LV) → на томах делаем ext4 и монтируем. Размер VG = сумма PV; LV можно растить, пока в VG есть свободное место.

Создание тома с нуля

# 1. Помечаем физические диски как PV
sudo pvcreate /dev/sdb /dev/sdc

# 2. Собираем из них группу томов vg_data
sudo vgcreate vg_data /dev/sdb /dev/sdc

# 3. Нарезаем логический том на 50 ГБ
sudo lvcreate -L 50G -n lv_db vg_data

# 4. Создаём файловую систему и монтируем
sudo mkfs.ext4 /dev/vg_data/lv_db
sudo mkdir -p /var/lib/db
sudo mount /dev/vg_data/lv_db /var/lib/db

Обзорные команды для каждого уровня — pvs, vgs, lvs (кратко) и pvdisplay/vgdisplay/lvdisplay (подробно):

sudo vgs
#   VG       #PV #LV #SN Attr   VSize    VFree
#   vg_data    2   1   0 wz--n- <1.95t   <1.90t

Расширение тома на лету

Главная суперсила LVM. Допустим, lv_db заполнился, а в группе vg_data есть свободное место. Увеличиваем том и — обязательно! — следом растягиваем файловую систему:

# увеличить логический том ещё на 20 ГБ
sudo lvextend -L +20G /dev/vg_data/lv_db

# растянуть ext4 ПОД новый размер тома (онлайн, без размонтирования)
sudo resize2fs /dev/vg_data/lv_db

Удобный приём: lvextend -r делает оба шага сразу (растит том и ФС). Если свободного места в VG нет — сначала добавляем в группу новый диск, и пул мгновенно вырастает:

sudo pvcreate /dev/sdd
sudo vgextend vg_data /dev/sdd       # VG стал больше — теперь есть куда расти LV

Это и есть ответ на «диск кончился»: добавить накопитель в пул и расширить нужный том, не трогая данные и не перезагружаясь.

Снапшоты

Снапшот — «фотография» тома на момент времени. LVM создаёт его мгновенно и почти без затрат места: снапшот хранит лишь те блоки, которые ИЗМЕНИЛИСЬ в оригинале после его создания (механизм copy-on-write).

# снять снапшот перед рискованным обновлением БД
sudo lvcreate -L 5G -s -n db_snap /dev/vg_data/lv_db

# ... выполняем миграцию; если всё сломалось — откатываемся:
sudo umount /var/lib/db
sudo lvconvert --merge /dev/vg_data/db_snap   # вернуть том к состоянию снапшота

Размер снапшота (-L 5G) — это запас под изменившиеся блоки, а не копия всего тома. Если изменений окажется больше запаса, снапшот переполнится и станет недействительным, поэтому его не держат месяцами — это инструмент на время операции или бэкапа.

Как это работает под капотом

LVM разбивает всё пространство VG на одинаковые кусочки — extents (физические PE на дисках, логические LE на томах). Логический том — это просто упорядоченный список физических extents, возможно, с РАЗНЫХ дисков. Поэтому том может быть больше любого отдельного диска и расти, пока в пуле есть свободные extents: lvextend лишь добавляет тому новые куски из общего котла, не двигая данные. Снапшот же создаёт отдельный том под «изменённые» блоки: при первой записи в исходный том старая версия блока сначала копируется в снапшот (copy-on-write), и так снапшот всегда отражает исходное состояние. Все эти отображения LVM хранит в метаданных на самих PV, поэтому конфигурация переживает перенос дисков на другую машину.

Частые ошибки

  • Расширить LV и забыть про resize2fs. Том стал больше, а файловая система — нет; место «не появилось». Растите ФС следом (или используйте lvextend -r).
  • Уменьшать том «горячим». Сжатие (lvreduce) опаснее роста: ФС нужно ужать ПЕРЕД томом и обычно при размонтировании, иначе данные за новой границей будут потеряны. Всегда делайте бэкап.
  • Забытый снапшот. Переполнившийся снапшот «ломается», а активный снапшот замедляет запись в исходный том (каждая запись = copy-on-write). Удаляйте после использования: lvremove.
  • Думать, что LVM заменяет бэкап. Снапшот живёт на том же физическом диске; гибель диска уносит и том, и снапшот. Это инструмент отката, а не резервная копия.

LVM против обычных разделов

АспектОбычные разделыLVM
Изменение размерасложно, рискованно, часто требует размонтированиярасширение на лету одной командой
Несколько дисков как один томнет (без RAID)да, том охватывает много PV
Снапшотынетда, мгновенные copy-on-write
Простотапроще, меньше слоёвчуть сложнее, нужен LVM-инструментарий

Итоги

  • LVM — слой между дисками и ФС: PV (диск/раздел) → VG (пул) → LV (гибкий том под файловую систему).
  • Том расширяется на работающей системе: lvextend + resize2fs (или lvextend -r); кончился пул — добавьте PV через vgextend.
  • Снапшоты (lvcreate -s) — мгновенные copy-on-write «фотографии» для безопасных обновлений и согласованных бэкапов, но не замена резервной копии.
  • В сравнении с обычными разделами LVM даёт гибкость размеров, объединение дисков и снапшоты ценой небольшого усложнения.
Проверьте себя
1. Раздел /var под базой данных заполнился, а в группе томов vg_data ещё есть свободное место. Как правильно увеличить том lv_db на работающем сервере?
AДостаточно выполнить lvextend -L +20G — файловая система расширится сама
BСначала lvextend (увеличить том), затем resize2fs (растянуть файловую систему под новый размер)
CНужно размонтировать раздел, удалить том и создать заново большего размера
DТолько перезагрузка с переразбивкой диска в установщике
2. Что из перечисленного НЕВЕРНО про снапшоты LVM?
AСнапшот создаётся мгновенно и хранит только изменившиеся блоки (copy-on-write)
BСнапшот можно использовать для отката тома к прежнему состоянию через lvconvert --merge
CСнапшот — полноценная резервная копия: если физический диск выйдет из строя, данные восстановятся из снапшота
DПереполнение снапшота делает его недействительным, поэтому его не держат бесконечно долго