LVM (Logical Volume Manager) — это подсистема операционных систем Linux, которая позволяет использовать различные области жесткого диска или различные жесткие диски как один логический том. LVM встроен в ядро Linux и реализован с помощью устройства маппера.
Основными преимуществами LVM являются высокий уровень абстракции от жестких дисков, гибкость и масштабируемость. Вы можете изменять размер логического тома во время работы, а также добавлять (и удалять) новые диски. Для томов LVM поддерживаются зеркальное отображение, снимки (постоянные снимки) и полосное размещение (распределение данных между несколькими дисками для повышения производительности).
В этой статье мы рассмотрим использование разделов LVM на примере Linux CentOS 8, покажем процесс объединения двух дисков в одну группу LVM, узнаем, как создавать группы, тома, монтировать, расширять и уменьшать размер разделов LVM.
Сначала необходимо понять уровни абстракции диска LVM.
Физический том (PV) — физический уровень. Физические диски инициализируются для использования в LVM.
Группа томов (VG) — уровень группы томов. Инициализированные диски объединяются в логические группы с именем.
Логический том (LV) — логический том создается на группе томов, которая содержит файловую систему и данные.
т 
Установка утилиты lvm2
Чтобы начать работу с LVM, необходимо установить утилиту lvm2. Выполним следующие команды:
apt-get install lvm2 — для Ubuntu, Mint, Debian
yum install lvm2 — для Centos, Red Hat, Fedora

В разных версиях Linux отличается только способ установки утилиты lvm2 (установка с помощью yum/ dnf или apt-get), дальнейшие команды для работы с LVM одинаковы.
Создание разделов LVM
Итак, у нас есть виртуальная машина KVM, к которой подключены два дополнительных диска. Проверьте, доступны ли они в системе, с помощью команды:
fdisk -l

Как видите, у меня есть два доступных диска /dev/vdb и /dev/vdc .
При настройке LVM на вашем виртуальном или физическом сервере используйте метки дисков.
Чтобы диски были доступны для LVM, их необходимо пометить (инициализировать) с помощью утилиты pvcreate:
pvcreate /dev/vdb /dev/vdc

Теперь, чтобы убедиться, что эти диски можно использовать для LVM, выполните команду pvdisplay:

Как видите, отображаются оба диска. Проанализируем информацию из вывода команды:
- PV Name — название диска или раздела
- VG Name — группа томов, к которой принадлежит этот диск (мы еще не создали группу)
- PV Size — размер диска или размер
- Allocatable — распределение по группам. В нашем случае распределения не было, поэтому указано NO
- PE Size — размер физического фрагмента. Если диск не добавлен ни к одной группе, значение всегда будет 0
- Total PE — количество физических фрагментов
- Free PE — количество свободных физических фрагментов
- Allocated PE — распределенные фрагменты
PV UUID — идентификатор раздела
С помощью команды pvscan можно сканировать диски на наличие PV.
Следующим шагом является создание группы томов. Для создания групп томов используется команда vgcreate. Чтобы объединить ранее обозначенные диски, используйте команду:
# vgcreate test /dev/vdb /dev/vdc
Группа томов «test» успешно создана
Чтобы проверить результат, введите vgdisplay:

Как видите, диски объединены в группу test, а VG Size показывает общий размер дисков.
Давайте проанализируем информацию из вывода команды vgdisplay:
- VG Name — группа томов, к которой принадлежит этот диск.
- Format — версия подсистемы lvm, которая используется для создания группы (в нашем случае версия 2)
- Metadata Areas — область метаданных
- VG Access — уровень доступа к группе логических томов
- VG Size — общий объем дисков, входящих в группу
- PE Size — размер физического фрагмента
- Alloc PE / Size — выделенное пространство (количество и объем фрагментов)
- VG UUID — идентификатор группы
После создания общей группы для дисков мы можем создать логический том в этой группе. Для создания тома используется команда lvcreate.
Чтобы создать логический том определенного размера и имени в вашей группе, используйте команду:
# lvcreate -L 5G test
Логический том «lvol0» создан.
Как видно из вывода, в группе test создан логический том с именем lvol0 и размером 5G.
Если вы хотите самостоятельно установить имя, используйте флаг -n:
# lvcreate -L 5G -n test1 test
Логический том «test1» создан
Некоторые примеры создания логических томов разного размера:
lvcreate -l 40%VG test – 40% дискового пространства группы test
lvcreate -l 100%FREE test – использование всего свободного пространства группы test
Чтобы отобразить информацию о логическом томе, используйте lvdisplay:

Давайте посмотрим на список этой команды:
- LV Path — путь к устройству логического тома (диск или раздел)
- LV Name — имя логического тома
- VG Name — имя группы томов
- LV UUID — идентификатор логического тома
- LV Write Access — уровень доступа к логическому тому
- LV Creation host, time — информация о хосте, дате создания логического тома
- LV Size — размер диска, доступный для использования логическим томом
- Current LE — количество логических фрагментов
LVM: создание файловой системы, монтирование логического тома
Чтобы создать файловую систему на логическом томе, используйте утилиту mkfs:
Создайте файловую систему ext4 на томе LVM:
mkfs.ext4 /dev/test/test1

Файловая система была создана без ошибок.
Теперь создадим тестовый каталог и подключим логический том к этому каталогу:
# mkdir /var/www/home
# mount /dev/test/test1 /var/www/home/

Как видите, все прошло без ошибок, и теперь каталог /var/www/home существует как отдельный раздел.
Чтобы логический том монтировался при загрузке системы, нужно добавить его в fstab и назначить каталог для монтирования.
Откроем файл:
nano /etc/fstab
И добавим в него следующую информацию:
/dev/test/test1 /var/www/home ext4 defaults 1 2

После этого вы можете смонтировать том с помощью команды mount -a:
# mount -a
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 6.7M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda2 20G 1.3G 19G 7% /
/dev/vda1 488M 100M 353M 23% /boot
tmpfs 100M 0 100M 0% /run/user/0
/dev/mapper/test-test1 4.8G 20M 4.6G 1% /var/www/home
Чтобы проверить общую информацию о дисках, разделах и томах, введите команду lsblk:

Как видите, отображается созданный нами том и указывается каталог, к которому он подключен.
Команда lvmdiskscan позволяет сканировать доступные диски, показывая их размер и принадлежность к LVM.
Расширение логического тома LVM
Чтобы добавить дополнительный диск в группу томов, нужно использовать уже знакомую схему:
pvcreate /dev/ourdisk — инициализация диска для lvm
vgextend test /dev/ourdisk — добавление диска в группу томов
Чтобы расширить логический том, используйте следующую схему:
lvextend -L10G /dev/test/test1
Таким образом вы расширите раздел на 10 ГБ.

Еще несколько примеров включения раздела LVM:
lvextend -L+10G /dev/test/test1 — добавить 10 ГБ к вашему тому
lvextend -l +100%FREE /dev/test/test1- распределить все нераспределенное пространство в группе test
Остается увеличить раздел файловой системы:
resize2fs /dev/test/test1 —для ext4
xfs_growfs /dev/test/test1 — для xfs
Уменьшение объемов LVM
LVM позволяет уменьшить размер объема. Но для безопасности уменьшения размера раздела его необходимо отключить.
Снимим объем с каталога:
umount /var/www/home/
Проверим диск:
e2fsck -fy /dev/test/test1

Уменьшим раздел файловой системы на 4 ГБ:
# resize2fs /dev/test/test1 4G
resize2fs 1.42.9 (28-Dec-2013)
Изменение размера файловой системы на /dev/test/test1 до 1048576 (4k) блоков.
Файловая система на /dev/test/test1 теперь имеет размер 1048576 блоков.
# lvreduce -L-4G /dev/test/test1
ПРЕДУПРЕЖДЕНИЕ: Уменьшение активного логического тома до 6,00 Гб.
ЭТО МОЖЕТ УНИЧТОЖИТЬ ВАШИ ДАННЫЕ (файловую систему и т. д.).
Вы действительно хотите уменьшить test/test1? [y/n]: y
Размер логического тома test/test1 изменен с 10,00 Гб (2560 расширений) до 6,00 Гб (1536 расширений).
Логический том test/test1 успешно изменен.
Теперь уменьшим размер самого тома LVM:
lvreduce -L-4G /dev/test/test1
После этого нужно снова смонтировать том и проверить его текущий размер:

Как видите, размер уменьшился до 4 ГБ.
Удаление групп и томов LVM
Чтобы удалить тома LVM, воспользуйтесь командой lvremove:
lvremove /dev/test/test1

Чтобы удалить логическую группу томов, воспользуйтесь командой:
# vgremove test
Группа томов «test» успешно удалена
Удаление меток с дисков LVM:
# pvremove /dev/vdb /dev/vdc
Метки на физическом томе «/dev/vdb» успешно удалены.
Метки на физическом томе «/dev/vdc» успешно удалены.
Создание зеркальных томов LVM
LVM позволяет создавать зеркальные тома для повышения отказоустойчивости системы хранения данных. В зеркале LVM данные одновременно хранятся на двух (или более) физических дисках (аналогично RAID-1). Процедура создания зеркального тома в LVM.
- Инициализация дисков: pvcreate /dev/sd{b,c}
- Создание группы LVM: vgcreate mirror1 /dev/sd{b,c}
- Создание зеркального тома LVM: lvcreate -L 5g -m1 -n lvMirr1 VGmirror1
Инструменты LVM очень просты в использовании, с их помощью вы можете легко управлять томами, разрезать их на необходимые размеры и легко использовать в соответствии со своими потребностями. В этой статье я постарался охватить все основные моменты работы с LVM.
VPS Linux
VPS-хостинг с виртуализацией KVM