LVM

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
Icon-caution.gif Если устройство-«снапшот» полностью заполняется, оно автоматически деактивируется. В этом случае «снапшот» не может более использоваться, потому крайне важно выделять достаточное пространство для него.

После того как мы создали «снапшот», его нужно смонтировать:

%# 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
Icon-caution.gif Запись данных на том, с которого сделан снимок, очень сильно замедлена по сравнению с обычной работой!

Элементарное сравнение производительности, наглядно демонстрирующее разницу между скоростью работы с томом, у которого нет снапшотов (смонтирован в /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

Подробнее о снапшотах:

Резервное копирование MySQL и LVM:

Перенос группы томов 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

Подробнее:

Восстановления LVM после сбоя

Thin Provisioning

Начиная с 2012 года (полноценно с ядра Linux 3.4; май 2012) LVM поддерживает такую возможность как thin provisioning. Это возможность использовать какое-либо внешнее блочное устройство в режиме только для чтения как основу для создания новых логических томов LVM. Такие разделы при создании уже будут выглядеть так будто они заполнены данными исходного блочного устройства. Операции с томами изменяются налету таким образом, что чтение данных выполняется с исходного блочного устройства (или с тома если данные уже отличаются), а запись — на том.

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

Подробнее:

Список команд для работы с 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
Переместить физический том в новую группу томов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *