LVM в Linux: создание, расширение и уменьшение логических томов без остановки сервисов

Зачем нужен LVM вместо обычных разделов​


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

  • Физический том (PV) — целый диск или раздел, отданный под управление LVM.
  • Группа томов (VG) — пул пространства, собранный из одного или нескольких PV.
  • Логический том (LV) — виртуальный «раздел» внутри VG, на котором живёт файловая система.

Такая схема позволяет расширять тома на лету, переносить данные между дисками и делать снапшоты без остановки сервисов.

Установка инструментов​


Пакет lvm2 присутствует в большинстве дистрибутивов по умолчанию. Если его нет:

Bash:
## Debian / Ubuntu
sudo apt install lvm2

## RHEL / CentOS / Fedora
sudo dnf install lvm2

После установки убедитесь, что демон активен:

Bash:
systemctl status lvm2-lvmpolld

Создание логического тома с нуля​


Шаг 1. Подготовка физического тома​


Добавьте новый диск (например, /dev/sdb) или используйте свободный раздел. Инициализируйте его как PV:

Bash:
sudo pvcreate /dev/sdb

Проверка:

Bash:
sudo pvs

Вывод покажет размер и свободное место нового PV.

Шаг 2. Создание группы томов​


Bash:
sudo vgcreate vg_data /dev/sdb

Здесь vg_data — произвольное имя группы. Если нужно объединить несколько дисков в один пул, перечислите их через пробел:

Bash:
sudo vgcreate vg_data /dev/sdb /dev/sdc

Шаг 3. Создание логического тома​


Bash:
sudo lvcreate -L 50G -n lv_app vg_data

Флаг -L задаёт размер, -n — имя. Том будет доступен как /dev/vg_data/lv_app или через символическую ссылку /dev/mapper/vg_data-lv_app.

Шаг 4. Файловая система и монтирование​


Bash:
sudo mkfs.ext4 /dev/vg_data/lv_app
sudo mkdir -p /mnt/app
sudo mount /dev/vg_data/lv_app /mnt/app

Для автоматического монтирования при загрузке добавьте строку в /etc/fstab:

Код:
/dev/vg_data/lv_app  /mnt/app  ext4  defaults  0  2

Расширение логического тома без остановки сервисов​


Расширение — самая частая операция с LVM. Она выполняется онлайн для ext4 и XFS.

Увеличение на конкретный размер​


Bash:
sudo lvextend -L +20G /dev/vg_data/lv_app

Использование всего свободного места в VG​


Bash:
sudo lvextend -l +100%FREE /dev/vg_data/lv_app

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


Для ext4:

Bash:
sudo resize2fs /dev/vg_data/lv_app

Для XFS:

Bash:
sudo xfs_growfs /mnt/app

Обратите внимание: xfs_growfs принимает точку монтирования, а не устройство.

Сокращение до одной команды​


Флаг -r у lvextend автоматически вызывает нужную утилиту расширения файловой системы:

Bash:
sudo lvextend -r -L +20G /dev/vg_data/lv_app

Это работает и для ext4, и для XFS.

Добавление нового диска в существующую VG​


Если свободное место в VG закончилось, добавьте ещё один физический том:

Bash:
sudo pvcreate /dev/sdc
sudo vgextend vg_data /dev/sdc
sudo lvextend -r -l +100%FREE /dev/vg_data/lv_app

Уменьшение логического тома​


Уменьшение — операция с повышенным риском. Порядок действий зависит от файловой системы.

ext4: уменьшение возможно​


Bash:
## 1. Размонтировать том
sudo umount /mnt/app

## 2. Проверить файловую систему (обязательно перед уменьшением)
sudo e2fsck -f /dev/vg_data/lv_app

## 3. Уменьшить файловую систему до 30G
sudo resize2fs /dev/vg_data/lv_app 30G

## 4. Уменьшить логический том до 30G
sudo lvreduce -L 30G /dev/vg_data/lv_app

Команда lvreduce запросит подтверждение. Чтобы избежать интерактивного запроса в скриптах, добавьте флаг -y, но только если вы уверены в размере.

XFS: уменьшение не поддерживается​


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

Типичная ошибка при уменьшении​


Если уменьшить LV раньше файловой системы, данные будут потеряны. Всегда сначала resize2fs, потом lvreduce. Обратный порядок приводит к обрезанию данных за пределами нового размера тома.

Диагностика и мониторинг​


Просмотр структуры LVM​


Bash:
## Физические тома
sudo pvs
sudo pvdisplay

## Группы томов
sudo vgs
sudo vgdisplay

## Логические тома
sudo lvs
sudo lvdisplay

Краткие команды (pvs, vgs, lvs) удобны для скриптов и быстрого обзора. Полные (pvdisplay, vgdisplay, lvdisplay) дают больше деталей.

Проверка свободного места в VG​


Bash:
sudo vgs -o vg_name,vg_size,vg_free

Если vg_free равен нулю, расширение невозможно без добавления нового PV.

Просмотр маппинга устройства​


Bash:
sudo dmsetup info vg_data-lv_app

Показывает, какие физические extent'ы и на каких дисках используются конкретным LV.

Снапшоты логических томов​


LVM поддерживает снапшоты на уровне блочного устройства. Это не замена бэкапу, но удобный способ получить консистентную копию перед рискованной операцией.

Bash:
sudo lvcreate -L 5G -s -n lv_app_snap /dev/vg_data/lv_app

Снапшот будет доступен как /dev/vg_data/lv_app_snap. Его можно смонтировать в режиме только для чтения и скопировать данные.

Размер снапшота определяет, сколько изменений он способен вместить. Если снапшот заполнится, он станет невалидным. Проверяйте заполнение через lvs:

Bash:
sudo lvs -o lv_name,snap_percent

Перенос данных между физическими томами​


Если нужно освободить диск из VG (например, для замены), используйте pvmove:

Bash:
sudo pvmove /dev/sdb /dev/sdc

Команда переносит все extent'ы с /dev/sdb на /dev/sdc онлайн, без размонтирования. После завершения диск можно вывести из группы:

Bash:
sudo vgreduce vg_data /dev/sdb
sudo pvremove /dev/sdb

pvmove работает медленно на больших объёмах и создаёт нагрузку на I/O. Планируйте операцию на период низкой нагрузки.

Типичные ошибки и их последствия​


ОшибкаПоследствиеКак избежать
lvreduce до resize2fsПотеря данныхВсегда уменьшать сначала ФС
Уменьшение XFSНевозможно, команда выдаст ошибкуИспользовать копирование на новый том
Снапшот слишком малого размераСнапшот становится невалиднымВыделять не менее 10–20% от размера LV
vgextend без pvcreateОшибка: устройство не является PVСначала pvcreate
Забытый fstab после создания LVТом не монтируется после перезагрузкиДобавить запись в /etc/fstab сразу

Проверка результата после операций​


После расширения убедитесь, что файловая система видит новый размер:

Bash:
df -h /mnt/app

После уменьшения проверьте целостность:

Bash:
sudo e2fsck -f /dev/vg_data/lv_app

После pvmove убедитесь, что на старом диске не осталось данных:

Bash:
sudo pvs -o+pv_used

Поле pv_used для освобождённого диска должно быть 0.

Ограничения, о которых стоит помнить​


  • LVM не обеспечивает отказоустойчивость. Это не RAID. При выходе диска из строя данные теряются, если нет зеркала или бэкапа.
  • Для зеркалирования внутри LVM существует lvcreate --type mirror или --type raid1, но это отдельная тема с собственными ограничениями по производительности.
  • Тонкие тома (thin provisioning) позволяют создавать LV больше физического пространства VG, но при переполнении пула том становится недоступным. Мониторинг заполнения пула обязателен.
  • При использовании LVM поверх LUKS порядок операций важен: сначала открывается LUKS-контейнер, затем работают с LVM внутри него.

Источники​


 
Назад
Верх Низ