- Home »

Введение в LVM: понятия, терминология и операции
Если ты когда-нибудь сталкивался с тем, что место на диске закончилось в самый неподходящий момент, или пытался расширить файловую систему без даунтайма, то эта статья для тебя. LVM (Logical Volume Manager) — это мощный инструмент управления дисковым пространством в Linux, который решает кучу проблем с которыми сталкивается любой сисадмин. Забудь про мучения с fdisk и попытки переразметить диски на живой системе — LVM даёт тебе гибкость управления дисками, которая граничит с магией.
Сегодня разберём как LVM работает под капотом, пошагово настроим его на сервере и разберём реальные кейсы использования. Покажу команды, которые реально используются в продакшене, и расскажу про подводные камни, на которые может наткнуться новичок. Если ты арендуешь VPS или выделенный сервер, то понимание LVM сэкономит тебе кучу времени и нервов.
Что такое LVM и зачем он нужен
LVM — это прослойка абстракции между физическими дисками и файловыми системами. Представь себе конструктор Lego для дисков: ты можешь брать куски дискового пространства с разных физических дисков и собирать из них логические тома любого размера.
Основные преимущества LVM:
- Динамическое изменение размера — расширяй и сжимай разделы на лету
- Снепшоты — мгновенные снимки состояния системы
- Объединение дисков — создавай один большой том из нескольких маленьких дисков
- Миграция данных — перемещай данные между дисками без остановки сервисов
- Striping и mirroring — аналог RAID, но на программном уровне
Базовая терминология LVM
Прежде чем лезть в команды, разберём основные понятия. LVM использует трёхуровневую архитектуру:
- Physical Volume (PV) — физический том. Это диск или раздел диска, подготовленный для использования в LVM
- Volume Group (VG) — группа томов. Пул дискового пространства, объединяющий несколько физических томов
- Logical Volume (LV) — логический том. Виртуальный раздел, который создаётся из пространства группы томов
- Physical Extent (PE) — физический экстент. Минимальная единица распределения пространства (обычно 4MB)
- Logical Extent (LE) — логический экстент. Соответствует физическому экстенту в логическом томе
Схема выглядит так: Физические диски → Physical Volumes → Volume Group → Logical Volumes → Файловые системы
Пошаговая настройка LVM с нуля
Допустим, у нас есть свежий сервер с тремя дисками: /dev/sdb, /dev/sdc, /dev/sdd. Настроим LVM пошагово.
Шаг 1: Установка LVM
# На Ubuntu/Debian
sudo apt-get update
sudo apt-get install lvm2
# На CentOS/RHEL
sudo yum install lvm2
# или для новых версий
sudo dnf install lvm2
Шаг 2: Создание физических томов
# Создаём Physical Volumes
sudo pvcreate /dev/sdb /dev/sdc /dev/sdd
# Проверяем результат
sudo pvdisplay
sudo pvs # краткий вывод
Шаг 3: Создание группы томов
# Создаём Volume Group с именем "data_vg"
sudo vgcreate data_vg /dev/sdb /dev/sdc /dev/sdd
# Проверяем
sudo vgdisplay
sudo vgs # краткий вывод
Шаг 4: Создание логических томов
# Создаём логический том размером 100GB
sudo lvcreate -L 100G -n web_data data_vg
# Или используем проценты от общего объёма VG
sudo lvcreate -l 50%VG -n database data_vg
# Проверяем
sudo lvdisplay
sudo lvs # краткий вывод
Шаг 5: Создание файловой системы
# Создаём файловую систему ext4
sudo mkfs.ext4 /dev/data_vg/web_data
sudo mkfs.ext4 /dev/data_vg/database
# Монтируем
sudo mkdir -p /var/www /var/lib/mysql
sudo mount /dev/data_vg/web_data /var/www
sudo mount /dev/data_vg/database /var/lib/mysql
# Добавляем в /etc/fstab для автомонтирования
echo '/dev/data_vg/web_data /var/www ext4 defaults 0 2' | sudo tee -a /etc/fstab
echo '/dev/data_vg/database /var/lib/mysql ext4 defaults 0 2' | sudo tee -a /etc/fstab
Практические операции с LVM
Расширение логического тома
Самая частая операция — расширение тома когда место закончилось:
# Расширяем логический том на 50GB
sudo lvextend -L +50G /dev/data_vg/web_data
# Или до определённого размера
sudo lvextend -L 200G /dev/data_vg/web_data
# Расширяем файловую систему
sudo resize2fs /dev/data_vg/web_data # для ext2/3/4
sudo xfs_growfs /var/www # для XFS
# Всё в одной команде (с автоматическим расширением FS)
sudo lvextend -L +50G -r /dev/data_vg/web_data
Добавление нового диска в группу
# Подключили новый диск /dev/sde
sudo pvcreate /dev/sde
sudo vgextend data_vg /dev/sde
# Проверяем доступное место
sudo vgs
Создание и управление снепшотами
# Создаём снепшот перед обновлением
sudo lvcreate -L 10G -s -n web_data_snapshot /dev/data_vg/web_data
# Монтируем снепшот для проверки
sudo mkdir /mnt/snapshot
sudo mount /dev/data_vg/web_data_snapshot /mnt/snapshot
# Если что-то пошло не так, откатываемся
sudo umount /var/www
sudo lvconvert --merge /dev/data_vg/web_data_snapshot
# Удаляем снепшот если всё ОК
sudo lvremove /dev/data_vg/web_data_snapshot
Реальные кейсы и примеры использования
Кейс 1: Миграция данных без даунтайма
Представь ситуацию: у тебя есть старый медленный диск, и ты хочешь переехать на SSD. С LVM это делается без остановки сервисов:
# Добавляем новый SSD в группу
sudo pvcreate /dev/nvme0n1
sudo vgextend data_vg /dev/nvme0n1
# Перемещаем данные со старого диска
sudo pvmove /dev/sdb /dev/nvme0n1
# Удаляем старый диск из группы
sudo vgreduce data_vg /dev/sdb
sudo pvremove /dev/sdb
Кейс 2: Настройка для веб-сервера
Типичная конфигурация для веб-сервера с разделением под разные задачи:
# Создаём специализированные тома
sudo lvcreate -L 50G -n www_data data_vg # для сайтов
sudo lvcreate -L 100G -n mysql_data data_vg # для MySQL
sudo lvcreate -L 20G -n logs data_vg # для логов
sudo lvcreate -L 10G -n backups data_vg # для бекапов
# Настраиваем файловые системы
sudo mkfs.ext4 /dev/data_vg/www_data
sudo mkfs.ext4 /dev/data_vg/mysql_data
sudo mkfs.ext4 /dev/data_vg/logs
sudo mkfs.ext4 /dev/data_vg/backups
Кейс 3: Monitoring и алерты
Полезный скрипт для мониторинга заполненности LVM:
#!/bin/bash
# /usr/local/bin/lvm_monitor.sh
THRESHOLD=80
# Проверяем заполненность логических томов
lvs --noheadings --units G -o lv_name,lv_size,data_percent | while read lv size percent; do
if [[ "${percent%.*}" -gt $THRESHOLD ]]; then
echo "WARNING: LV $lv is ${percent}% full (${size})"
# Здесь можно добавить отправку в Slack/Telegram
fi
done
# Проверяем состояние группы томов
vgs --noheadings -o vg_name,vg_free,vg_size | while read vg free size; do
free_gb=${free%.*}
if [[ $free_gb -lt 10 ]]; then
echo "WARNING: VG $vg has only ${free} free space"
fi
done
Сравнение с альтернативными решениями
Решение | Гибкость | Производительность | Сложность | Снепшоты | Онлайн resize |
---|---|---|---|---|---|
LVM | Высокая | Хорошая | Средняя | Да | Да |
ZFS | Очень высокая | Отличная | Высокая | Да | Да |
Btrfs | Высокая | Хорошая | Средняя | Да | Да |
Традиционные разделы | Низкая | Отличная | Низкая | Нет | Ограничено |
Продвинутые возможности и интеграция
Интеграция с Docker
LVM отлично работает с Docker, особенно для управления storage driver:
# Создаём том специально для Docker
sudo lvcreate -L 200G -n docker_data data_vg
sudo mkfs.ext4 /dev/data_vg/docker_data
sudo mount /dev/data_vg/docker_data /var/lib/docker
# Настраиваем Docker для использования devicemapper с LVM
sudo tee /etc/docker/daemon.json > /dev/null <
Автоматизация с Ansible
Пример Ansible playbook для настройки LVM:
---
- name: Setup LVM
hosts: servers
become: yes
tasks:
- name: Install LVM2
package:
name: lvm2
state: present
- name: Create Physical Volumes
command: pvcreate {{ item }}
loop:
- /dev/sdb
- /dev/sdc
- name: Create Volume Group
command: vgcreate data_vg /dev/sdb /dev/sdc
- name: Create Logical Volumes
lvol:
vg: data_vg
lv: "{{ item.name }}"
size: "{{ item.size }}"
loop:
- { name: 'web_data', size: '100G' }
- { name: 'database', size: '200G' }
Подводные камни и как их избежать
Частые ошибки новичков
- Забыли расширить файловую систему после расширения LV — данные не станут доступными
- Снепшоты переполнились — может привести к недоступности основного тома
- Удалили не тот том — всегда дважды проверяй команды с lvremove
- Не настроили мониторинг — LVM может “молча” деградировать при проблемах с дисками
Best practices
- Всегда оставляй свободное место в VG (минимум 10-15%)
- Используй осмысленные имена для VG и LV
- Регулярно делай бекапы конфигурации LVM:
vgcfgbackup
- Мониторь состояние дисков через SMART
- Тестируй процедуры восстановления на тестовых серверах
Полезные команды для диагностики
# Полная информация о LVM
sudo lvmdiskscan
sudo pvdisplay -v
sudo vgdisplay -v
sudo lvdisplay -v
# Проверка целостности
sudo vgck data_vg
sudo fsck /dev/data_vg/web_data
# Активация/деактивация томов
sudo vgchange -ay data_vg # активация
sudo vgchange -an data_vg # деактивация
# Просмотр истории операций
sudo journalctl -u lvm2-monitor
# Бекап конфигурации
sudo vgcfgbackup
sudo vgcfgrestore --list data_vg
Интересные факты и нестандартное использование
LVM может делать намного больше, чем просто управление дисками:
- Thin provisioning — создавай тома больше доступного места (как overcommit в виртуализации)
- Cache volumes — используй SSD как кеш для медленных HDD
- RAID в LVM — создавай RAID-массивы средствами LVM без mdadm
- Шифрование на лету — интеграция с LUKS для прозрачного шифрования
# Пример создания thin pool
sudo lvcreate -L 100G --thinpool thin_pool data_vg
sudo lvcreate -V 500G --thin data_vg/thin_pool -n thin_volume
# Создание RAID1 в LVM
sudo lvcreate --type raid1 -L 100G -m 1 -n mirror_lv data_vg
# Cache том (SSD как кеш для HDD)
sudo lvcreate -L 20G -n cache_pool data_vg /dev/nvme0n1
sudo lvcreate -L 1G -n cache_meta data_vg /dev/nvme0n1
sudo lvconvert --type cache-pool --poolmetadata cache_meta data_vg/cache_pool
sudo lvconvert --type cache --cachepool cache_pool data_vg/slow_data
Заключение и рекомендации
LVM — это must-have инструмент для любого сисадмина, который серьёзно относится к управлению дисковым пространством. Да, изначально может показаться сложным, но время потраченное на изучение окупится в первой же критической ситуации.
Когда использовать LVM:
- На серверах с динамически изменяющимися требованиями к дисковому пространству
- Когда нужна гибкость в управлении дисками
- Для реализации продвинутых сценариев бекапирования через снепшоты
- В средах с частыми изменениями железа
Когда можно обойтись без LVM:
- На простых серверах с фиксированными требованиями
- Когда критична каждая миллисекунда производительности
- В контейнерных средах где диски управляются оркестратором
Полезные ссылки для дальнейшего изучения:
Начинай с простых операций на тестовых серверах, постепенно переходя к более сложным сценариям. LVM — это инструмент, который станет твоим верным спутником в администрировании Linux-серверов. Главное — не бояться экспериментировать и всегда иметь план отката!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.