Настройка и управление LVM разделами в Linux
LVM (Logical Volume Manager) – подсистема операционных систем Linux, позволяющая использовать разные области физического жесткого диска или разных жестких дисков как один логический том. LVM встроена в ядро Linux и реализуется на базе device mapper.
Главные преимущества LVM – высокий уровень абстракции от физических дисков, гибкость и масштабируемость. Вы можете на лету изменять размер логического тома, добавлять (и удалять) новые диски. Для LVM томов поддерживается зекалирование, снапшоты (persistent snapshot) и striping (расслоение данных между несколькими дисками с целью увеличения производительности).
В данной статье мы рассмотрим использование LVM разделов на примере Linux CentOS 8, покажем процесс объединения двух дисков в одну группу LVM, посмотрим как создавать группы, тома, монтировать, расширять и уменьшать размер LVM разделов.
Прежде всего нужно разобраться с уровнями дисковых абстракций LVM.
- Physical Volume (PV) – физический уровень. Физические диски инициализируются для использования в LVM.
- Volume Group (VG) – уровень группы томов. Инициализированные диски объединяются в логические группы с именем.
- Logical Volume (LV) — создается логический том на группе томов, на котором размещается файловая система и данные.

Содержимое
Установка утилиты lvm2
Чтобы начать работу с LVM, нужно установить утилиту lvm2. Выполним следующие команды:
1
|
apt-get install lvm2 — для Ubuntu, Mint, Debian
|
1
|
yum install lvm2 – для Centos, Red-Hat, Fedora
|

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

Как вы видите, у меня доступны два диска
При настройке LVM на своем виртуальном или физическом сервере, используйте свою маркировку дисков.
Чтобы диски были доступны для LVM, их нужно пометить (инициализировать) утилитой pvcreate:
1
|
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. Чтобы объединить ранее помеченные диски, воспользуемся командой:
1
|
# vgcreate test /dev/vdb /dev/vdc
|
1
|
Volume group "test" successfully created
|
Чтобы проверить результат введите vgdisplay:

Как видим, диски объединены в группу test и VG Size показывает общий размер дисков.
Разберем информацию из листинга команды vgdisplay:
- VG Name – группа томов, в которую данный диск входит.
- Format – версия подсистемы lvm, которая используется для создание группы (в нашем случае версия 2)
- Metadata Areas – область метаданных
- VG Access – уровень доступа к группе логических томов
- VG Size – общий объем дисков, которые входят в группу
- PE Size — размер физического фрагмента
- Alloc PE / Size – распределенное пространство(количество и объем фрагментов)
- VG UUID – идентификатор группы
После того, как мы создали общую группу для дисков, мы можем создать логический том на этой группы. При создании тома, используется команда lvcreate.
Чтобы в вашей группе создать логический том определенного размера и именем, используйте команду:
1
|
# lvcreate -L 5G test
|
1
|
Logical volume "lvol0" created.
|
Как видим из листинга, в группе test был создан логический том с именем lvol0 и размером 5G.
Если вы хотите сами задать имя, используйте флаг -n:
1
|
# lvcreate -l 5G -n test1 test
|
1
|
Logical volume "test1" created
|
Несколько примеров для создания логических томов с разными размерами:
1
|
lvcreate -l 40%VG test
|
– 40% от дискового пространства группы test
1
|
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 томе:
1
|
mkfs.ext4 /dev/test/test1
|

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

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

После чего примонтировать том можно будет через mount -a:
1
2
|
# mount -a
# df -h
|
1
2
3
4
5
6
7
8
9
|
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:

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

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

Уменьшим раздел файловой системы на 4 Гб:
1
|
# resize2fs /dev/test/test1 4G
|
1
2
3
|
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/test/test1 to 1048576 (4k) blocks.
The filesystem on /dev/test/test1 is now 1048576 blocks long.
|
1
|
lvreduce -L-4G /dev/test/test1
|
1
2
3
4
5
|
WARNING: Reducing active logical volume to 6.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce test/test1? [y/n]: y
Size of logical volume test/test1 changed from 10.00 GiB (2560 extents) to 6.00 GiB (1536 extents).
Logical volume test/test1 successfully resized.
|
Теперь уменьшим размер самого LVM тома:
1
|
lvreduce -L-4G /dev/test/test1
|
После чего, нужно примонтировать том обратно и проверить текущий размер:

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

Чтобы удалить группу логических томов, используйте:
1
|
# vgremove test
|
1
|
Volume group "test" successfully removed
|
Убрать метки с LVM дисков:
1
|
# pvremove /dev/vdb /dev/vdc
|
1
2
|
Labels on physical volume "/dev/vdb" successfully wiped.
Labels on physical volume "/dev/vdc" successfully wiped.
|
Создание зеркальных томов 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.