...
...
...

повесть о Linux и LVM (Logical Volume Manager)

введение

Цель этой статьи — описать процесс установки и использования менеджера логических томов на Linux-системе.
LVM (Logical Volume Manager, менеджер логических томов) — это система управления дисковым пространством, абстрагирующаяся от физических устройств. Она позволяет эффективно использовать и легко управлять дисковым пространством. LVM обладает хорошей масштабируемостью, уменьшает общую сложность системы. У логических томов, созданных с помощью LVM, можно легко изменить размер, а их названия могут нести большую смысловую нагрузку, в отличие от традиционных /dev/sda, /dev/hda...
Система управления логическими томами особенно полезна в работе с серверами, поскольку обеспечивает масштабируемость и удобное управление дисковым пространством. Она упрощает планирование дискового пространства и предотвращает проблемы, возникающие при неожиданно быстром росте занятого места в разделах. LVM не предназначен для обеспечения отказоустойчивости или высокой производительности. Потому он часто используется в сочетании с системами RAID.
Менеджеры логических томов существуют практически во всех UNIX-подобных операционных системах. Зачастую они сильно отличаются в реализации, но все они основаны на одинаковой идее и преследуют аналогичные цели. Одна из основных реализаций была выполнена Open Software Foundation (OSF) и сейчас входит в состав многих систем, например IBM AIX, DEC Tru64, HP/UX. Она же послужила и основой для Linux-реализации LVM.

терминология

Поскольку система управления логическими томами использует собственную модель представления дискового пространства, нам будет необходимо определиться с терминами и взаимосвязями понятий. Рассмотрим схему, основанную на диаграмме Эрика Бегфорса (Erik Bеgfors), приведенную им в списке рассылки linux-lvm. Она демонстрирует взаимосвязь понятий системы LVM:



Итак, перечислим основные обозначения и понятия:
PV (Physical volume, физический том).Обычно это раздел на диске или весь диск. В том числе устройства программного и аппаратного RAID (которые уже могут включать в себя несколько физических дисков). Физические тома входят в состав группы томов.
VG (Volume group, группа томов).Это самый верхний уровень абстрактной модели, используемой системой LVM. С одной стороны, группа томов состоит из физических томов, с другой — из логических и представляет собой единую административную единицу.
LV (Logical volume, логический том).Раздел группы томов, эквивалентен разделу диска в не-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.

инициализация дисков и разделов

Перед использованием диска или раздела в качестве физического тома необходимо его инициализировать.
Для целого диска:

# pvcreate /dev/hdb

Эта команда создает в начале диска дескриптор группы томов.
Если вы получили ошибку инициализации диска с таблицей разделов — проверьте, что работаете именно с нужным диском, и когда полностью будете уверены в том, что делаете, выполните следующие команды:

# dd if=/dev/zero of=/dev/diskname bs=1k count=1
# blockdev --rereadpt /dev/diskname

Эти команды уничтожат таблицу разделов на целевом диске.
Для разделов:
Установите программой fdisk тип раздела в 0x8e.

# pvcreate /dev/hdb1

Команда создаст в начале раздела /dev/hdb1 дескриптор группы томов.

создание группы томов

Для создания группы томов используется команда 'vgcreate'

# vgcreate vg00 /dev/hda1 /dev/hdb1

Замечание: если вы используете devfs, важно указывать полное имя в devfs, а не ссылку в каталоге /dev. Таким образом, приведенная команда должна выглядеть в системе с devfs так:

# vgcreate vg00 /dev/ide/host0/bus0/target0/lun0/part1 /dev/ide/host0/bus0/ target1/lun0/part1

Кроме того, вы можете задать размер экстента при помощи ключа "-s", если значение по умолчанию в 32Мб вас не устраивает. Можно, также, указать ограничения возможного количества физических и логических томов.

активация группы томов

После перезагрузки системы или выполнения команды vgchange -an, ваши группы томов и логические тома находятся в неактивном состоянии. Для их активации необходимо выполнить команду

# vgchange -a y vg00

удаление группы томов


Убедитесь, что группа томов не содержит логических томов. Как это сделать, показано в следующих разделах.
Деактивируйте группу томов:

# vgchange -a n vg00

Теперь можно удалить группу томов командой:

# vgremove vg00

добавление физических томов в группу томов

Для добавления предварительно инициализированного физического тома в существующую группу томов используется команда 'vgextend':

# vgextend vg00 /dev/hdc1

где /dev/hdc1 — новый физический том.

удаление физических томов из группы томов

Убедитесь, что физический том не используется никакими логическими томами. Для этого используйте команду 'pvdisplay':

# pvdisplay /dev/hda1

--- Physical volume ---
PV Name /dev/hda1
VG Name vg00
PV Size 1.95 GB / NOT usable 4 MB [LVM: 122 KB]
PV# 1
PV Status available
Allocatable yes (but full)
Cur LV 1
PE Size (KByte) 4096
Total PE 499
Free PE 0
Allocated PE 499
PV UUID Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7


Если же физический том используется, вам нужно будет перенести данные на другой физический том. Эта процедура будет описана в следующих разделах.
После этого можно использовать 'vgreduce' для удаления физических томов:

# vgreduce vg00 /dev/hda1

создание логического тома

Для того, чтобы создать логический том "lv00", размером 1500Мб, выполните команду:

# lvcreate -L1500 -nlv00 vg00

Для создания логического тома размером в 100 логических экстентов с расслоением по двум физическим томам и размером блока данных 4 KB:

# lvcreate -i2 -I4 -l100 -nlv01 vg00

Если вы хотите создать логический том, полностью занимающий группу томов, выполните команду vgdisplay, чтобы узнать полные размер группы томов, после чего используйте команду lvcreate.

# vgdisplay vg00 | grep "Total PE"
Total PE 10230
# lvcreate -l 10230 vg00 -n lv02


Эти команды создают логический том testvg, полностью заполняющий группу томов.

удаление логических томов

Логический том должен быть размонтирован перед удалением:

# 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


увеличение логических томов

Для увеличения логического тома вам нужно просто указать команде lvextend до какого размера вы хотите увеличить том:

# lvextend -L12G /dev/vg00/home
lvextend — extending logical volume "/dev/vg00/home" to 12 GB
lvextend — doing automatic backup of volume group "vg00"
lvextend — logical volume "/dev/vg00/home" successfully extended


В результате /dev/vg00/home увеличится до 12Гбайт.

# lvextend -L+1G /dev/vg00/home
lvextend — extending logical volume "/dev/vg00/home" to 13 GB
lvextend — doing automatic backup of volume group "vg00"
lvextend — logical volume "/dev/vg00/home" successfully extended


Эта команда увеличивает размер логического тома на 1Гб.
После того как вы увеличили логический том, необходимо соответственно увеличить размер файловой системы. Как это сделать зависит от типа используемой файловой системы.
По умолчанию большинство утилит изменения размера файловой системы увеличивают ее размер до размера соответствующего логического тома. Так что вам не нужно беспокоится об указании одинаковых размеров для всех команд.

ext2
Если вы не пропатчили ваше ядро патчем ext2online, вам будет необходимо размонтировать файловую систему перед изменением размера:

# umount /dev/vg00/home
# resize2fs /dev/vg00/home
# mount /dev/vg00/home /home


Если у вас нет пакета e2fsprogs 1.19 его можно загрузить с сайта ext2resize.sourceforge.net.
Для файловой системы ext2 есть и другой путь. В состав LVM входит утилита e2fsadm, которая выполняет и lvextend, и resize2fs (она также выполняет и уменьшение размера файловой системы, это описано в следующем разделе). Так что можно использовать одну команду:

# e2fsadm -L+1G /dev/vg00/home

что эквивалентно двум следующим:

# extend -L+1G /dev/vg00/home
# resize2fs /dev/vg00/home


Замечание: вам все равно нужно будет размонтировать файловую систему перед выполнением e2fsadm.

reiserfs

Увеличивать размер файловых систем Reiserfs можно как в смонтированном, так и в размонтированном состоянии.
Увеличить размер смонтированной файловой системы:

# resize_reiserfs -f /dev/vg00/home

Увеличить размер размонтированной файловой системы:

# umount /dev/vg00/homevol
# resize_reiserfs /dev/vg00/homevol
# mount -treiserfs /dev/vg00/homevol /home

xfs
Размер файловой системы XFS можно увеличить только в смонтированном состоянии. Кроме того, утилите в качестве параметра нужно передать точку монтирования, а не имя устройства:

# xfs_growfs /home

уменьшение размера логического тома

Логические тома могут быть уменьшены в размере точно так же, как и увеличены. Однако очень важно помнить, что нужно в первую очередь уменьшить размер файловой системы, и только после этого уменьшать размер логического тома. Если вы нарушите последовательность, вы можете потерять данные.

ext2
При использовании файловой системы ext2, как уже указывалось ранее, можно использовать команду e2fsadm:

# umount /home
# e2fsadm -L-1G /dev/vg00/home
# mount /home


Если вы хотите выполнить операцию по уменьшению логического тома вручную, вам нужно знать размер тома в блоках:

# umount /home
# resize2fs /dev/vg00/home 524288
# lvreduce -L-1G /dev/vg00/home
# mount /home

reiserfs

При уменьшении размера файловой системы Reiserfs, ее нужно размонтировать:

# umount /home
# resize_reiserfs -s-1G /dev/vg00/home
# lvreduce -L-1G /dev/vg00/home
# mount -treiserfs /dev/vg00/home /home


xfs
Уменьшить размер файловой системы XFS нельзя.
Примечание: обратите внимание на то, что для уменьшения размера файловых систем, необходимо их размонтировать. Это вносит определенные трудности, если вы желаете уменьшить размер корневой файловой системы. В этом случае можно применить следующий метод: загрузится с CD дистрибутива, поддерживающего LVM. Перейти в командный режим (обычно это делается нажатием клавиш Alt+F2) и выполнить команды сканирования и активации группы томов:

# vgscan
# vgchange -a y


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

# resize_reiserfs -s-500M /dev/vg00/root
# lvreduce -L-500M /dev/vg00/root
# reboot


перенос данных с физического тома


Для того, чтобы можно было удалить физический том из группы томов, необходимо освободить все занятые на нем физические экстенты. Это делается путем перераспределения занятых физических экстентов на другие физические тома. Следовательно, в группе томов должно быть достаточно свободных физических экстентов. Описание операции удаления физического тома приведено в разделе примеров /* см. в следующем номере «СР» — прим. ред. */
  Продолжение следует.

Иван Песин.

Данная статья является переработкой и дополнением LVM-HOWTO.



© Сетевые решения