Перейти к содержанию

LVM

TL;DR

  • PV (Physical Volume) — физический диск/раздел
  • VG (Volume Group) — объединение PV в пул
  • LV (Logical Volume) — виртуальный раздел из VG
  • Можно менять размер LV на лету, делать снапшоты

Быстрый старт

Добавить новый диск и создать том:

Bash
pvcreate /dev/sdb
vgcreate data_vg /dev/sdb
lvcreate -L 50G -n app_lv data_vg
mkfs.ext4 /dev/data_vg/app_lv
mount /dev/data_vg/app_lv /mnt/app

Команды

Создание

Bash
pvcreate /dev/sdX
Инициализировать диск как PV.

Bash
vgcreate my_vg /dev/sdb /dev/sdc
Создать VG из нескольких PV.

Bash
lvcreate -L 10G -n my_lv my_vg
Создать LV на 10 ГБ.

Расширение

Bash
lvextend -L +5G /dev/my_vg/my_lv
resize2fs /dev/my_vg/my_lv
Добавить 5 ГБ к LV и расширить ФС (ext4).

Сокращение

Bash
umount /dev/my_vg/my_lv
e2fsck -f /dev/my_vg/my_lv
resize2fs /dev/my_vg/my_lv 15G
lvreduce -L 15G /dev/my_vg/my_lv
mount /dev/my_vg/my_lv /mnt
Сначала уменьшить ФС, потом LV. Иначе потеря данных.

Снапшоты

Bash
lvcreate -L 5G -s -n my_lv_snap /dev/my_vg/my_lv
Снапшот для бэкапа. Размер — под изменения на время жизни снапшота.

Просмотр

Bash
pvs / pvdisplay
vgs / vgdisplay
lvs / lvdisplay
Короткий / подробный вывод.

Удаление

Bash
lvremove /dev/my_vg/my_lv

Подводные камни

  • lvreduce без предварительного resize2fs = потеря данных
  • Снапшот переполнится если изменений больше чем его размер — станет невалидным
  • Для XFS используй xfs_growfs вместо resize2fs