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

Термины и базовая проверка

Физический том (PV) — диск или раздел, отданный под LVM. Группа томов (VG) — пул свободного места. Логический том (LV) — виртуальный раздел, на котором создаётся файловая система. Посмотреть текущую картину можно тремя командами; они не меняют ничего и безопасны для продакшена.

sudo apt install lvm2
sudo pvs -a
sudo vgs
sudo lvs -a -o+devices

Если в выводе pvs есть свободные устройства без группы, их можно добавить в пул. Перед любой операцией сохраните вывод vgs и lvs — это поможет восстановить картину, если что-то пойдёт не так.

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

Разметка нового диска занимает минуты. Важно выбрать файловую систему осознанно: ext4 проще, XFS лучше работает с большими файлами и поддерживает рост на лету. Обе поддерживают онлайн-расширение, но с уменьшением всё сложнее.

sudo pvcreate /dev/sdb
sudo vgcreate vg_data /dev/sdb
sudo lvcreate -n lv_app -l 100%FREE vg_data
sudo mkfs.ext4 /dev/vg_data/lv_app
sudo mount /dev/vg_data/lv_app /srv/app

Для постоянного монтирования используйте UUID или путь /dev/vg_data/lv_app. Второй вариант читаемее, но требует, чтобы LVM успел активировать том до монтирования; в initramfs это обычно уже настроено. После правки /etc/fstab обязательно выполните mount -a и только потом перезагружайтесь.

Расширение тома и файловой системы

Ключ -r у lvextend автоматически вызывает resize2fs или xfs_growfs, поэтому отдельная команда не нужна. Свободное место берём из группы томов, а не из «соседнего раздела».

sudo lvextend -r -l +100%FREE /dev/vg_data/lv_app
df -h /srv/app
sudo lvs -o lv_name,lv_size,seg_pe_ranges vg_data

Если свободного места в группе нет, сначала расширяем пул новым диском. Уменьшение для XFS недоступно, а для ext4 требует размонтирования. Проще создать новый том и перенести данные.

Добавление диска и перенос данных

Новый диск расширяет группу томов, после чего данные можно перенести на него без остановки приложения. pvmove копирует экстенты в работающем режиме; на время операции диск-источник лучше не трогать.

sudo pvcreate /dev/sdc
sudo vgextend vg_data /dev/sdc
sudo pvmove /dev/sdb /dev/sdc
sudo vgreduce vg_data /dev/sdb

После pvmove старый диск свободен, но ещё помечен как PV. Команда vgreduce убирает его из группы, а pvremove стирает метаданные. Если переносится корневой том, проверьте, что загрузчик и initramfs видят новый диск, и не удаляйте старый до успешной перезагрузки.

Снапшоты: возможности и ловушки

Снапшот LVM — это копия «на момент», которая хранит только изменённые блоки. Создаётся мгновенно и не требует места, равного тому. Но это не резервная копия: при заполнении области COW снимок становится недействительным, а данные на нём — несогласованными.

sudo lvcreate -L 20G -s -n snap_app /dev/vg_data/lv_app
sudo mkdir -p /mnt/snap
sudo mount -o ro /dev/vg_data/snap_app /mnt/snap
sudo lvs -o lv_name,lv_size,data_percent vg_data

Для согласованного снимка базы данных сначала замораживаем файловую систему, затем создаём снимок и размораживаем. Между fsfreeze и lvcreate не должно быть долгих пауз: приложение в это время не пишет.

sudo fsfreeze -f /srv/app
sudo lvcreate -L 10G -s -n snap_db /dev/vg_data/lv_app
sudo fsfreeze -u /srv/app
sudo lvs -o lv_name,lv_size,data_percent vg_data

Откат выполняется слиянием снимка с исходным томом. Том должен быть размонтирован, а после слияния — смонтирован заново. Все изменения, сделанные после снимка, будут потеряны, поэтому операцию выполняют осознанно.

sudo umount /srv/app
sudo lvconvert --merge /dev/vg_data/snap_app
sudo mount /dev/vg_data/lv_app /srv/app
sudo lvs -o lv_name,lv_size,data_percent vg_data

Тонкие тома и контроль заполнения

Thin provisioning позволяет выдать приложению 500 ГБ, реально занимая десятки. Это удобно для виртуальных машин, но требует мониторинга: переполнение тонкого пула приводит к ошибкам записи сразу у всех томов. Следите за data_percent и metadata_percent, а автоматическое расширение настройте в /etc/lvm/lvm.conf.

sudo lvcreate --type thin-pool -L 100G -n pool vg_data
sudo lvcreate --type thin -V 500G -n thin_app --thinpool pool vg_data
sudo lvs -a -o lv_name,lv_size,data_percent,metadata_percent vg_data
sudo dmsetup status | grep vg_data

Пороги автоматического расширения задаются в секции activation файла /etc/lvm/lvm.conf: thin_pool_autoextend_threshold = 80 и thin_pool_autoextend_percent = 20. Мониторинг это не отменяет, но даёт запас времени.

sudo lvs -a -o lv_name,data_percent,metadata_percent vg_data
sudo lvmconfig --type default activation/thin_pool_autoextend_threshold
sudo dmsetup status | grep thin
sudo journalctl -u lvm2-monitor --since today

Диагностика проблем

  • pvs -a показывает диски без метки LVM и подозрительные размеры.
  • journalctl -u lvm2-monitor фиксирует события dmeventd и проблемы с тонкими пулами.
  • lsblk -f помогает увидеть, какая файловая система смонтирована и по какому пути.
  • Ошибка «device not found» при загрузке чаще всего означает, что том не попал в initramfs; помогает update-initramfs -u.
lsblk -f
sudo pvs -a -o+pv_used,pv_free
sudo journalctl -u lvm2-monitor --since "1 hour ago"
sudo update-initramfs -u
Задача Команда
Расширить lvextend -r
Перенести pvmove
Снять копию lvcreate -s

Итог

LVM даёт гибкость, которой не хватает классическим разделам: расширение без простоя, перенос данных между дисками и быстрые снимки для тестов и обновлений. Но гибкость требует дисциплины: следите за свободным местом в группе, не считайте снапшот резервной копией, контролируйте заполнение тонких пулов и проверяйте fstab до перезагрузки. Эти привычки превращают LVM из источника аварий в надёжный инструмент повседневной работы.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте