Home » Введение в LVM: понятия, терминология и операции
Введение в LVM: понятия, терминология и операции

Введение в 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-серверов. Главное — не бояться экспериментировать и всегда иметь план отката!


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

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

Leave a reply

Your email address will not be published. Required fields are marked