Проблема

Задача, с которой сталкиваются все пользователи Linux, это оценка размеров и разметка дискового пространства на разделы во время установки системы. И не имеет значения, системный ли это администратор, управляющий площадкой серверов, или это обычный/продвинутый пользователь, обнаруживший, что у него заканчивается место на диске. Звучит знакомо, не так ли? Вот и начинается "борьба за место". О! У пользователя появляется блестящая идея и проблема решена (после нескольких бессонных ночей) с использованием разных некрасивых методов (читай: "грязных хаков") -- например, символических ссылок между разделами, или утилит для изменения размеров разделов (parted). Но, в общем, это все временные решения и рано или поздно мы снова встаем лицом к лицу с той же проблемой.

Как хотелось, чтобы это проблема была решена!! Сидящий в тебе экспериментатор хочет, чтобы у тебя была система, в которой можно спокойно экспериментировать не оглядываясь на размеры разделов, а дисковое пространство могло просто подключатся и удалятся по мере надобности. Если же вы -- системный администратор, управляющий серверами, постоянно подключенными к Internet, ставки гораздо выше. Каждая минута простоя приносит убытки. И, возможно, что потенциальный клиент не вернется на ваш сайт. Едва ли вы сможите избежать необходимости перезагрузки, после изменений в таблице разделов. И так, каждый раз, когда заканчивается дисковое пространство. LVM, Система управления логическими томами, поможет вам выходить победителем в таких ситуациях.

Введение в LVM

Linux LVM может сделать вашу жизнь легче. Эта система реализует более высокий уровень абстракции при рассмотрении пространства хранилищ, чем разделы или диски. LVM была внедрена в ядро Linux, начиная с серии 2.4.x (есть патчи для ядер серии 2.2.х - Прим.пер.). Перед тем как перейти к детальному рассмотрению технологии LVM, рассмотрим некоторые концепции и термины, которыми мы будем пользоваться.

Терминология LVM

Как работает LVM

Теперь, владея терминологией LVM, посмотрим, как это все работает. Каждый физический том делится на части, которые называются физическими экстентами (Physical Extents, PE). Размер физических экстентов может варьироваться, но един в пределах группы томов. В пределах физического тома каждый физический экстент имеет уникальный номер. Физический экстент -- минимальный блок пространства, который может быть адресован системой LVM на физическом хранилище.

Аналогично, каждый логический том состоит из минимальных адресуемых блоков, носящих название логических экстентов (Logical Extents, LE). В пределах группы томов размер логического экстента равен размеру физического. Очевидно, что размер логических экстентов одинаков для всех логических томов группы.

Каждый PE обязательно имеет уникальный номер в пределах физического тома, но не обязательно в пределах логического. Это связано с тем, что логический том может состоят из нескольких физических, потому уникальность идентификаторов PE невозможна. Следовательно, для идентификации LE используются как идентификаторы LE, так и соответствующие им PE. Как указывалось выше, существует взаимно-однозначное отображение LE на PE. При каждом доступе к хранилищу используется идентификатор LE для реальной работы с физическим устройством.

Теперь возникает вопрос, где хранятся все эти мета-данные о логических томах и группах томов. Как известно, в не-LVM системах, данные о разделах хранятся в таблице разделов. В LVM системе существует область дескрипторов группы томов (Volume Group Descriptor Area, VGDA), работающая аналогично таблице разделов. Она хранится в начале каждого физического тома.

VGDA содержит такие данные:

  1. один дескриптор PV
  2. один дескриптор VG
  3. дескрипторы LV
  4. несколько дескрипторов PE.

При старте системы активируются логические тома и группы томов, а VGDA загружается в память. VGDA позволяет определить, где расположены LV. При попытке системы обратиться к устройству, используется таблица соответствия (при помощи VGDA) для определения физического адреса, используемого в операции ввода-вывода.

Беремся за работу

Посмотрим, как используется LVM :

Шаг 1 - Конфигурация ядра

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

   Включается она таким образом:
        # cd /usr/src/linux
        # make menuconfig

        в меню :
        Multi-device Support (RAID and LVM) -->

        активировать такие опции:
        [*] Multiple devices driver support (RAID and LVM)
    <*> Logical volume manager (LVM) Support.

Шаг 2 - Проверка свободного места на диске

Это можно сделать командой:

# df -h
Filesystem              Size     Used   Avail   Use%    Mounted on
/dev/hda1               3.1G     2.7G   398M    87%     /
/dev/hda2               4.0G     3.2G   806M    80%     /home
/dev/hda5               2.1G     1.0G   1.1G    48%     /var

Шаг 3 - Создаете разделы LVM на вашем диске

При помощи fdisk, или любой другой утилиты, создайте разделы LVM. Тип разделов linux LVM -- 8e.

# fdisk /dev/hda
 нажмите p (для вывода всей таблицы разделов)
 теперь n (для создания нового раздела)

После создания раздела Linux LVM выведите всю таблицу. Она должна выглядеть примерно так:

 Device Boot      Start       End    Blocks   Id   System
/dev/hda1   *         1       506   4064413+  83  Linux
/dev/hda2           507       523    136552+   5  Extended
/dev/hda5           507       523    136521   82  Linux swap
/dev/hda6           524       778   2048256   8e  Linux LVM
/dev/hda7           779      1033   2048256   8e  Linux LVM

Шаг 4 - Создайте физические тома

# pvcreate /dev/hda6
pvcreate -- physical volume "/dev/hda6" successfully created

# pvcreate /dev/hda7
pvcreate -- physical volume "/dev/hda7" successfully created

Приведенные команды создают дескриптор группы томов в начале каждого раздела.

Шаг 5 - Создание группы томов

Создание новой группы томов и добавление двух физических томов происходит следующим образом:

# vgcreate test_lvm /dev/hda6 /dev/hda7
vgcreate- -- INFO: using default physical extent size 4 MB
vgcreate- -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate- -- doing automatic backup of volume group "test_lvm"
vgcreate- -- volume group "test_lvm" successfully created and activated

В результате будет создана группа test_lvm, содержащая физические тома /dev/hda6 и /dev/hda7. Можно также указать параметром команды размер экстента, если размер в 4MB, по каким-либо причинам, нас не устраивает.
Активация группы томов выполняется командой:

# vgchange -ay test_lvm

Для просмотра параметров существующих в вашей системе групп томов используйте команду "vgdisplay".

# vgdisplay
--- Volume group ---
VG Name test_lvm
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 1
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 2
Act PV 2
VG Size 3.91 GB
PE Size 4 MB
Total PE 1000
Alloc PE / Size 256 / 1 GB
Free PE / Size 744 / 2.91 GB
VG UUID T34zIt-HDPs-uo6r-cBDT-UjEq-EEPB-GF435E

Шаг 6 - Создание логических томов.

Команда lvcreate используется для создания логических томов в группе.

# lvcreate -L2G -nlogvol1 test_lvm

Шаг 7 - Создание файловой системы

Теперь нужно создать на логическом томе файловую систему. Допусти мы выбрали для данного тома журналируемую файловую систему reiserfs:

# mkreiserfs /dev/test_lvm/logvol1

Осталось ее смонтировать командой:

# mount -t reiserfs /dev/test_lvm/logvol1 /mnt/lv1

Шаг 8 - Добавить записи в файлы /etc/fstab и /etc/lilo.conf

Для того, чтобы новая файловая система автоматически монтировалась при загрузке системы, добавьте следующую запись в файл /etc/fstab

/dev/test_lvm/logvol1 /mnt/lv1 reiserfs defaults 1 1

Если вы пересобирали ядро, скоприруйте его в каталог /boot. Можно присвоить ему другое имя, тогда вы будете иметь выбор между двумя конфигурациями, одна из которых поддерживает LVM. В этом случае в файл /etc/lilo.conf нужно добавить такие строки:

  image   = /boot/lvm_kernel_image
  label   = linux-lvm
  root    = /dev/hda1
  initrd  = /boot/init_image
  ramdisk = 8192

После изменения файла /etc/lilo.conf выполните команду

# /sbin/lilo

Шаг 9 - Изменение размеров логических томов

Логические тома позволяют легко менять свои размеры. Для этого используется команда lvextend. Пример расширения логического тома:

# lvextend -L+1G /dev/test_lvm/logvol1
lvextend -- extending logical volume "/dev/test_lvm/logvol1" to 3GB
lvextend -- doing automatic backup of volume group "test_lvm"
lvextend -- logical volume "/dev/test_lvm/logvol1" successfully extended

Аналогично, пример уменьшения размера логического тома:

# lvreduce -L-1G /dev/test_lvm/lv1
lvreduce -- -Warning: reducing active logical volume to 2GB
lvreduce- -- This may destroy your data (filesystem etc.)
lvreduce -- -do you really want to reduce "/dev/test_lvm/lv1"? [y/n]: y
lvreduce- -- doing automatic backup of volume group "test_lvm"
lvreduce- -- logical volume "/dev/test_lvm/lv1" successfully reduced

Заключение

Как видно из нашего рассказа, LVM -- это полностью масштабируемое и очень простое в использовании решение. После настройки групп томов размеры логических томов легко меняются по необходимости.

Ресурсы


Copyright (c) 2002, Vinayak Hegde. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 84 of Linux Gazette, November 2002


Команда переводчиков:
Владимир Меренков, Александр Михайлов, Иван Песин, Сергей Скороходов, Александр Саввин, Роман Шумихин, Александр Куприн, Андрей Киселев, Игорь Яровинский, Юрий Прушинский

Со всеми предложениями, идеями и комментариями обращайтесь к Александру Куприну ([email protected]). Убедительная просьба: указывайте сразу, не возражаете ли Вы против публикации Ваших отзывов в рассылке.

Сайт рассылки: http://gazette.linux.ru.net
Эту статью можно взять здесь: http://gazette.linux.ru.net/lg84/vinayak.html
Архивы выпусков можно взять здесь: http://gazette.linux.ru.net/archive/