Менеджер логических томов (LVM – англ. Logical Volume Manager) — предоставляет собой дополнительный уровень абстракции между физическими/логическими дисками (привычными разделами, с которыми работает fdisk и аналогичные программы) и файловой системой. Это достигается путём разбивки изначальных разделов на небольшие блоки (экстенты, обычно 4—32 МБайт) и объединения их в единый виртуальный том, точнее группу томов (volume group), которая далее разбивается на логические тома (logical volume). Для файловой системы логический том представлен как обычное блочное устройство, хотя отдельные экстенты тома могут находиться на разных физических устройствах (и даже сам экстент может быть распределён подобно RAID). LVM увеличивает гибкость файловой системы, однако, являясь просто промежуточным слоем, не отменяет ограничения и использование других слоёв и усложняет работу. То есть, по-прежнему нужно создавать и изменять разделы, форматировать их.(c)Wikipedia Не буду описывать детальное описание технологии, цель немного другая – написать краткую инструкцию по созданию, сопровождению и удалению LVM системы. Описываемая версия – 2, первая реализация устарела и ее использование нецелесообразно.
Ядро(актуально для Gentoo)
Перед тем как начать необходимо убедиться что LVM поддерживается ядром. Должна быть обязательно включена опция CONFIG_BLK_DEV_DM.
# grep _DM /proc/config.gz
CONFIG_BLK_DEV_DM=y
Если же поддержка не включена, необходимо пересобрать ядро с включенными опциями. Главной опций является Device mapper support, остальные реализуют дополнительный функционал в LVM.
Device Drivers —>[*] Multiple devices driver support (RAID and LVM) —><*> Device mapper support
[ ] Device mapper debugging support
< > Crypt target support
< > Snapshot target
< > Mirror target
< > Zero target
< > Multipath target
< > I/O delaying target
[ ] DM uevents
< > Bad Block Relocation Device Target
Разобравшись с ядром, ставим пакет для работы с LVM
# emerge lvm2
Перед созданием LVM на диске необходимо указать тип раздела LVM – 0x8e в любом из редакторов, типа fdisk/cfdisk.
1. Создание.
# pvcreate /dev/sdb1 /dev/sdb2 //создание физического тома (physical volume)
# vgcreate volgroup00 /dev/sdb1 //создание группы томов (volume group)
# vgextend volgroup00 /dev/sdb2 //добавление нового раздела в группу томов
# pvdisplay /dev/sdb2 //отображение атрибутов физического тома
# lvcreate -L20G -ntest01 volgroup00 //создание логического тома с именем test размером 20Гб
Размер тома можно создавать по количеству экстентов, их число в группе томов определяется через vgdsplay:
# vgdisplay |grep “Total PE”
Total PE 17878
Таким образом можно создать логический том, с размером меньше или равному количеству экстентов:
# lvcreate -l 10000 volgroup00 -n test02
Теперь когда логический том создан над ним можно выполнять теже действия как и с обычным разделом, т.е. его можно форматировать, монтировать, переносить информацию и проч.
# mkreiserfs /dev/volgroup00/test01 //форматирование логического тома под ReiserFS
# mount /dev/volgroup00/test01 /mnt/lvmtest //монтирование логического тома
# cp -a /etc/ /mnt/lvmtest //копирование
2. Сопровождение LVM.
Увеличение размера логического тома
После увеличения логического тома, необходимо увеличить размер файловой системы. Для каждой ФС свой метод. Причем в каждом случае есть свои нюансы:
Перед изменением размера ФС Ext2 необходимо отмонтировать раздел (размер Ext3/Ext4 изменяется на лету).
Ext4 увеличивается только средством resize2fs. В fsadm поддержка Ext4 вероятно добавится позже.
Увеличивать размер файловых систем Reiserfs можно как в смонтированном, так и в размонтированном состоянии.
Размер файловой системы XFS можно увеличить только в смонтированном состоянии. Кроме того, утилите в качестве параметра нужно передать точку монтирования, а не имя устройства.
# lvextend -L+4G /dev/volgroup00/test01 //увеличение логического тома на 4Гб
# resize2fs /dev/volgroup00/ext //расширение Ext2/Ext3/Ext4 или второй вариант через fsadm (в некоторых источниках пишут про e2fsadm, у себя ее не нашел).
# fsadm -l resize /dev/volgroup00/ext 2G //увеличение логического тома Ext2/Ext3, с расширением ФС. На сенятбрь 2009 Ext4 пока не поддерживается
# resize_reiserfs -f /dev/volgroup00/reiser //расширение ReiserFS
# xfs_growfs /mnt/lvm/xfs //расширение XFS
# btrfsctl -r +2g /mnt/lvm/btrfs/ //расширение Btrfs
или
# btrfsctl -r +2g -A /dev/volgroup00/btrfs //расширение Btrfs
Уменьшение размера логического тома
Логические тома также могут быть уменьшены в размере. В первую очередь необходимо уменьшить размер файловой системы, и только после этого уменьшать размер логического тома. В обратной последовательности можно потерять данные. Также есть некоторые нюансы:
Перед изменением размера файловую систему необходимо отмонтировать.
При изменении размера Ext2/Ext3 resize2fs’у указывается ее новый размер.
Уменьшить XFS и JFS невозможно.
Уменьшить Btrfs можно на лету, но лучше не рисковать.
# resize2fs /dev/volgroup00/ext2 500m //указание нового размера для ФС Ext2/Ext3
# fsadm -l resize /dev/volgroup00/ext3 200M //указание нового размера для ФС Ext2/Ext3
# resize_reiserfs -s-1G /dev/volgroup00/reiserfs //уменьшение ФС Reiserfs
# btrfsctl -r -2g -A /dev/volgroup00/btrfs //уменьшение ФС Btrfs
# lvreduce -L-1G /dev/volgroup00/test01 //уменьшение логического тома
# vgchange -a n /dev/volgroup02 //отключение логических томов в группе-жертве
# vgmerge volgroup01 volgroup02 //поглощение группы volgroup02 группой volgroup01
Разделение группы томов
# vgsplit volgroup01 volgroup02 /dev/sdb1 //выделение новой группы томов volgroup02 которая разместится на физическом томе /dev/sdb1
Изменение размера физического тома. Есть несколько нюансов:
Увеличение размера физического тома LVM, производится после увеличения раздела программами типа cfdisk/fdisk
Уменьшение тома следует проводить после уменьшения файловых систем и логических томов, иначе возможна порча данных
Снимок это доступная только для чтения копия другого тома. При создании снимков необходимо убедиться что запущен dmeventd. При создании снимков с XFS ее предвариетльно надо заморозить – xfs_freeze.
# lvcreate -L600M -s -n var-backups /dev/volgroup00/var //создание тома var-backup, как копии тома var
# mount /dev/volgroup00/var-backup /mnt/backup //последующее монтирование снимка
Создание зеркала (Mirrors)
Зеркала используются для повышения отказоустойчивости и повышения уровня сохранности информации. Для создания зеркала необходимо 3 физических тома, 2 для зеркала и 1 для журнала. Рекомендуется использовать физические тома размещенные на разных носителях. Использование физических томов с одного носителя сводит на ноль целесообразность использования зеркала, т.к. в случае аппаратного сбоя зеркало оказывается бесполезным. При создании зеркал необходимо убедиться что запущен dmeventd
# pvcreate /dev/sda5 /dev/sdb1 /dev/sdc1 //создаем физический том
# vgcreate mirror00 /dev/sda5 /dev/sdb1 /dev/sdc1 //создаем группу mirror00
# lvcreate -L 5G -n volume00 -m 1 mirror00 //создаем зеркальный том volume00
просмотр информации о логических томах, процент Copy должен достигнуть 100%
# mkreiserfs /dev/mirror00/volume00 //форматирование
# mount /dev/mirror00/volume00 /var/data //монтирование
Преобразование логического тома в зеркальный
# vgextend volgroup01 /dev/sdc1 /dev/sdd1 //добавление новых физических томов в группу
# lvconvert -m 1 /dev/volgroup01/volume-new //преобразование обычного тома в зеркальный
Удаление томов и групп
Логические тома перед удалением должны быть отмонтированы.
# vgreduce volgroup00 /dev/sdb1 //удаление физического тома из группы
# lvremove /dev/volgroup00/test01 //удаление логического тома
# vgremove volgroup00 //удаление группы томов
# pvremove /dev/sdc1 //удаление физического тома
команды LVM2:
# pvs отчетная информация о физических томах # vgs отчетная информация о группах томов # lvs отчетная информация о логических томах # pvck проверка метаданных на физических томах # vgck проверка метаданных в группах томов # pvscan сканирование устройств на наличие физических томов # pvcreate создание физического тома # pvdisplay показ атрибутов физического тома # pvchange смена атрибутов физического тома # pvresize изменение размера физического тома # pvremove удаление физического тома # pvmove перенос физических экстентов # vgscan сканирование дисков на наличие групп томов # vgcreate создание группы томов # vgdisplay показ атрибутов группы томов # vgchange смена атрибутов группы томов # vgextend добавление физического тома в группу томов # vgreduce уменьшение группы томов # vgmerge слияние двух групп томов в одну # vgsplit разделение одной группы томов на две # vgrename переименование группы томов # vgexport делает группу неузнаваемой для системы, для дальнейшего переноса в другую систему # vgimport делает экспортированную группу томов узнаваемой # vgcfgbackup резервное копирование области дескрипторов группы томов # vgcfgrestore восстанавливает область дескрипторов группы томов # vgremove удаление группы томов # lvscan сканирование дисков на наличие логических томов # lvcreate создание логического тома # lvdisplay показ атрибутов логических тома # lvchange смена атрибутов логического тома # lvextend увеличение рамера логического тома # lvreduce уменьшение размералогического тома # lvrename переименование логического тома # lvresize изменение размера логического тома # lvconvert преобразует логический том с обычного в зеркальный или снимок # lvremove удаление логического тома # vgmknodes заново создает каталог группы томов и специальные файлы логических томов # vgconvert смена формата метаданных в группе томов (метаданные формата LVM1 в формат LVM2) # fsadm утилита для проверки и изменения размеров файловых систем # lvmdump создание дампы для диагностических целей # lvmsadc собирает данные об активности # lvmsar создает отчет об активности # lvmdiskscan сканирование всех устройств видимых LVM