Вы находитесь на странице: 1из 5

Linux: Logical Volume Manager

Константин Баранов
2007

Аннотация
Logical Volume Manager (LVM) — это система управления логическими томами,
используемая в операционной системе Linux. LVM предоставляет гораздо более
широкую функциональность, чем система разделов DOS.

Содержание
1 Устройство LVM 1

2 Базовые команды 2
2.1 Создание и удаление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 Добавление и удаление физических томов . . . . . . . . . . . . . . . . 2
2.3 Изменение размеров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3 Зеркалирование данных 3
3.1 Восстановление после сбоя . . . . . . . . . . . . . . . . . . . . . . . . . 4

4 Установка Linux на LVM 4

1 Устройство LVM
Дисковое пространство для LVM представлено физическими томами (Physical
Volume, PV). Это могут быть винчестеры, разделы или любые другие блочные
устройства. Физические тома дробятся на блоки (Physical Extent, PE) заранее за-
данного размера. Все полученные блоки образуют группу томов (Volume Group,
VG). Из имеющихся в группе томов блоков можно собрать новое виртуальное
устройство — логический том (Logical Volume, LV). В простейшем случае каж-
дый блок логического тома (Logical Extent, LE) располагается на некотором блоке
физического тома.
Приведу пример. Допустим, у нас есть два винчестера: sda и sdb, каждый объ-
ёмом 120 GiB. Объявим группу томов vg с размером блока 10 GiB и добавим в
неё наши винчестеры. Тогда в группе будет 240 GiB доступного пространства или
24 блока: по 12 блоков с каждого винчестера. Теперь мы можем создать три ло-
гических тома: lv0, lv1 и lv2 — объёмом 80 GiB или 8 блоков каждый. Скорее
всего том lv0 займёт 8 блоков на винчестере sda, том lv1 — 8 блоков на винче-
стере sdb, а том lv2 — оставшиеся 4 блока на sda и 4 блока на sdb. Но на самом

1
деле нам не нужно думать, как именно логические тома разместятся на наших
винчестерах. Более того, при выполнении некоторых операций с LVM логические
тома могут менять своё положение. Это происходит незаметно для приложений,
использующих логический том: например, для файловых систем.
LVM позволяет динамически добавлять и удалять не только логические тома,
но и физические. В нашем примере мы можем удалить логический том lv1, затем
уменьшить объём томов lv0 и lv2 до 60 GiB. Тогда в группе томов станет 120 GiB
свободного пространства и мы сможем удалить физический том sda из группы.
При этом перезагрузка компьютера может понадобиться только для физического
добавления или удаления винчестеров.

2 Базовые команды
2.1 Создание и удаление
Работа с LVM начинается с создания физических томов с помощью команды
pvcreate. В нашем примере необходимо вызвать эту команду дважды:
pvcreate /dev/sda
pvcreate /dev/sdb
Команда pvs покажет список всех доступных физических томов.
Чтобы создать группу томов, воспользуемся командой
vgcreate -s 32M vg /dev/sda /dev/sdb
Опция -s задаёт размер физического блока. По умолчанию он равен 4 MiB, но нет
смысла дробить дисковое пространство так мелко. Команда vgs выводит список
всех групп томов.
Теперь можно создать логические тома:
lvcreate -n first -L 20G vg
lvcreate -n second -L 30G vg
Эти команды создадут устройства /dev/vg/first и /dev/vg/second размером
20 GiB и 30 GiB соответственно. Список всех логических томов можно увидеть
с помощью команды lvs.
Чтобы удалить логический том first, воспользуемся командой
lvremove vg/first
Удалить можно только неиспользующийся том. Если том содержит файловую си-
стему, то сначала её нужно отмонтировать.

2.2 Добавление и удаление физических томов


Чтобы добавить новый винчестер sdc в группу томов, выполним команды
pvcreate /dev/sdc
vgextend vg /dev/sdc
Если теперь мы хотим убрать из группы томов винчестер sda, то выполним
команды

2
pvmove /dev/sda
vgreduce vg /dev/sda
pvremove /dev/sda
Команда pvmove переносит все используемые физические блоки с указанного фи-
зического тома на другие физические тома, имеющие достаточное количество сво-
бодных блоков.

2.3 Изменение размеров


Уменьшим логический том vg/second, содержащий ReiserFS, до 20 GiB:
resize_reiserfs -s 19G /dev/vg/second
lvresize -L 20G vg/second
resize_reiserfs /dev/vg/second
Можно было бы первой же командой уменьшить файловую систему точно до
20 GiB, но на всякий случай лучше использовать последовательность из трёх ко-
манд. Файловая система должна быть отмонтирована.
Теперь увеличим тот же том до 40 GiB:
lvresize -L 40G vg/second
resize_reiserfs /dev/vg/second
Эти команды можно выполнять даже без предварительного отмонтирования фай-
ловой системы (то же касается и XFS, а вот Ext2/3 не может изменять размер “на
лету”).
С помощью команды pvresize можно изменять размер физического тома. Эта
операция может пригодиться, если вы используете разделы винчестеров в каче-
стве физических томов.

3 Зеркалирование данных
Для повышения надёжности можно использовать зеркалирование данных. При
этом каждому логическому блоку соответствует не один физический блок, а два
или более на разных физических томах. Если один из винчестеров выйдет из
строя, зеркалированный логический том всё равно будет доступен.
Создать логический том с одним зеркалом можно с помощью команды
lvcreate -n data -m 1 -l 10 vg
При этом должно быть достаточное количество физических блоков на трёх физи-
ческих томах: 10 для самого логического тома, 10 для зеркала и 1 для журнала.
Можно обойтись без журнала, указав опцию --corelog, но тогда каждый раз при
инициализации логического тома (например, на запуске компьютера) будет про-
исходить пересинхронизация зеркал. Если свободные блоки есть только на двух
физических томах, то можно разместить журнал на одном физическом томе с зер-
калом:
lvcreate -n data -m 1 -l 10 vg /dev/sda /dev/sdb /dev/sdb
С помощью команды lvconvert можно добавлять или удалять зеркала и жур-
нал, связанные с уже имеющимся логическим томом.

3
3.1 Восстановление после сбоя
Если один из физических томов недоступен, то инициализировать группу то-
мов с помощью команды vgchange невозможно. В этом случае можно поступить
так:
vgreduce --removemissing vg
vgchange -a y vg
Первая команда удалит из группы томов вышедший из строя физический том и
каждый логический том, хотя бы один блок которого целиком располагался на
удалённом физическом томе.
Если утерян физический блок, содержащий журнал зеркалированного логиче-
ского тома, то этот том будет преобразован в зеркалированный том без журнала
(как если бы он был создан с опцией --corelog). Если же утерян физический блок
с данными логического тома или его зеркала, то этот том будет преобразован в
простой логический том. При наличии достаточного количества свободных физи-
ческих блоков и томов конфигурацию зеркалированного логического тома можно
сразу же вернуть в прежнее состояние с помощью команды lvconvert.

4 Установка Linux на LVM


Большинство современных дистрибутивов Linux дают возможность на этапе
установки настроить LVM. Но обычно существует ряд серьёзных ограничений:
• физические тома можно создавать только на разделах винчестеров, а не на
целом винчестере;
• можно создавать только простые (linear) логические тома;
• нельзя размещать каталог /boot внутри LVM.
Из известных мне дистрибутивов только в Gentoo нет этих ограничений.
Первые две проблемы — просто недоработка инсталляторов. А последняя про-
блема связана с определёнными трудностями в установке загрузчика, если ката-
лог /boot расположен не на DOS-разделе. Ниже я расскажу, как обойти эти труд-
ности.
Загрузчик GRUB не может работать с LVM, поэтому нужно использовать LILO.
Логический том, содержащий каталог /boot может быть только линейным (linear).
Если вы хотите использовать зеркалированные тома, то каталог /boot нужно раз-
местить на отдельном линейном томе (его не страшно потерять при сбое винче-
стера, потому что его содержимое всегда легко можно восстановить).
Теперь надо создать образ initramfs с поддержкой LVM. В Gentoo это делается
командой
genkernel initrd --lvm
Также можно использовать скрипт mkinitrd.
Файл /etc/lilo.conf:
boot = /dev/sda
image = /boot/vmlinuz
initrd = /boot/initramfs
literal = "root=/dev/vg/root dolvm"

4
Здесь использован параметр literal вместо рекомендуемого сочетания парамет-
ров root и append, потому что иначе LILO передаст ядру бессмысленное численное
значение root. Параметр dolvm нужен при использовании образа initramfs, сгене-
рированного с помощью genkernel.
В конце нужно запустить lilo для установки загрузчика в MBR винчестера.
Поддержка LVM в LILO появилась относительно недавно и не включается по
умолчанию. Если вам не повезло, и LILO отказывается устанавливаться, то нуж-
но найти архив с исходным кодом последней версии LILO (22.7.3 уже имеет под-
держку LVM). Перед сборкой LILO следует установить пакет device-mapper. Далее,
в файл /etc/lilo.defines надо записать строку

-DDEVMAPPER

и скомпилиривать LILO по имеющемуся в архиве руководству. Пользователям


Gentoo достаточно просто выполнить команду

emerge lilo

создав предварительно файл /etc/lilo.defines.

Полезные ссылки
[1] Домашняя страница LVM: http://sources.redhat.com/lvm2/.
[2] LVM HOWTO: http://www.tldp.org/HOWTO/LVM-HOWTO/index.html.