LVM (Logical Volume Manager) — менеджер логических томов — это система, управляющая распределением дискового пространства на компьютере под управлением Linux. В отличие от использования таблицы разделов жесткого диска, LVM позволяем изменить размер логического диска, а также присвоить диску название более понятное человеку, чем традиционные /dev/sda, /dev/hda …
Содержание
Как работает LVM
LVM оперирует с 3мя сущностями:
Физический том (PV, Physical volume)
Физический том — это раздел на диске или весь диск, отданный под управление LVM. Физическим томом LVM могут быть диски программного и аппаратного RAID, которые, могут состоять из нескольких физических дисков. Физические тома входят в состав группы томов, которая затем разбивается на несколько логических томов LVM.
Группа томов (VG, Volume group)
Группа томов состоит из физических томов, объединяя их в одну единицу. Затем из дискового пространства группы томов выделяются логические тома, которые непосредственно используются системой.
Логический том (LV, Logical volume)
Логический том LVM — аналогичен разделу обычного диска. в не-LVM системе. Логический том форматируется в определенную файловую систему для использования. Физически данные, расположенные на одном логическом томе LVM, могут быть расположены на различных физических дисках и даже различных компьютерах, объединенных по сети.
- PE, Physical extent, физический экстент. Каждый физический том делится на порции данных, называющиеся физическими экстентами. Их размеры те же, что и у логических экстентов.
- LE, Logical extent, логический экстент. Каждый логический том делится на порции данных, называющиеся логическими экстентами. Размер логических экстентов не меняется в пределах группы томов.
Давайте теперь соединим все эти понятия в общую картину. Пусть у нас имеется группа томов VG00 с размером физического экстента 4Мб. В эту группу мы добавляем два раздела, /dev/hda1 и /dev/hdb1. Эти разделы становятся физическими томами, например PV1 и PV2 (символьные имена присваивает администратор, так что они могут быть более осмысленными). Физические тома делятся на 4-х мегабайтные порции данных, т.к. это размер физического экстента. Диски имеют разный размер: PV1 получается размером в 99 экстентов, а PV2 — размером в 248 экстентов. Теперь можно приступать к созданию логических томов, размером от 1 до 347 (248+99) экстентов. При создании логического тома, определяется отображение между логическими и физическими экстентами. Например, логический экстент 1 может отображаться в физический экстент 51 тома PV1. В этом случае, данные, записанные в первые 4Мб логического экстента 1, будут в действительности записаны в 51-й экстент тома PV1.
Администратор может выбрать алгоритм отображения логических экстентов в физические. На данный момент доступны два алгоритма:
1. Линейное отображение последовательно назначает набор физических экстентов области логического тома, т.е. LE 1 — 99 отображаются на PV1, а LE 100 — 347 — на PV2.
2. «Расслоенное» (striped) отображение разделяет порции данных логических экстентов на определенное количество физических томов. То есть:
1-я порция данных LE[1] -> PV1[1],
2-я порция данных LE[1] -> PV2[1],
3-я порция данных LE[1] -> PV3[1],
4-я порция данных LE[1] -> PV1[2], и т.д.
Похожая схема используется в работе RAID нулевого уровня. В некоторых ситуациях этот алгоритм отображения позволяет увеличить производительность логического тома. Однако он имеет значительное ограничение: логический том с данным отображением не может быть расширен за пределы физических томов, на которых он изначально и создавался.
Великолепная возможность, предоставляемая системой LVM — это «снапшоты». Они позволяют администратору создавать новые блочные устройства с точной копией логического тома, «замороженного» в какой-то момент времени. Обычно это используется в пакетных режимах. Например, при создании резервной копии системы. Однако при этом вам не будет нужно останавливать работающие задачи, меняющие данные на файловой системе. Когда необходимые процедуры будут выполнены, системный администратор может просто удалить устройство-«снапшот». Ниже мы рассмотрим работу с таким устройством.
Инициализация LVM
Как правило в современных дистрибутивах LVM может быть уже установлен и настроен. В таком случае вы сразу можете начинать его использовать. Если это не так, то перед началом нужно выполнить инициализацию LVM с помощью следующих команд:
%# vgscan %# vgchange -ay
Первая команда сканирует диски на предмет наличия групп томов, вторая активирует все найденные группы томов. Аналогично после завершения всех работ, связанных с LVM, нужно выполнить деактивацию групп:
%# vgchange -an
Первые две строки нужно поместить в скрипты автозагрузки, если их там нет, а последнюю можно дописать в скрипт shutdown.
Добавление в LVM физических дисков и разделов
Перед использованием диска или раздела в качестве физического тома для LVM его нужно инициализировать.
Для инициализации целого диска:
pvcreate /dev/hdb
Для инициализации раздела:
pvcreate /dev/hdb1
Эта команда создает в начале указанного диска или раздела описание физического тома, включающее дескриптор группы томов.
После инициализации физический том можно будет добавить в группу томов LVM.
Создание группы томов
Для создания группы томов LVM используется команда vgcreate
vgcreate vg-vmdisks /dev/md1 /dev/md3
Данная команда создаст новую группу томов с названием vg-vmdisks, расположенную на дисках /dev/md1 и /dev/md3.
Просмотр существующих групп томов LVM
Чтобы просмотреть краткую информацию по зарегистрированным в системе группам томов, достаточно выполнить команду vgs
# vgs VG #PV #LV #SN Attr VSize VFree vg-vm-disks 1 3 0 wz--n- 1.72t 1.63t
Получить ту же информацию в развернутой форме можно с помощью команды vgdisplay
Удаление группы томов
Перед удалением группы томов проверьте, что выбранная группа не содержит логических томов LVM.
После этого деактивируйте группу томов:
vgchange -a n vm-disks
Теперь можно удалить группу томов командой:
vgremove vm-disks
Добавление физических томов в группу томов
Для добавления дополнительного физического тома в существующую группу томов используется команда vgextend
%# vgextend vm-disks /dev/hdc1
Это увеличит размер дискового пространства в группе томов
Удаление физических томов из группы томов
Чтобы удалить из группы томов физический том проверьте, что он не используется никакими логическими томами. Для этого используйте команду pvdisplay
pvdisplay /dev/md3 --- Physical volume --- PV Name /dev/md3 VG Name vg-vdisks0 PV Size 1.72 TiB / not usable 1.31 MiB Allocatable yes PE Size 4.00 MiB Total PE 451076 Free PE 427268 Allocated PE 23808 PV UUID 4fh0MQ-9VXl-iGnn-OaHw-Y5vl-5vnj-UikpLV
Если физический том используется, нужно предварительно перенести данные на другой физический том, используя команду pvmove.
Если том свободен от данных, можно использовать ‘vgreduce’ для удаления физических томов:
vgreduce vg-vmdisks /dev/hda1
Перенос данных с физического тома
Чтобы удалить физический том из группы томов LVM нужно перенести находящиеся на нем данные на другие физические тома. Для этого в группе томов должно быть достаточно свободного места.
Для переноса данных используйте команду pvmove. Учтите, что на выполенение данной операции может потребоваться много времени
Использование LVM
Создание логического тома
Для создания логического тома «lv-srv1-disk», размером 30GB, выполните команду:
lvcreate -L30G -n lv-srv1-disk vg-vmdisks
Параметр -L определяет размер логического тома. Без указания суффикса система создаст логический том с размером в МБ.
Удаление логического тома LVM
Перед удалением логического тома его нужно размонтировать командой umount, а затем вызвать lvremove для удаления.
%# umount /dev/vg00/home %# lvremove /dev/vg00/home lvremove -- do you really want to remove "/dev/vg00/home"? [y/n]: y lvremove -- doing automatic backup of volume group "vg00" lvremove -- logical volume "/dev/vg00/home" successfully removed
Увеличение размера логических томов LVM
Для увеличения логического тома вам нужно просто указать команде lvextend до какого размера вы хотите увеличить том:
lvextend -L42G /dev/vg-vdisks0/lv-srv3-disk
В результате размер логического тома /dev/vg-vdisks0/lv-srv3-disk увеличится до 42Гбайт.
lvextend -L+10G /dev/vg-vdisks0/lv-srv3-disk
Эта команда увеличивает размер логического тома /dev/vg-vdisks0/lv-srv3-disk на 10Гб.
После того как вы увеличили логический том, необходимо изменить размер файловой системы, чтобы можно было воспользоваться дополнительным пространством на диске. Как это сделать — зависит от используемой файловой системы.
Уменьшение размера логического тома
Логические тома LVM также могут быть уменьшены в размере. Для уменьшения размера логического тома нужно предварительно уменьшить размер расположенной на нем файловой системы, а затем уменьшать размер логического тома.
Если вы используете файловые системы ext2/ext3/ext4, то для уменьшения размера файловых систем, необходимо их размонтировать, а затем использовать команду resize2fs для изменения размера.
Уменьшив размер расположенной на логическом томе ДМЬ файловой системы, используйте lvreduce для уменьшения размера самого логического тома.
Резервное копирование при помощи «снапшотов»
Развивая приведенный пример, предположим, что нам нужно выполнить резервирование базы данных. Для этой задачи мы будем использовать устройство-«снапшот».
Этот тип устройства представляет собой доступную только на чтение (при использовании опции —permission r) копию другого тома на момент выполнения процедуры «снапшот». Это дает возможность продолжать работу не заботясь о том, что данные могут измениться в момент резервного копирования. Следовательно, нам не нужно останавливать работу базы данных на время выполнения резервного копирования. Остановка нужна только на момент создания устройства-«снапшот», который значительно короче самого копирования.
В группе томов ops у нас осталось около 600Мб свободного места, его мы и задействуем для «снапшот»-устройства. Размер «снапшот»-устройства не регламентируется, но должен быть достаточен для сохранения всех изменений, которые могут произойти с томом, с которого он сделан, за время жизни снапшота. 600Мб должно хватить для наших целей:
%# lvcreate -L592M -s -n dbbackup -p r /dev/ops/databases lvcreate -- WARNING: the snapshot must be disabled if it gets full lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/ops/dbbackup" lvcreate -- doing automatic backup of "ops" lvcreate -- logical volume "/dev/ops/dbbackup" successfully create
Если вы делаете «снапшот» файловой системы XFS, нужно выполнить на смонтированной файловой системе команду xfs_freeze, и лишь после этого создавать «снапшот»:
%# xfs_freeze -f /mnt/point; lvcreate -L592M -s -n dbbackup /dev/ops/databases; xfs_freeze -u /mnt/point
После того как мы создали «снапшот», его нужно смонтировать:
%# mkdir /mnt/ops/dbbackup %# mount /dev/ops/dbbackup /mnt/ops/dbbackup mount: block device /dev/ops/dbbackup is write-protected, mounting read-only
Если вы работаете с файловой системой XFS, вам будет нужно при монтировании указать опцию nouuid:
%# mount -o nouuid,ro /dev/ops/dbbackup /mnt/ops/dbbackup
Выполним резервное копирование раздела:
%# tar -cf /dev/rmt0 /mnt/ops/dbbackup tar: Removing leading `/' from member names
После выполнения необходимых процедур, нужно удалить устройство-«снапшот»:
%# umount /mnt/ops/dbbackup %# lvremove /dev/ops/dbbackup lvremove -- do you really want to remove "/dev/ops/dbbackup"? [y/n]: y lvremove -- doing automatic backup of volume group "ops" lvremove -- logical volume "/dev/ops/dbbackup" successfully removed
Запись данных на том, с которого сделан снимок, очень сильно замедлена по сравнению с обычной работой! |
Элементарное сравнение производительности, наглядно демонстрирующее разницу между скоростью работы с томом, у которого нет снапшотов (смонтирован в /data/lv3/xxxx), и с томом, на котором есть снапшот (смонтирован в /data/lv4/qqqq).
%# dd if=/dev/zero of=/data/lv3/xxxx count=100 bs=1024k 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.827104 s, 127 MB/s %# dd if=/dev/zero of=/data/lv4/qqqq count=100 bs=1024k 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 5.77779 s, 18.1 MB/s
Подробнее о снапшотах:
- Consistent backup with Linux Logical Volume Manager (LVM) snapshots (англ.)
- Back Up (And Restore) LVM Partitions With LVM Snapshots (англ.)
- Linux Kernel Documentation: device-mapper/snapshot.txt (англ.)
Резервное копирование MySQL и LVM:
- Using LVM for MySQL Backup and Replication Setup (англ.)
- MySQL Backups using LVM Snapshots (англ.)
- mylvmbackup (англ.)
Перенос группы томов LVM на другую систему
Физический перенос группы томов на другую систему организовывается при помощи команд vgexport и vgimport.
Сперва необходимо размонтировать все логические тома группы томов и деактивировать группу:
%# unmount /mnt/design/users %# vgchange -an design vgchange -- volume group "design" successfully deactivated
После этого экспортируем группу томов. Процедура экспорта запрещает доступ к группе на данной системе и готовит ее к удалению:
%# vgexport design vgexport -- volume group "design" sucessfully exported
Теперь можно выключить машину, отсоединить диски, составляющие группу томов и подключить их к новой системе. Остается импортировать группу томов на новой машине и смонтировать логические тома:
%# pvscan pvscan -- reading all physical volumes (this may take a while...) pvscan -- inactive PV "/dev/sdb1" is in EXPORTED VG "design" [996 MB / 996 MB free] pvscan -- inactive PV "/dev/sdb2" is in EXPORTED VG "design" [996 MB / 244 MB free] pvscan -- total: 2 [1.95 GB] / in use: 2 [1.95 GB] / in no VG: 0 [0] # vgimport design /dev/sdb1 /dev/sdb2 vgimport -- doing automatic backup of volume group "design" vgimport -- volume group "design" successfully imported and activated %# mkdir -p /mnt/design/users %# mount /dev/design/users /mnt/design/users
Все! Группа томов готова к использованию на новой системе.
Создание зашифрованных томов LVM
Пример создания зашифрованного тома:
%# cryptsetup -y -s 256 -c aes-cbc-essiv:sha256 luksFormat /dev/hda3 %# cryptsetup luksOpen /dev/hda3 lukspace %# pvcreate /dev/mapper/lukspace %# vgcreate vg /dev/mapper/lukspace %# lvcreate -L10G -n root vg %# lvcreate -l 100%FREE -n myspace vg
Подробнее:
- How to set up an encrypted filesystem in several easy steps (англ.)
- Resizing Encrypted Filesystems (англ.)
- How To Migrate to a full encrypted LVM system (англ.)
Восстановления LVM после сбоя
- Recover Data From RAID1 LVM Partitions With Knoppix Linux LiveCD (англ.)
- LVM Recovery Tale (англ.)
- Recovery of RAID and LVM2 Volumes (англ.)
Thin Provisioning
Начиная с 2012 года (полноценно с ядра Linux 3.4; май 2012) LVM поддерживает такую возможность как thin provisioning. Это возможность использовать какое-либо внешнее блочное устройство в режиме только для чтения как основу для создания новых логических томов LVM. Такие разделы при создании уже будут выглядеть так будто они заполнены данными исходного блочного устройства. Операции с томами изменяются налету таким образом, что чтение данных выполняется с исходного блочного устройства (или с тома если данные уже отличаются), а запись — на том.
Такая возможность может быть полезна, например, при создании множества однотипых виртуальных машин или для решения других аналогичных задач, т.е. задач где нужно получить несколько изменяемых копий одних и тех же исходных данных.
Подробнее:
- New LVM2 release 2.02.89: Thinly-provisioned logical volumes (англ.)
- https://github.com/jthornber/linux-2.6/blob/thin-stable/Documentation/device-mapper/thin-provisioning.txt (англ.)
Список команд для работы с LVM
- lvchange
- Изменить атрибуты логического тома
- lvcreate
- Создать логический том
- lvdisplay
- Показать информацию о логическом томе
- lvextend
- Добавить места в логический том
- lvmchange
- (команда устарела, её лучше не использовать)
- lvmdiskscan
- Показать список устройств, которые могут быть использованы как физический том
- lvmsadc
- Собрать данные об активности использования LVM
- lvmsar
- Создать отчёт об активности использования LVM
- lvreduce
- Уменьшить размер логического тома
- lvremove
- Удалить логический том из системы
- lvrename
- Переименовать логический том
- lvresize
- Изменить размер логического тома
- lvs
- Показать информацию о логическом томе
- lvscan
- Показать список логических томов во всех группах томов
- pvchange
- Изменить атрибуты физического тома
- pvcreate
- Инициализировать физический том для использования в LVM
- pvdata
- Показать информацию (из метаданных на диске) о физическом томе
- pvdisplay
- Показать информацию о физическом томе
- pvmove
- Переместить эстенты с одного физического тома на другой
- pvremove
- Удалить метку LVM с физического тома
- pvresize
- Изменить размер физического тома, использующегося в группе томов
- pvs
- Показать информацию о физическом томе
- pvscan
- Показать список всех физических томов
- vgcfgbackup
- Сделать резервную копию конфигурации группы томов
- vgcfgrestore
- Восстановить из резервной копии конфигурацию группы томов
- vgchange
- Изменить атрибуты группы томов
- vgck
- Проверить целостность группы томов
- vgconvert
- Изменить формат метаданных группы томов
- vgcreate
- Создать группу томов
- vgdisplay
- Показать информацию о группе томов
- vgexport
- Разрегистрировать группу томов в системе
- vgextend
- Добавить физический том в группу томов
- vgimport
- Зарегистрировать эскпортированную группу томов в системе
- vgmerge
- Объединить группы томов
- vgmknodes
- Создать файлы устройств для групп томов в каталоге /dev/
- vgreduce
- Удалить физический том из группы томов
- vgremove
- Удалить группу томов
- vgrename
- Переименовать группу томов
- vgs
- Показать информацию о группах томов
- vgscan
- Выполнить поиск групп томов
- vgsplit
- Переместить физический том в новую группу томов