xg-scale
view lvm.tex @ 4:253d66dd74bb
Добавлено подробное описание управления памятью домена и выделением устройств домену
| author | Igor Chubin <igor@chub.in> | 
|---|---|
| date | Sun Jul 06 23:27:46 2008 +0300 (2008-07-06) | 
| parents | |
| children | 
 line source
     1 \section{Система управления томами LVM}
     3 Система управления логическими томами особенно полезна в работе с серверами, поскольку обеспечивает масштабируемость и удобное управление дисковым пространством. Она упрощает планирование дискового пространства и предотвращает проблемы, возникающие при неожиданно быстром росте занятого места в разделах. LVM не предназначен для обеспечения отказоустойчивости или высокой производительности. Потому он часто используется в сочетании с системами RAID.
     5 Здесь описывается процесс установки и использования менеджера логических томов на Linux-системе. LVM (Logical Volume Manager), менеджер логических томов -- это система управления дисковым пространством, абстрагирующаяся от физических устройств. Она позволяет эффективно использовать и легко управлять дисковым пространством. LVM обладает хорошей масштабируемостью, уменьшает общую сложность системы. У логических томов, созданных с помощью LVM, можно легко изменить размер, а их названия могут нести большую смысловую нагрузку, в отличие от традиционных /dev/sda, /dev/hda {\dots}
     7 Реализации менеджеров логических томов существуют практически во всех UNIX-подобных операционных системах. Зачастую они сильно отличаются в реализации, но все они основаны на одинаковой идее и преследуют аналогичные цели. Одна из основных реализаций была выполнена Open Software Foundation (OSF) и сейчас входит в состав многих систем, например IBM AIX, DEC Tru64, HP/UX. Она же послужила и основой для Linux-реализации LVM.
     9 Помимо собственно системы LVM и основных операций по её использованию, 
    10 рассмотрены несколько более углублённых вопросов.
    12 Один из вопросов это использование \textbf{kpartx} из
    13 пакета \textbf{multipath-tools} для построения карты устройства (device map)
    14 и \textit{рекурсивного доступа к томам LVM} (когда LVM развёрнут на разделах, созданных внутри
    15 логического тома LVM более низкого уровня). Это может быть полезно
    16 при использовании LVM совместно с системами виртуализации.
    18 Второй вопрос --- это использование постоянных снимков
    19 (persistent snapshot) для быстрого \textit{клонирования разделов}.
    20 Эта возможность может быть полезна как при выполнении резервного копирования,
    21 так и при быстром создании виртуальных машин в системах виртуализации
    22 (вопрос создания снапшотов затрагивался и в \textit{повести}, но здесь он рассмотрен более детально).
    24 Третий вопрос --- это \textit{сравнение LVM и файловой системой ZFS}, набирающей
    25 в последнее время большую популярность.
    26 На первый взгляд такое сравнение может показаться странным, ведь ZFS -- это файловая система,
    27 а LVM -- система управления томами, то есть нечто, что находится на уровень ниже файловой системы.
    28 В действительности, сравнение вполне имеет право на существование, поскольку ZFS это не просто файловая система, 
    29 а нечто большее. В ней присутствует уровень \dq{}storage pool\dq{}, который берёт на себя те же задачи, что и  LVM.
    31 % Шифрование LVM-томов и замер скорости обращения к LVM-томам.
    33 \subsection{Введение}
    36 \subsubsection{Терминология.}
    37 Поскольку система управления логическими томами использует собственную модель представления дискового пространства, нам будет необходимо определиться с терминами и взаимосвязями понятий. Рассмотрим схему, основанную на диаграмме Эрика Бегфорса (Erik Bеgfors), приведенную им в списке рассылки linux-lvm. Она демонстрирует взаимосвязь понятий системы LVM:
    39 \begin{verbatim}
    40     sda1     sda2     sdb     sdc       <-- PV
    41     |        |        |       |
    42     |        |        |       |
    43     +--------+- VG00 -+-------+        <-- VG
    44                 |
    45     +-------+-------+---------+
    46     |       |       |         |
    47     root    usr     home      var       <-- LV
    48     |       |       |         | 
    49     ext3 reiserfs reiserfs    xfs       <-- Файловые системы 
    50 \end{verbatim}
    52 Обозначения и понятия:
    54 \begin{itemize}
    55 \item  \textit{PV, Physical volume, физический том.} Обычно это раздел на диске или весь диск. В том числе, устройства программного и аппаратного RAID (которые уже могут включать в себя несколько физических дисков). Физические тома входят в состав группы томов.
    56 \item  \textit{VG, Volume group, группа томов.} Это самый верхний уровень абстрактной модели, используемой системой LVM. С одной стороны группа томов состоит из физических томов, с другой -- из логических и представляет собой единую административную единицу.
    57 \item  \textit{LV, Logical volume, логический том.} Раздел группы томов, эквивалентен разделу диска в не-LVM системе. Представляет собой блочное устройство и, как следствие, может содержать файловую систему.
    58 \item  \textit{PE, Physical extent, физический экстент.} Каждый физический том делится на порции данных, называющиеся физическими экстентами. Их размеры те же, что и у логических экстентов.
    59 \item  \textit{LE, Logical extent, логический экстент.} Каждый логический том делится на порции данных, называющиеся логическими экстентами. Размер логических экстентов не меняется в пределах группы томов.
    60 \end{itemize}
    62 Давайте теперь соединим все эти понятия в общую картину. Пусть у нас имеется группа томов VG00 с размером физического экстента 4Мб. В эту группу мы добавляем два раздела, /dev/hda1 и /dev/hdb1. Эти разделы становятся физическими томами, например PV1 и PV2 (символьные имена присваивает администратор, так что они могут быть более осмысленными). Физические тома делятся на 4-х мегабайтные порции данных, т.к. это размер логического экстента. Диски имеют разный размер: PV1 получается размером в 99 экстентов, а PV2 -- размером в 248 экстентов. Теперь можно приступать к созданию логических томов, размером от 1 до 347 (248+99) экстентов. При создании логического тома, определяется отображение между логическими и физическими экстентами. Например, логический экстент 1 может отображаться в физический экстент 51 тома PV1. В этом случае, данные, записанные в первые 4Мб логического экстента 1, будут в действительности записаны в 51-й экстент тома PV1.
    64 Администратор может выбрать алгоритм отображения логических экстентов в физические. На данный момент доступны два алгоритма:
    65 \begin{enumerate}
    66 \item Линейное отображение последовательно назначает набор физических экстентов области логического тома, т.е. LE 1 -- 99 отображаются на PV1, а LE 100 -- 347 -- на PV2.
    67 \item "Расслоенное" (striped) отображение разделяет порции данных логических экстентов на определенное количество физических томов. То есть:
    68 \end{enumerate}
    70 \begin{verbatim}
    71      1-я порция данных LE[1] -> PV1[1],
    72      2-я порция данных LE[1] -> PV2[1],
    73      3-я порция данных LE[1] -> PV3[1],
    74      4-я порция данных LE[1] -> PV1[2], и т.д.
    75 \end{verbatim}
    77 Похожая схема используется в работе RAID нулевого уровня. В некоторых ситуациях этот алгоритм отображения позволяет увеличить производительность логического тома. Однако он имеет значительное ограничение: логический том с данным отображением не может быть расширен за пределы физических томов, на которых он изначально и создавался.
    79 Великолепная возможность, предоставляемая системой LVM -- это \dq{}снапшоты\dq{}. Они позволяют администратору создавать новые блочные устройства с точной копией логического тома, \dq{}замороженного\dq{} в какой-то момент времени. Обычно это используется в пакетных режимах. Например, при создании резервной копии системы. Однако при этом вам не будет нужно останавливать работающие задачи, меняющие данные на файловой системе. Когда необходимые процедуры будут выполнены, системный администратор может просто удалить устройство-\dq{}снапшот\dq{}. Ниже мы рассмотрим работу с таким устройством.
    80 Работа с LVM
    82 Давайте теперь рассмотрим задачи, стоящие перед администратором LVM системы. Помните, что для работы с системой LVM ее нужно инициализировать командами:
    83 \begin{verbatim}
    84      %# vgscan
    85      %# vgchange -ay
    86 \end{verbatim}
    88 Первая команда сканирует диски на предмет наличия групп томов, вторая активирует все найденные группы томов. Аналогично для завершения всех работ, связанных с LVM, нужно выполнить деактивацию групп:
    89 \begin{verbatim}
    90      %# vgchange -an
    91 \end{verbatim}
    93 Первые две строки нужно будет поместить в скрипты автозагрузки (если их там нет), а последнюю можно дописать в скрипт shutdown.
    95 \subsubsection{Инициализация дисков и разделов}
    96 Перед использованием диска или раздела в качестве физического тома необходимо его инициализировать:
    98 Для целого диска:
    99 \begin{verbatim}
   100     %# pvcreate /dev/hdb
   101 \end{verbatim}
   103 Эта команда создает в начале диска дескриптор группы томов.
   105 Если вы получили ошибку инициализации диска с таблицей разделов -- проверьте, что работаете именно с нужным диском, и когда полностью будете уверены в том, что делаете, выполните следующие команды
   106 \begin{verbatim}
   107     %# dd if=/dev/zero of=/dev/diskname bs=1k count=1
   108     %# blockdev --rereadpt /dev/diskname
   109 \end{verbatim}
   111 Эти команды уничтожат таблицу разделов на целевом диске.
   113 Для разделов:
   115 Установите программой fdisk тип раздела в 0x8e.
   116 \begin{verbatim}
   117     %# pvcreate /dev/hdb1
   118 \end{verbatim}
   120 Команда создаст в начале раздела /dev/hdb1 дескриптор группы томов.
   122 \subsubsection{Создание группы томов}
   123 Для создания группы томов используется команда \rq{}vgcreate\rq{}
   124 \begin{verbatim}
   125     %# vgcreate vg00  /dev/hda1 /dev/hdb1 
   126 \end{verbatim}
   128 Если вы используете devfs важно указывать полное имя в devfs, а не ссылку в каталоге /dev. Таким образом приведенная команда должна выглядеть в системе с devfs так:
   129 \begin{verbatim}
   130     %# vgcreate vg00  /dev/ide/host0/bus0/target0/lun0/part1 \
   131        /dev/ide/host0/bus0/target1/lun0/part1
   132 \end{verbatim}
   134 Кроме того, вы можете задать размер экстента при помощи ключа \dq{}-s\dq{}, если значение по умолчанию в 32Мб вас не устраивает. Можно, также, указать ограничения возможного количества физических и логических томов.
   136 \subsubsection{Активация группы томов}
   137 После перезагрузки системы или выполнения команды vgchange -an, ваши группы томов и логические тома находятся в неактивном состоянии. Для их активации необходимо выполнить команду
   138 \begin{verbatim}
   139     %# vgchange -a y vg00
   140 \end{verbatim}
   142 \subsubsection{Удаление группы томов}
   143 Убедитесь, что группа томов не содержит логических томов. Как это сделать, показано в следующих разделах.
   145 Деактивируйте группу томов:
   146 \begin{verbatim}
   147     %# vgchange -a n vg00
   148 \end{verbatim}
   150 Теперь можно удалить группу томов командой:
   151 \begin{verbatim}
   152     %# vgremove vg00
   153 \end{verbatim}
   155 \subsubsection{Добавление физических томов в группу томов}
   156 Для добавления предварительно инициализированного физического тома в существующую группу томов используется команда \rq{}vgextend\rq{}:
   158 \begin{verbatim}
   159 %# vgextend vg00 /dev/hdc1
   160                 ^^^^^^^^^ новый физический том
   161 \end{verbatim}
   163 \subsubsection{Удаление физических томов из группы томов}
   164 Убедитесь, что физический том не используется никакими логическими томами. Для этого используйте команду \rq{}pvdisplay\rq{}:
   166 \begin{verbatim}
   167 %# pvdisplay /dev/hda1
   169 --- Physical volume ---
   170    PV Name            /dev/hda1
   171    VG Name            vg00
   172    PV Size            1.95 GB / NOT usable 4 MB [LVM: 122 KB]
   173    PV#                1
   174    PV Status          available
   175    Allocatable        yes (but full)
   176    Cur LV             1
   177    PE Size (KByte)    4096
   178    Total PE           499
   179    Free PE            0
   180    Allocated PE       499
   181    PV UUID            Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7
   182 \end{verbatim}
   184 Если же физический том используется, вам нужно будет перенести данные на другой физический том. Эта процедура будет описана в следующих разделах.
   186 После этого можно использовать \rq{}vgreduce\rq{} для удаления физических томов:
   187 \begin{verbatim}
   188     %# vgreduce vg00 /dev/hda1
   189 \end{verbatim}
   191 \subsubsection{Создание логического тома}
   192 Для того, чтобы создать логический том \dq{}lv00\dq{}, размером 1500Мб, выполните команду:
   193 \begin{verbatim}
   194     %# lvcreate -L1500 -nlv00 vg00
   195 \end{verbatim}
   197 Для создания логического тома размером в 100 логических экстентов с расслоением по двум физическим томам и размером блока данных 4 KB:
   198 \begin{verbatim}
   199     %# lvcreate -i2 -I4 -l100 -nlv01 vg00
   200 \end{verbatim}
   202 Если вы хотите создать логический том, полностью занимающий группу томов, выполните команду vgdisplay, чтобы узнать полные размер группы томов, после чего используйте команду lvcreate.
   203 \begin{verbatim}
   204     %# vgdisplay vg00 | grep "Total PE"
   205     Total PE        10230
   206     %# lvcreate -l 10230 vg00 -n lv02
   207 \end{verbatim}
   209 Эти команды создают логический том testvg, полностью заполняющий группу томов.
   211 \subsubsection{Удаление логических томов}
   212 Логический том должен быть размонтирован перед удалением:
   213 \begin{verbatim}
   214    # umount /home
   215    # resize2fs /dev/vg00/home 524288
   216    # lvreduce -L-1G /dev/vg00/home
   217    # mount /home
   218 \end{verbatim}
   220 \subsubsection{Увеличение логических томов}
   221 Для увеличения логического тома вам нужно просто указать команде lvextend до какого размера вы хотите увеличить том:
   223 \begin{verbatim}
   224     %# lvextend -L12G /dev/vg00/home
   225     lvextend -- extending logical volume "/dev/vg00/home" to 12 GB
   226     lvextend -- doing automatic backup of volume group "vg00"
   227     lvextend -- logical volume "/dev/vg00/home" successfully extended
   228 \end{verbatim}
   230 В результате /dev/vg00/home увеличится до 12Гбайт.
   232 \begin{verbatim}
   233    # umount /home
   234    # resize_reiserfs -s-1G /dev/vg00/home
   235    # lvreduce -L-1G /dev/vg00/home
   236    # mount -treiserfs /dev/vg00/home /home
   237 \end{verbatim}
   239 Эта команда увеличивает размер логического тома на 1Гб.
   241 После того как вы увеличили логический том, необходимо соответственно увеличить размер файловой системы. Как это сделать зависит от типа используемой файловой системы.
   243 По умолчанию большинство утилит изменения размера файловой системы увеличивают ее размер до размера соответствующего логического тома. Так что вам не нужно беспокоится об указании одинаковых размеров для всех команд.
   245 \paragraph{ext2}
   247 Если вы не пропатчили ваше ядро патчем ext2online, вам будет необходимо размонтировать файловую систему перед изменением размера.
   248 В современных ядрах этот патч не требуется. Точнее, он уже и так присутсвуетв коде ядра.
   249 \begin{verbatim}
   250     # umount /dev/vg00/home
   251     # resize2fs /dev/vg00/home
   252     # mount /dev/vg00/home /home
   253 \end{verbatim}
   255 Для файловой системы ext2 есть и другой путь. В состав LVM входит утилита e2fsadm, которая выполняет и lvextend, и resize2fs (она также выполняет и уменьшение размера файловой системы, это описано в следующем разделе). Так что можно использовать одну команду:
   256 \begin{verbatim}
   257     %# e2fsadm -L+1G /dev/vg00/home
   258 \end{verbatim}
   259 что эквивалентно двум следующим:
   260 \begin{verbatim}
   261     %# lvextend -L+1G /dev/vg00/home
   262     %# resize2fs /dev/vg00/home
   263 \end{verbatim}
   265 \paragraph{reiserfs}
   267 Увеличивать размер файловых систем Reiserfs можно как в смонтированном, так и в размонтированном состоянии.
   269 Увеличить размер смонтированной файловой системы:
   270 \begin{verbatim}
   271     %# resize_reiserfs -f /dev/vg00/home
   272 \end{verbatim}
   274 Увеличить размер размонтированной файловой системы:
   275 \begin{verbatim}
   276     %# umount /dev/vg00/homevol
   277     %# resize_reiserfs /dev/vg00/homevol
   278     %# mount -treiserfs /dev/vg00/homevol /home
   279 \end{verbatim}
   281 \paragraph{xfs}
   283 Размер файловой системы XFS можно увеличить только в смонтированном состоянии. 
   284 Кроме того, утилите в качестве параметра нужно передать точку монтирования, а не имя устройства:
   285 \begin{verbatim}
   286     %# xfs_growfs /home
   287 \end{verbatim}
   289 \subsubsection{Уменьшение размера логического тома}
   290 Логические тома могут быть уменьшены в размере, точно также как и увеличены. Однако очень важно помнить, что нужно в первую очередь уменьшить размер файловой системы, и только после этого уменьшать размер логического тома. Если вы нарушите последовательность, вы можете потерять данные.
   292 \paragraph{ext2}
   294 При использовании файловой системы ext2, как уже указывалось ранее, можно использовать команду e2fsadm:
   296 \begin{verbatim}
   297    # umount /home
   298    # e2fsadm -L-1G /dev/vg00/home
   299    # mount /home
   300 \end{verbatim}
   302 Если вы хотите выполнить операцию по уменьшению логического тома вручную, вам нужно знать размер тома в блоках:
   303 \begin{verbatim}
   304    # umount /home
   305    # resize2fs /dev/vg00/home 524288
   306    # lvreduce -L-1G /dev/vg00/home
   307    # mount /home
   308 \end{verbatim}
   310 \paragraph{reiserfs}
   312 При уменьшении размера файловой системы Reiserfs, ее нужно размонтировать:
   313 \begin{verbatim}
   314    # umount /home
   315    # resize_reiserfs -s-1G /dev/vg00/home
   316    # lvreduce -L-1G /dev/vg00/home
   317    # mount -treiserfs /dev/vg00/home /home
   318 \end{verbatim}
   320 \paragraph{xfs}
   322 Уменьшить размер файловой системы XFS нельзя.
   324 Примечание: обратите внимание на то, что для уменьшения размера файловых систем, необходимо их размонтировать. Это вносит определенные трудности, если вы желаете уменьшить размер корневой файловой системы. В этом случае можно применить следующий метод: загрузится с CD дистрибутива, поддерживающего LVM. Перейти в командный режим (обычно это делается нажатием клавиш Alt+F2) и выполнить команды сканирования и активации группы томов:
   326 \begin{verbatim}
   327 %# vgscan
   328 %# vgchange -a y
   329 \end{verbatim}
   331 Теперь вы имеете доступ к логическим томам и можете изменять их размеры:
   333 \begin{verbatim}
   334 %# resize_reiserfs -s-500M /dev/vg00/root
   335 %# lvreduce -L-500M /dev/vg00/root
   336 %# reboot
   337 \end{verbatim}
   340 \subsubsection{Перенос данных с физического тома}
   342 Для того, чтобы можно было удалить физический том из группы томов, необходимо освободить все занятые на нем физические экстенты. Это делается путем перераспределения занятых физических экстентов на другие физические тома. Следовательно, в группе томов должно быть достаточно свободных физических экстентов. Описание операции удаления физического тома приведено в разделе примеров.
   344 \subsection{Примеры}
   345 \subsubsection{Настройка LVM на трех SCSI дисках}
   346 В первом примере мы настроим логический том из трех SCSI дисков. Устройства дисков: /dev/sda, /dev/sdb и /dev/sdc.
   348 Перед добавлением в группу томов диски нужно инициализировать:
   350 \begin{verbatim}
   351 %# pvcreate /dev/sda
   352 %# pvcreate /dev/sdb
   353 %# pvcreate /dev/sdc
   354 \end{verbatim}
   356 После выполнения этих команд в начале каждого диска создастся область дескрипторов группы томов.
   358 Теперь создадим группу томов vg01, состоящую из этих дисков:
   360 \begin{verbatim}
   361 %# vgcreate vg01 /dev/sda /dev/sdb /dev/sdc/
   362 \end{verbatim}
   364 Проверим статус группы томов командой vgdisplay:
   366 \begin{verbatim}
   367 %# vgdisplay
   368 --- Volume Group ---
   369 VG Name            vg01
   370 VG Access          read/write
   371 VG Status          available/resizable
   372 VG #               1
   373 MAX LV             256
   374 Cur LV             0
   375 Open LV            0
   376 MAX LV Size        255.99 GB
   377 Max PV             256
   378 Cur PV             3
   379 Act PV             3
   380 VG Size            1.45 GB
   381 PE Size            4 MB
   382 Total PE           372
   383 Alloc PE / Size    0 / 0
   384 Free PE / Size     372/ 1.45 GB
   385 VG UUID            nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y
   386 \end{verbatim}
   388 Обратите внимание на первые три строки и строку с общим размером группы томов. Она должна соответствовать сумме всех трех дисков. Если всё в порядке, можно переходить к следующей задаче.
   390 \subsubsection{Создание логического тома}
   391 После успешного создания группы томов, можно начать создавать логические тома в этой группе. Размер тома может быть любым, но, естественно, не более всего размера группы томов. В этом примере мы создадим один логический том размером 1 Гб. Мы не будем использовать \dq{}расслоение\dq{}, поскольку при этом невозможно добавить диск в группу томов после создания логического тома, использующего данный алгоритм.
   393 \begin{verbatim}
   394 %# lvcreate -L1G -nusrlv vg01
   395 lvcreate -- doing automatic backup of "vg01"
   396 lvcreate -- logical volume "/dev/vg01/usrlv" successfully created
   397 \end{verbatim}
   399 \subsubsection{Создание файловой системы}
   400 Создадим на логическом томе файловую систему ext2:
   402 \begin{verbatim}
   403 %# mke2fs /dev/vg01/usrlv
   404 mke2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09
   405 Filesystem label=
   406 OS type: Linux
   407 Block size=4096 (log=2)
   408 Fragment size=4096 (log=2)
   409 131072 inodes, 262144 blocks
   410 13107 blocks (5.00%) reserved for the super user
   411 First data block=0
   412 9 block groups
   413 32768 blocks per group, 32768 fragments per group
   414 16384 inodes per group
   415 Superblock backups stored on blocks:
   416 32768, 98304, 163840, 229376
   418 Writing inode tables: done
   419 Writing superblocks and filesystem accounting information: done
   420 \end{verbatim}
   422 \subsubsection{Тестирование файловой системы}
   423 Смонтируйте логический том и проверьте все ли в порядке:
   425 \begin{verbatim}
   426 %# mount /dev/vg01/usrlv /mnt
   427 %# df
   428 Filesystem       1k-blocks   Used Available Use% Mounted on
   429 /dev/hda1          1311552 628824    616104  51% /
   430 /dev/vg01/usrlv    1040132     20    987276   0% /mnt
   431 \end{verbatim}
   433 Если вы все сделали правильно, у вас должен появиться логический том с файловой системой ext2, смонтированный в точке /mnt.
   435 \subsubsection{Создание логического тома с \dq{}расслоением\dq{}}
   436 Рассмотрим теперь вариант логического тома, использующего алгоритм \dq{}расслоения\dq{}. Как уже указывалось выше, минусом этого решения является невозможность добавления дополнительного диска.
   438 Процедура создания данного типа логического тома также требует инициализации устройств и добавления их в группу томов, как это уже было показано.
   440 Для создания логического тома с \dq{}расслоением\dq{} на три физических тома с блоком данных 4Кб выполните команду:
   442 \begin{verbatim}
   443 %# lvcreate -i3 -I4 -L1G -nvarlv vg01
   444 lvcreate -- rounding 1048576 KB to stripe boundary size 1056768 KB / 258 PE
   445 lvcreate -- doing automatic backup of "vg01"
   446 lvcreate -- logical volume "/dev/vg01/varlv"    successfully created
   447 \end{verbatim}
   449 После чего можно создавать файловую систему на логическом томе.
   451 \subsubsection{Добавление нового диска}
   452 Рассмотрим систему со следующей конфигурацией:
   454 \begin{verbatim}
   455 %# pvscan
   456 pvscan -- ACTIVE   PV "/dev/sda"  of VG "dev"   [1.95 GB / 0 free]
   457 pvscan -- ACTIVE   PV "/dev/sdb"  of VG "sales" [1.95 GB / 0 free]
   458 pvscan -- ACTIVE   PV "/dev/sdc"  of VG "ops"   [1.95 GB / 44 MB free]
   459 pvscan -- ACTIVE   PV "/dev/sdd"  of VG "dev"   [1.95 GB / 0 free]
   460 pvscan -- ACTIVE   PV "/dev/sde1" of VG "ops"   [996 MB / 52 MB free]
   461 pvscan -- ACTIVE   PV "/dev/sde2" of VG "sales" [996 MB / 944 MB free]
   462 pvscan -- ACTIVE   PV "/dev/sdf1" of VG "ops"   [996 MB / 0 free]
   463 pvscan -- ACTIVE   PV "/dev/sdf2" of VG "dev"   [996 MB / 72 MB free]
   464 pvscan -- total: 8 [11.72 GB] / in use: 8 [11.72 GB] / in no VG: 0 [0]
   466 %# df
   467 Filesystem           1k-blocks      Used Available Use% Mounted on
   468 /dev/dev/cvs           1342492    516468    757828  41% /mnt/dev/cvs
   469 /dev/dev/users         2064208   2060036      4172 100% /mnt/dev/users
   470 /dev/dev/build         1548144   1023041    525103  66% /mnt/dev/build
   471 /dev/ops/databases     2890692   2302417    588275  79% /mnt/ops/databases
   472 /dev/sales/users       2064208    871214   1192994  42% /mnt/sales/users
   473 /dev/ops/batch         1032088    897122    134966  86% /mnt/ops/batch
   474 \end{verbatim}
   476 Как видно из листинга, группы томов \dq{}dev\dq{} и \dq{}ops\dq{} практически заполнены. В систему добавили новый диск /dev/sdg. Его необходимо разделить между группами \dq{}ops\dq{} и \dq{}dev\dq{}, поэтому разобьем его на разделы:
   478 \begin{verbatim}
   479 %# fdisk /dev/sdg
   480 Device contains neither a valid DOS partition table, nor Sun or SGI
   481 disklabel Building a new DOS disklabel. Changes will remain in memory
   482 only, until you decide to write them. After that, of course, the
   483 previous content won't be recoverable.
   485 Command (m for help): n
   486 Command action
   487    e   extended
   488    p   primary partition (1-4)
   489 p
   490 Partition number (1-4): 1
   491 First cylinder (1-1000, default 1):
   492 Using default value 1
   493 Last cylinder or +size or +sizeM or +sizeK (1-1000, default 1000): 500
   495 Command (m for help): n
   496 Command action
   497    e   extended
   498    p   primary partition (1-4)
   499 p
   500 Partition number (1-4): 2
   501 First cylinder (501-1000, default 501): 
   502 Using default value 501
   503 Last cylinder or +size or +sizeM or +sizeK (501-1000, default 1000): 
   504 Using default value 1000
   506 Command (m for help): t
   507 Partition number (1-4): 1
   508 Hex code (type L to list codes): 8e
   509 Changed system type of partition 1 to 8e (Unknown)
   511 Command (m for help): t
   512 Partition number (1-4): 2
   513 Hex code (type L to list codes): 8e
   514 Changed system type of partition 2 to 8e (Unknown)
   516 Command (m for help): w
   517 The partition table has been altered!
   519 Calling ioctl() to re-read partition table.
   521 WARNING: If you have created or modified any DOS 6.x partitions,
   522 please see the fdisk manual page for additional information.
   523 \end{verbatim}
   525 Перед тем как добавить разделы в группу томов, их необходимо инициализировать:
   527 \begin{verbatim}
   528 %# pvcreate /dev/sdg1
   529 pvcreate -- physical volume "/dev/sdg1" successfully created
   531 # pvcreate /dev/sdg2
   532 pvcreate -- physical volume "/dev/sdg2" successfully created
   533 \end{verbatim}
   535 Теперь можно добавлять физические тома в группы томов:
   537 \begin{verbatim}
   538 %# vgextend ops /dev/sdg1
   539 vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
   540 vgextend -- doing automatic backup of volume group "ops"
   541 vgextend -- volume group "ops" successfully extended
   543 # vgextend dev /dev/sdg2
   544 vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
   545 vgextend -- doing automatic backup of volume group "dev"
   546 vgextend -- volume group "dev" successfully extended
   548 # pvscan
   549 pvscan -- reading all physical volumes (this may take a while...)
   550 pvscan -- ACTIVE   PV "/dev/sda"  of VG "dev"   [1.95 GB / 0 free]
   551 pvscan -- ACTIVE   PV "/dev/sdb"  of VG "sales" [1.95 GB / 0 free]
   552 pvscan -- ACTIVE   PV "/dev/sdc"  of VG "ops"   [1.95 GB / 44 MB free]
   553 pvscan -- ACTIVE   PV "/dev/sdd"  of VG "dev"   [1.95 GB / 0 free]
   554 pvscan -- ACTIVE   PV "/dev/sde1" of VG "ops"   [996 MB / 52 MB free]
   555 pvscan -- ACTIVE   PV "/dev/sde2" of VG "sales" [996 MB / 944 MB free]
   556 pvscan -- ACTIVE   PV "/dev/sdf1" of VG "ops"   [996 MB / 0 free]
   557 pvscan -- ACTIVE   PV "/dev/sdf2" of VG "dev"   [996 MB / 72 MB free]
   558 pvscan -- ACTIVE   PV "/dev/sdg1" of VG "ops"   [996 MB / 996 MB free]
   559 pvscan -- ACTIVE   PV "/dev/sdg2" of VG "dev"   [996 MB / 996 MB free]
   560 pvscan -- total: 10 [13.67 GB] / in use: 10 [13.67 GB] / in no VG: 0 [0]
   561 \end{verbatim}
   563 Наконец, увеличим размеры логических томов и расширим файловые системы до размеров логических томов:
   565 \begin{verbatim}
   566 %# umount /mnt/ops/batch
   567 %# umount /mnt/dev/users
   569 # export E2FSADM_RESIZE_CMD=ext2resize
   570 # e2fsadm /dev/ops/batch -L+500M
   571 e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
   572 Pass 1: Checking inodes, blocks, and sizes
   573 Pass 2: Checking directory structure
   574 Pass 3: Checking directory connectivity
   575 Pass 4: Checking reference counts
   576 Pass 5: Checking group summary information
   577 /dev/ops/batch: 11/131072 files (0.0<!--  non-contiguous), 4127/262144 blocks
   578 lvextend -- extending logical volume "/dev/ops/batch" to 1.49 GB
   579 lvextend -- doing automatic backup of volume group "ops"
   580 lvextend -- logical volume "/dev/ops/batch" successfully extended
   582 ext2resize v1.1.15 - 2000/08/08 for EXT2FS 0.5b
   583 e2fsadm -- ext2fs in logical volume "/dev/ops/batch" successfully extended to 1.49 GB
   585 # e2fsadm /dev/dev/users -L+900M
   586 e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
   587 Pass 1: Checking inodes, blocks, and sizes
   588 Pass 2: Checking directory structure
   589 Pass 3: Checking directory connectivity
   590 Pass 4: Checking reference counts
   591 Pass 5: Checking group summary information
   592 /dev/dev/users: 12/262144 files (0.0% non-contiguous), 275245/524288 blocks
   593 lvextend -- extending logical volume "/dev/dev/users" to 2.88 GB
   594 lvextend -- doing automatic backup of volume group "dev"
   595 lvextend -- logical volume "/dev/dev/users" successfully extended
   597 ext2resize v1.1.15 - 2000/08/08 for EXT2FS 0.5b
   598 e2fsadm -- ext2fs in logical volume "/dev/dev/users" successfully extended to 2.88 GB
   599 \end{verbatim}
   601 Нам осталось смонтировать системы и посмотреть их размеры:
   603 \begin{verbatim}
   604 %# mount /dev/ops/batch
   605 %# mount /dev/dev/users
   606 %# df
   607 Filesystem           1k-blocks      Used Available Use% Mounted on
   608 /dev/dev/cvs           1342492    516468    757828  41% /mnt/dev/cvs
   609 /dev/dev/users         2969360   2060036    909324  69% /mnt/dev/users
   610 /dev/dev/build         1548144   1023041    525103  66% /mnt/dev/build
   611 /dev/ops/databases     2890692   2302417    588275  79% /mnt/ops/databases
   612 /dev/sales/users       2064208    871214   1192994  42% /mnt/sales/users
   613 /dev/ops/batch         1535856    897122    638734  58% /mnt/ops/batch
   614 \end{verbatim}
   616 \subsubsection{Резервное копирование при помощи \dq{}снапшотов\dq{}}
   617 Развивая приведенный пример, предположим, что нам нужно выполнить резервирование базы данных. Для этой задачи мы будем использовать устройство-\dq{}снапшот\dq{}.
   619 Этот тип устройства представляет собой доступную только на чтение копию другого тома на момент выполнения процедуры \dq{}снапшот\dq{}. Это дает возможность продолжать работу не заботясь о том, что данные могут измениться в момент резервного копирования. Следовательно, нам не нужно останавливать работу базы данных на время выполнения резервного копирования. Останов нужен только на момент создания устройства-\dq{}снапшот\dq{}, который значительно короче самого копированя.
   621 В группе томов ops у нас осталось около 600Мб свободного места, его мы и задействуем для \dq{}снапшот\dq{}-устройства. Размер \dq{}снапшот\dq{}-устройства не регламентируется, но должен быть достаточен для сохранения всех изменений, которые могут  произойти с томом, с которого он сделан, за время жизни снапшота. 600Мб должно хватить для наших целей:
   623 \begin{verbatim}
   624 %# lvcreate -L592M -s -n dbbackup /dev/ops/databases 
   625 lvcreate -- WARNING: the snapshot must be disabled if it gets full
   626 lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/ops/dbbackup"
   627 lvcreate -- doing automatic backup of "ops"
   628 lvcreate -- logical volume "/dev/ops/dbbackup" successfully create
   629 \end{verbatim}
   631 Если вы делаете \dq{}снапшот\dq{} файловой системы XFS, нужно выполнить на смонтированной файловой системе команду xfs\_freeze, и лишь после этого создавать \dq{}снапшот\dq{}:
   633 \begin{verbatim}
   634 %# xfs_freeze -f /mnt/point; lvcreate -L592M -s -n dbbackup /dev/ops/databases; xfs_freeze -u /mnt/point
   635 \end{verbatim}
   637 Если устройство-\dq{}снапшот\dq{} полностью заполняется, оно автоматически деактивируется. В этом случае \dq{}снапшот\dq{} не может более использоваться, потому крайне важно выделять достаточное пространство для него.
   639 После того как мы создали \dq{}снапшот\dq{}, его нужно смонтировать:
   641 \begin{verbatim}
   642 %# mkdir /mnt/ops/dbbackup
   643 %# mount /dev/ops/dbbackup /mnt/ops/dbbackup
   644 mount: block device /dev/ops/dbbackup is write-protected, mounting read-only
   645 \end{verbatim}
   647 Если вы работаете с файловой системой XFS, вам будет нужно при монтировании указать опцию nouuid:
   649 \begin{verbatim}
   650 %# mount -o nouuid,ro /dev/ops/dbbackup /mnt/ops/dbbackup
   651 \end{verbatim}
   653 Выполним резервное копирование раздела:
   655 \begin{verbatim}
   656 %# tar -cf /dev/rmt0 /mnt/ops/dbbackup
   657 tar: Removing leading `/' from member names
   658 \end{verbatim}
   660 После выполнения необходимых процедур, нужно удалить устройство-\dq{}снапшот\dq{}:
   662 \begin{verbatim}
   663 %# umount /mnt/ops/dbbackup
   664 %# lvremove /dev/ops/dbbackup 
   665 lvremove -- do you really want to remove "/dev/ops/dbbackup"? [y/n]: y
   666 lvremove -- doing automatic backup of volume group "ops"
   667 lvremove -- logical volume "/dev/ops/dbbackup" successfully removed
   668 \end{verbatim}
   670 Подробнее:
   671 \begin{itemize}
   672 \item \htmladdnormallinkfoot{Consistent backup with Linux Logical Volume Manager (LVM) snapshots}{http://www.cyberciti.biz/tips/consistent-backup-linux-logical-volume-manager-snapshots.html} (англ.)
   673 \item \htmladdnormallinkfoot{Back Up (And Restore) LVM Partitions With LVM Snapshots}{http://www.howtoforge.com/linux\_lvm\_snapshots} (англ.)
   674 \item \htmladdnormallinkfoot{Linux Kernel Documentation: device-mapper/snapshot.txt}{http://www.mjmwired.net/kernel/Documentation/device-mapper/snapshot.txt} (англ.)
   675 \end{itemize}
   677 Резервное копирование MySQL и LVM:
   678 \begin{itemize}
   679 \item \htmladdnormallinkfoot{Using LVM for MySQL Backup and Replication Setup}{http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/} (англ.)
   680 \item \htmladdnormallinkfoot{MySQL Backups using LVM Snapshots}{http://mike.kruckenberg.com/archives/2006/05/mysql\_backups\_u.html} (англ.)
   681 \item \htmladdnormallinkfoot{mylvmbackup}{http://lenz.homelinux.org/mylvmbackup/} (англ.)
   682 \end{itemize}
   684 \subsubsection{Удаление диска из группы томов}
   685 Скажем, вы хотите освободить один диск из группы томов. Для этого необходимо выполнить процедуру переноса использующихся физических экстентов. Естественно, что на других физических томах должно быть достаточно свободных физических экстентов.
   687 Выполните команду:
   689 \begin{verbatim}
   690 %# pvmove /dev/hdb
   691 pvmove -- moving physical extents in active volume group "dev"
   692 pvmove -- WARNING: moving of active logical volumes may cause data loss!
   693 pvmove -- do you want to continue? [y/n] y
   694 pvmove -- 249 extents of physical volume "/dev/hdb" successfully moved
   695 \end{verbatim}
   697 Учтите, что операция переноса физических экстентов занимает много времени. Если вы хотите наблюдать за процессом переноса экстентов, укажите в команде ключ -v .
   699 После окончания процедуры переноса, удалите физический том из группы томов:
   701 \begin{verbatim}
   702 %# vgreduce dev /dev/hdb
   703 vgreduce -- doing automatic backup of volume group "dev"
   704 vgreduce -- volume group "dev" successfully reduced by physical volume:
   705 vgreduce -- /dev/hdb
   706 \end{verbatim}
   708 Теперь данный диск может быть физически удален из системы или использован в других целях. Например, добавлен в другую группу томов.
   710 \subsubsection{Перенос группы томов на другую систему}
   711 Физический перенос группы томов на другую систему организовывается при помощи команд vgexport и vgimport.
   713 Сперва необходимо размонтировать все логические тома группы томов и деактивировать группу:
   715 \begin{verbatim}
   716 %# unmount /mnt/design/users
   717 %# vgchange -an design
   718 vgchange -- volume group "design" successfully deactivated
   719 \end{verbatim}
   721 После этого экспортируем группу томов. Процедура экспорта запрещает доступ к группе на данной системе и готовит ее к удалению:
   723 \begin{verbatim}
   724 %# vgexport design
   725 vgexport -- volume group "design" sucessfully exported
   726 \end{verbatim}
   728 Теперь можно выключить машину, отсоединить диски, составляющие группу томов и подключить их к новой системе. Остается импортировать группу томов на новой машине и смонтировать логические тома:
   730 \begin{verbatim}
   731 %# pvscan
   732 pvscan -- reading all physical volumes (this may take a while...)
   733 pvscan -- inactive PV "/dev/sdb1"  is in EXPORTED VG "design" [996 MB / 996 MB free]
   734 pvscan -- inactive PV "/dev/sdb2"  is in EXPORTED VG "design" [996 MB / 244 MB free]
   735 pvscan -- total: 2 [1.95 GB] / in use: 2 [1.95 GB] / in no VG: 0 [0]
   736 # vgimport design /dev/sdb1 /dev/sdb2
   737 vgimport -- doing automatic backup of volume group "design"
   738 vgimport -- volume group "design" successfully imported and activated
   740 %# mkdir -p /mnt/design/users
   741 %# mount /dev/design/users /mnt/design/users
   742 \end{verbatim}
   744 Все! Группа томов готова к использованию на новой системе.
   746 \subsubsection{Конвертация корневой файловой системы в LVM}
   747 В данном примере имеется установленная система на двух разделах: корневом и /boot. Диск размером 2Гб разбит на разделы следующим образом:
   749 \begin{verbatim}
   750 /dev/hda1  /boot 
   751 /dev/hda2  swap
   752 /dev/hda3  /
   753 \end{verbatim}
   755 Корневой раздел занимает все пространство, оставшееся после выделения swap и /boot разделов. Главное требование, предъявляемое к корневому разделу в нашем примере: он должен быть более чем на половину пуст. Это нужно, чтобы мы могли создать его копию. Если это не так, нужно будет использовать дополнительный диск. Процесс при этом останется тот же, но уменьшать корневой раздел будет не нужно.
   757 Для изменения размера файловой системы мы будем использовать утилиту GNU parted.
   759 Загрузитесь в однопользовательском режиме, это важно. Запустите программу parted для уменьшения размера корневого раздела. Ниже приведен пример диалога с утилитой parted:
   761 \begin{verbatim}
   762 # parted /dev/hda
   763 (parted) p
   764 .
   765 .
   766 .
   767 \end{verbatim}
   769 Изменим размер раздела:
   771 \begin{verbatim}
   772 (parted) resize 3 145 999
   773 \end{verbatim}
   775 Первое число -- это номер раздела (hda3), второе -- начало раздела hda3, не меняйте его. Последнее число -- это конец раздела. Укажите приблизительно половину текущего размера раздела.
   777 Создадим новый раздел:
   779 \begin{verbatim}
   780 (parted) mkpart primary ext2 1000 1999
   781 \end{verbatim}
   783 Этот раздел будет содержать LVM. Он должен начинаться после раздела hda3 и заканчиваться в конце диска.
   785 Выйдите из утилиты parted:
   787 \begin{verbatim}
   788 (parted) q
   789 \end{verbatim}
   791 Перезагрузите систему. Убедитесь, что ваше ядро содержит необходимые установки. Для поддержки LVM должны быть включены параметры CONFIG\_BLK\_DEV\_RAM и CONFIG\_BLK\_DEV\_INITRD.
   793 Для созданного раздела необходимо изменить тип на LVM (8e). Поскольку parted не знает такого типа, воспользуемся утилитой fdisk:
   795 \begin{verbatim}
   796 %# fdisk /dev/hda
   797 Command (m for help): t
   798 Partition number (1-4): 4
   799 Hex code (type L to list codes): 8e
   800 Changed system type of partition 4 to 8e (Unknown)
   801 Command (m for help): w
   802 \end{verbatim}
   804 Инициализируем LVM, физический том; создаем группу томов и логический том для корневого раздела:
   806 \begin{verbatim}
   807 %# vgscan
   808 %# pvcreate /dev/hda4
   809 %# vgcreate vg /dev/hda4
   810 %# lvcreate -L250M -n root vg
   811 \end{verbatim}
   813 Создадим теперь файловую систему на логическом томе и перенесем туда содержимое корневого каталога:
   815 \begin{verbatim}
   816 %# mke2fs /dev/vg/root
   817 %# mount /dev/vg/root /mnt/
   818 %# find / -xdev | cpio -pvmd /mnt
   819 \end{verbatim}
   821 Отредактируйте файл /mnt/etc/fstab на логическом томе соответствующем образом. Например, строку:
   823 \begin{verbatim}
   824 /dev/hda3       /    ext2       defaults 1 1
   825 \end{verbatim}
   827 замените на:
   829 \begin{verbatim}
   830 /dev/vg/root    /    ext2       defaults 1 1
   831 \end{verbatim}
   833 Создаем образ initrd, поддерживающий LVM:
   835 \begin{verbatim}
   836 %# lvmcreate_initrd
   837 Logical Volume Manager 1.0.6 by Heinz Mauelshagen  25/10/2002
   838 lvmcreate_initrd -- make LVM initial ram disk /boot/initrd-lvm-2.4.20-inp1-up-rootlvm.gz
   840 lvmcreate_initrd -- finding required shared libraries
   841 lvmcreate_initrd -- stripping shared libraries
   842 lvmcreate_initrd -- calculating initrd filesystem parameters
   843 lvmcreate_initrd -- calculating loopback file size
   844 lvmcreate_initrd -- making loopback file (6491 kB)
   845 lvmcreate_initrd -- making ram disk filesystem (19125 inodes)
   846 lvmcreate_initrd -- mounting ram disk filesystem
   847 lvmcreate_initrd -- creating new /etc/modules.conf
   848 lvmcreate_initrd -- creating new modules.dep
   849 lvmcreate_initrd -- copying device files to ram disk
   850 lvmcreate_initrd -- copying initrd files to ram disk
   851 lvmcreate_initrd -- copying shared libraries to ram disk
   852 lvmcreate_initrd -- creating new /linuxrc
   853 lvmcreate_initrd -- creating new /etc/fstab
   854 lvmcreate_initrd -- ummounting ram disk
   855 lvmcreate_initrd -- creating compressed initrd /boot/initrd-lvm-2.4.20-inp1-up-rootlvm.gz
   856 \end{verbatim}
   858 Внимательно изучите вывод команды. Обратите внимание на имя
   859 нового образа и его размер. Отредактируйте файл /etc/lilo.conf. Он
   860 должен выглядеть приблизительно следующим образом:
   862 \begin{verbatim}
   863 image   = /boot/KERNEL_IMAGE_NAME
   864 label   = lvm
   865 root    = /dev/vg/root
   866 initrd  = /boot/INITRD_IMAGE_NAME
   867 ramdisk = 8192
   868 \end{verbatim}
   870 KERNEL\_IMAGE\_NAME -- имя ядра, поддерживающего LVM. INITRD\_IMAGE\_NAME -- имя образа initrd, созданного командой lvmcreate\_initrd. Возможно, вам будет нужно увеличить значение ramdisk, если у вас достаточно большая конфигурация LVM, но значения 8192 должно хватить в большинстве случаев. Значение по умолчанию параметра ramdisk равно 4096. Если сомневаетесь, проверьте вывод команды lvmcreate\_initrd в строке lvmcreate\_initrd -- making loopback file (6189 kB).
   872 После этого файл lilo.conf нужно скопировать и на логический том:
   874 \begin{verbatim}
   875 %# cp /etc/lilo.conf /mnt/etc/
   876 \end{verbatim}
   878 Выполните команду lilo:
   880 \begin{verbatim}
   881 %# lilo
   882 \end{verbatim}
   884 Перезагрузитесь и выберите образ lvm. Для этого введите \dq{}lvm\dq{} в ответ на приглашение LILO. Система должна загрузится, а корневой раздел будет находиться на логическом томе.
   886 После того как вы убедитесь, что все работает нормально, образ lvm нужно сделать загружаемым по умолчанию. Для этого укажите в конфигурационном файле LILO строку default=lvm, и выполните команду lilo.
   888 Наконец, добавьте оставшийся старый корневой раздел в группу томов. Для этого измените тип раздела утилитой fdisk на 8е, и выполните команды:
   890 \begin{verbatim}
   891 %# pvcreate /dev/hda3
   892 %# vgextend vg /dev/hda3
   893 \end{verbatim}
   897 \subsection{Дополнительные вопросы по LVM}
   899 \subsubsection{Дисковые разделы и LVM внутри LVM}
   900 LVM может находиться рекурсивно внутри логического
   901 тома LVM.
   903 Например, пусть есть три логических тома: \textit{LV1}, \textit{LV2} и \textit{LV3}.
   904 Один из которых, LV2 разбит на разделы,
   905 каждый из которых является физическим томом LVM,
   906 который в свою очередь объединены в группу томов,
   907 на которых созданы логические тома и так далее.
   909 \begin{verbatim}
   910   LV1                LV2                LV3
   911  ...--++----------------------------+ +--....
   912       ||+-------------------------+ | |
   913       |||            LVM          | | |
   914       ||+-------------------------+ | |
   915  ...--++----------------------------+ +--.....
   916 \end{verbatim}
   918 Такая ситуация очень легко может возникнуть
   919 при использовании виртуальных машин,
   920 например в том случае, если том LV2
   921 выдан как диск виртуальной машине Xen или эмулятору QEMU.
   923 Может возникнуть необходимость залезть
   924 внутрь системы томов, которые установлены внутрь логического тома.
   925 Например, это может произойти в случае, когда
   926 виртуальная машина в результате сбоя или по какой-то другой причине
   927 не загружается, а нужно добраться до её данных
   928 (напомним, что всё это при условии, что LVM используется не только
   929 снуражи, то есть в домене 0, но и внутри, то есть в домене U).
   931 Решение, если говорить кратко, заключается в том,
   932 что бы использовать программу \textbf{kpartx} из пакета \textbf{multipath-tools},
   933 которая даёт возможность строить карты устройств
   934 (device maps) для разделов.
   936 Далее процедура использования \textbf{kpartx}
   937 описывается подробно.
   939 Блочное устройство, внутри которого находятся
   940 тома LVM может быть любым, в частности,
   941 это может быть том LVM, том EVMS, простой дисковый раздел или физическое устройство.
   943 Убедитесь что пакет multipath-tools установлен:
   945 \begin{verbatim}
   946 %# apt-get install multipath-tools
   947 \end{verbatim}
   949 Посмотрите как выполнено разбинение на разделы:
   951 \begin{verbatim}
   952 dom0:~ # fdisk -l /dev/evms/san2/vm3
   953 Disk /dev/evms/san2/vm3: 5368 MB, 5368708096 bytes
   954 255 heads, 63 sectors/track, 652 cylinders
   955 Units = cylinders of 16065 * 512 = 8225280 bytes
   957               Device Boot      Start         End      Blocks   Id  System
   958 /dev/evms/san2/vm3p1   *           1           9       72261   83  Linux
   959 /dev/evms/san2/vm3p2              10         652     5164897+   f  W95 Ext'd (LBA)
   960 /dev/evms/san2/vm3p5              10          75      530113+  82  Linux swap / Solaris
   961 /dev/evms/san2/vm3p6              76         493     3357553+  83  Linux
   962 /dev/evms/san2/vm3p7             494         652     1277136   83  Linux
   963 \end{verbatim}
   965 Создайте карту устройств для блочного устройства:
   967 \begin{verbatim}
   968 dom0:~ # kpartx -a /dev/evms/san2/vm3
   969 \end{verbatim}
   971 Карты находятся здесь:
   973 \begin{verbatim}
   974 %# ls -l /dev/mapper
   975 total 0
   976 lrwxrwxrwx 1 root root      16 Aug 26 16:28 control -> ../device-mapper
   977 brw------- 1 root root 253,  1 Aug 26 16:28 mpath1
   978 brw------- 1 root root 253,  0 Aug 26 16:28 mpath2
   979 brw------- 1 root root 253, 13 Aug 29 08:55 san2|vm3p1
   980 brw------- 1 root root 253, 14 Aug 29 08:55 san2|vm3p2
   981 brw------- 1 root root 253, 15 Aug 29 08:55 san2|vm3p5
   982 brw------- 1 root root 253, 16 Aug 29 08:55 san2|vm3p6
   983 brw------- 1 root root 253, 17 Aug 29 08:55 san2|vm3p7
   984 \end{verbatim}
   986 Имена выглядят несколько странно, но вообще это нормально.
   988 Можно попробовать смонтировать раздел:
   990 \begin{verbatim}
   991 %# mount -o rw /dev/mapper/san2\|vm3p6 /mnt
   992 \end{verbatim}
   994 В данном случае была смонтирована корневая файловая система
   995 виртуальной машины:
   997 \begin{verbatim}
   998 %# ls -l /mnt
   999 total 96
  1000 dr-xr-xr-x  3 root root  4096 Aug 28 10:12 automount
  1001 drwxr-xr-x  2 root root  4096 Aug 25 16:51 bin
  1002 drwxr-xr-x  2 root root  4096 Aug 25 16:45 boot
  1003 drwxr-xr-x  5 root root  4096 Aug 25 16:45 dev
  1004 drwxr-xr-x 69 root root  8192 Aug 29 08:53 etc
  1005 drwxr-xr-x  2 root root  4096 May  4 01:43 home
  1006 drwxr-xr-x 11 root root  4096 Aug 25 17:10 lib
  1007 drwx------  2 root root 16384 Aug 25 16:45 lost+found
  1008 drwxr-xr-x  2 root root  4096 May  4 01:43 media
  1009 drwxr-xr-x  3 root root  4096 Aug 28 15:08 mnt
  1010 drwxr-xr-x  4 root root  4096 Aug 25 16:49 opt
  1011 drwxr-xr-x  2 root root  4096 Aug 25 16:45 proc
  1012 drwx------ 10 root root  4096 Aug 28 14:56 root
  1013 drwxr-xr-x  3 root root  8192 Aug 25 16:52 sbin
  1014 drwxr-xr-x  4 root root  4096 Aug 25 16:45 srv
  1015 -rw-r--r--  1 root root     0 Aug 29 08:53 success
  1016 drwxr-xr-x  3 root root  4096 Aug 25 16:45 sys
  1017 drwxrwxrwt  6 root root  4096 Aug 29 08:49 tmp
  1018 drwxr-xr-x 12 root root  4096 Aug 25 16:50 usr
  1019 drwxr-xr-x  3 root root  4096 Aug 25 16:54 var
  1020 \end{verbatim}
  1022 Аналогичным образом монтируем остальные разделы:
  1024 \begin{verbatim}
  1025 %# mount -o rw /dev/mapper/san2\|vm3p1 /mnt/boot
  1026 %# mount -o rw /dev/mapper/san2\|vm3p7 /mnt/var
  1027 \end{verbatim}
  1029 С разделами можно работать как обычно.
  1031 По завершению работы нужно
  1032 \begin{itemize}
  1033 \item  размонтировать разделы;
  1034 \item  удалить карты устройств.
  1035 \end{itemize}
  1037 Произвести эти действия
  1038 особенно важно, если разделы принадлежат какой-либо виртуальной
  1039 машине, которую вы собираетесь запускать.
  1041 \begin{verbatim}
  1042 %# umount /mnt/var
  1043 %# umount /mnt/boot
  1044 %# umount /mnt
  1045 %# kpartx -d /dev/evms/san2/vm3 
  1047 %# ls -l /dev/mapper
  1048 total 0
  1049 lrwxrwxrwx 1 root root     16 Aug 26 16:28 control > ../device-mapper
  1050 brw------- 1 root root 253, 1 Aug 26 16:28 mpath1
  1051 brw------- 1 root root 253, 0 Aug 26 16:28 mpath2
  1052 \end{verbatim}
  1054 При условии что разделы находятся не на блочном устройстве,
  1055 а в обычно файле, сначала нужно воспользоваться
  1056 программой \textit{losetup}.
  1058 В данном примере \textit{loop0} это первое свободное loopback-устройство,
  1059 но возможно, что оно будет занято, и тогда вместо loop0 нужно будет использовать \textit{loopX} с более выскоим номерм X:
  1061 \begin{verbatim}
  1062 %# cd /etc/xen/images
  1063 %# losetup /dev/loop0 /xen/images/vm1.img 
  1064 %# losetup -a
  1065 /dev/loop0: [6806]:318859 (vm1.img)
  1067 %# fdisk -l /dev/loop0 
  1068 Disk /dev/loop0: 1638 MB, 1638400000 bytes 
  1069 255 heads, 63 sectors/track, 199 cylinders 
  1070 Units = cylinders of 16065 * 512 = 8225280 bytes 
  1071       Device Boot      Start         End      Blocks   Id  System 
  1072 /dev/loop0p1   *           1           9       72261   83  Linux 
  1073 /dev/loop0p2              10         199     1526175    5  Extended 
  1074 /dev/loop0p5              10          26      136521   82  Linux swap / Solaris 
  1075 /dev/loop0p6              27         151     1004031   83  Linux 
  1076 /dev/loop0p7             152         199      385528+  83  Linux 
  1078 %# kpartx -a /dev/loop0 
  1079 %# ls -l /dev/mapper/ 
  1080 total 0 
  1081 lrwxrwxrwx 1 root root      16 Sep 12 15:38 control -> ../device-mapper 
  1082 brw------- 1 root root 253, 15 Sep 30 13:19 loop0p1 
  1083 brw------- 1 root root 253, 16 Sep 30 13:19 loop0p2 
  1084 brw------- 1 root root 253, 17 Sep 30 13:19 loop0p5 
  1085 brw------- 1 root root 253, 18 Sep 30 13:19 loop0p6 
  1086 brw------- 1 root root 253, 19 Sep 30 13:19 loop0p7
  1087 \end{verbatim}
  1089 Можно монтировать, копировать, восстанаивливать, форматировать
  1090 эти разделы, короче, делать с ними всё, что делается с обучными дисковыми разделами.
  1092 \begin{verbatim}
  1093 %# mount /dev/mapper/loop0p6 /mnt
  1094 %# mount /dev/mapper/loop0p1 /mnt/boot
  1095 %# mount /dev/mapper/loop0p7 /mnt/var
  1096 %# mount 
  1097 -snip-
  1098 /dev/mapper/loop0p6 on /mnt type ext3 (rw) 
  1099 /dev/mapper/loop0p1 on /mnt/boot type ext2 (rw) 
  1100 /dev/mapper/loop0p7 on /mnt/var type ext3 (rw)
  1101 \end{verbatim}
  1103 Другое решение:
  1105 \begin{verbatim}
  1106 %# lomount -diskimage vm1.img -partition 1  /mnt
  1107 %# mount 
  1108 -snip-
  1109 /xen/images/vm1.img on /mnt type ext2 (rw,loop=/dev/loop0,offset=32256)
  1110 \end{verbatim}
  1112 С одной стороны при таком подходе:
  1113 \begin{itemize}
  1114 \item  не нужно вручную подключать loopback-устройства;
  1115 \item  не нужно использовать \textit{kpartx};
  1116 \end{itemize}
  1117 Но с другой стороны:
  1118 \begin{itemize}
  1119 \item  это решение позволяет смонтировать только простые разделы, размещённые внутри тома LVM.
  1120 \end{itemize}
  1122 Если внутри логического тома выполнено другое разбиение,
  1123 такой подход не поможет.
  1125 Если внутри тома находится расширенный раздел, подход работает,
  1126 но требует дополнительных манипуляций:
  1128 \begin{verbatim}
  1129 %# fdisk -l -u /xen/images/vm1.img 
  1130 You must set cylinders. 
  1131 You can do this from the extra functions menu. 
  1132 Disk vm1.img: 0 MB, 0 bytes 
  1133 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors 
  1134 Units = sectors of 1 * 512 = 512 bytes 
  1135   Device Boot      Start         End      Blocks   Id  System 
  1136 vm1.img1   *          63      144584       72261   83  Linux 
  1137 vm1.img2          144585     3196934     1526175    5  Extended 
  1138 vm1.img5          144648      417689      136521   83  Linux 
  1139 vm1.img6          417753     2425814     1004031   83  Linux 
  1140 vm1.img7         2425878     3196934      385528+  83  Linux
  1141 \end{verbatim}
  1143 Найти начало интересующего раздела можно путём
  1144 умножения значения поля \textit{Start} (показанного fdiks) на 512.
  1146 417753\(\ast{}\)512=213889536
  1148 Если мы хотим смонтировать корневой раздел:
  1150 \begin{verbatim}
  1151 %# mount -o loop,offset=213889536 /xen/images/vm1.img /mnt
  1152 %# mount 
  1153 -snip-
  1154 /xen/images/vm1.img on /mnt type ext3 (rw,loop=/dev/loop0,offset=213889536)
  1155 \end{verbatim}
  1157 \subsubsection{Создание зашифрованных томов LVM}
  1158 Пример создания зашифрованного тома:
  1160 \begin{verbatim}
  1161 %# cryptsetup -y -s 256 -c aes-cbc-essiv:sha256 luksFormat /dev/hda3
  1162 %# cryptsetup luksOpen /dev/hda3 lukspace
  1163 %# pvcreate /dev/mapper/lukspace
  1164 %# vgcreate vg /dev/mapper/lukspace
  1165 %# lvcreate -L10G -nroot vg
  1166 %# lvcreate -l 100%FREE -nmyspace vg
  1167 \end{verbatim}
  1169 Подробнее:
  1170 \begin{itemize}
  1171 \item \htmladdnormallinkfoot{Recover Data From RAID1 LVM Partitions With Knoppix Linux LiveCD}{http://www.howtoforge.com/recover\_data\_from\_raid\_lvm\_partitions} (англ.)
  1172 \item \htmladdnormallinkfoot{LVM Recovery Tale}{http://codeworks.gnomedia.com/archives/2005/general/lvm\_recovery/} (англ.)
  1173 \item \htmladdnormallinkfoot{Recovery of RAID and LVM2 Volumes}{http://www.linuxjournal.com/article/8874} (англ.)
  1174 \end{itemize}
  1177 \subsubsection{Восстановления LVM после сбоя}
  1178 \begin{itemize}
  1179 \item \htmladdnormallinkfoot{Recover Data From RAID1 LVM Partitions With Knoppix Linux LiveCD}{http://www.howtoforge.com/recover\_data\_from\_raid\_lvm\_partitions}(англ.)
  1180 \item \htmladdnormallinkfoot{LVM Recovery Tale}{http://codeworks.gnomedia.com/archives/2005/general/lvm\_recovery/} (англ.)
  1181 \item \htmladdnormallinkfoot{Recovery of RAID and LVM2 Volumes}{http://www.linuxjournal.com/article/8874} (англ.)
  1182 \end{itemize}
  1185 \subsubsection{Определение интенсивности использования томов LVM}
  1187 Определить интенсивность ввода/вывода на каждый том LVM
  1188 можно с помощью программы \textbf{iostat} (пакет \textit{sysstat}).
  1190 Формат вызова:
  1191 \begin{verbatim}
  1192     iostat [опции] интервал повторения
  1193 \end{verbatim}
  1195 Например, мы хотим наблюдать за интенсивностью ввода вывода на протяжении
  1196 одного часа, с интервалом в 10 секунд:
  1197 \begin{verbatim}
  1198     %# iostat 10 360
  1199 \end{verbatim}
  1200 Или в расширенном виде:
  1201 \begin{verbatim}
  1202     %# iostat -dx 10 360
  1203 \end{verbatim}
  1206 Программа iostat показывает 
  1207 имена томов, которые чаще всего оказываются неинформативными
  1208 для администратора:
  1209 \begin{verbatim}
  1210 $ iostat -dx
  1211 Linux 2.6.18-4-xen-686 (cholpon...
  1213 Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s av...
  1214 sda               0,44   128,55    1,77    3,36    57,23  1055,45   ...
  1215 sdb               0,08     0,00    0,05    0,00     0,60     0,00   ...
  1216 dm-0              0,00     0,00    0,03    0,00     0,22     0,00   ...
  1217 dm-1              0,00     0,00    0,03    0,00     0,21     0,00   ...
  1218 dm-2              0,00     0,00    0,28  123,53    13,62   988,24   ...
  1219 dm-3              0,00     0,00    0,02    0,48     1,06     3,83   ...
  1220 dm-4              0,00     0,00    0,00    0,00     0,01     0,00   ...
  1221 dm-5              0,00     0,00    0,03    0,00     0,22     0,00   ...
  1222 dm-6              0,00     0,00    0,20    2,48     3,52    19,85   ...
  1223 \end{verbatim}
  1225 Здесь, видно, напимер, что нагрузка на \textit{dm-2} выше чем на другие LVM
  1226 тома, но сразу не видно, какому именно тому соответствует \textit{dm-2}.
  1227 Это можно выяснить вручную:
  1229 \begin{verbatim}
  1230 %$ ls -l /dev/dm-2
  1231 brw-rw---- 1 root disk 254, 2 Фев 14 12:49 /dev/dm-2
  1232 %$ ls -l /dev/mapper/| grep '254,\s*2'
  1233 brw-rw---- 1 root disk 254,  2 Фев 14 12:49 MAIN-xen
  1234 \end{verbatim}
  1236 Однако выяснять так каждый раз для каждой записи
  1237 неудобно. Было бы лучше, если бы имена были сразу
  1238 в таблице были представлены правильно.
  1240 Функция \textbf{dm\_convert}, представленная ниже, 
  1241 преобразует имена томов к понятной форме.
  1242 Она работает как фильтр: обрабатывает стандартный поток ввода,
  1243 и отправляет результат на поток вывода.
  1244 При замене учитывается то, что имена могут иметь разную
  1245 длину, и что данные должны сохранить форматирование.
  1246 \begin{verbatim}
  1247 dm_convert() {
  1248 sed "s/ /      /; $( \
  1249 LANG=C ls -l /dev/dm* /dev/mapper/* | grep 25[34], \
  1250 | sort -n -k +6 | awk '{print $10}' \
  1251 | sed 's@/dev/@@; s@mapper/@@'  \
  1252 | perl -ne '$a=$_;$b=<>;chomp $a; chomp $b; '\
  1253   '$p=q(.)x(length($b)-length(a)-4); print qq(s/$a $p/$b/;) ')"
  1254 }
  1255 \end{verbatim}
  1256 \noindent теперь вы можете пропускать вывод \textbf{iostat} через \textbf{dm\_convert}
  1257 и получать сразу понятные результаты:
  1258 \begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/0/03/Iostat-dm.png}}\\ \textit{Замер нагрузки на подсистему ввода/вывода с помощью \textit{iostat}}\end{center}
  1260 \begin{verbatim}
  1261 $ iostat -dx 1 100 | dm_convert 
  1262 Linux 2.6.18-4-xen-686 (cholpon)        14.02.2008
  1264 Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s av...
  1265 sda               0,43   124,98    1,74    3,33    55,91  1026,56   ...
  1266 sdb               0,08     0,00    0,05    0,00     0,58     0,00   ...
  1267 VG2-music         0,00     0,00    0,03    0,00     0,22     0,00   ...
  1268 VG2-xentaur       0,00     0,00    0,03    0,00     0,20     0,00   ...
  1269 MAIN-xen          0,00     0,00    0,27  120,02    13,23   960,13   ...
  1270 MAIN-backup       0,00     0,00    0,02    0,47     1,04     3,74   ...
  1271 MAIN-movies       0,00     0,00    0,00    0,00     0,01     0,00   ...
  1272 MAIN-iso          0,00     0,00    0,03    0,00     0,21     0,00   ...
  1273 MAIN-home         0,00     0,00    0,19    2,47     3,43    19,74   ...
  1274 ...
  1275 \end{verbatim}
  1277 Для того чтобы смотреть статистику не в виде бесконечной, 
  1278 бегущей по консоли полосы, а в виде постоянно обновляющегося окна (a-la top),
  1279 вы можете использовать программу \textbf{watch} (или \textbf{display} в FreeBSD).
  1281 Но в этом случае \textbf{dm\_convert} должен быть оформлен не как 
  1282 функция shell, а как отдельный скрипт:
  1284 \begin{verbatim}
  1285 %$ cat /usr/local/bin/dm_convert
  1286 #!/bin/sh
  1288 sed "s/ /      /; $( \
  1289 LANG=C ls -l /dev/dm* /dev/mapper/* | grep 25[34], \
  1290 | sort -n -k +6 | awk '{print $10}' \
  1291 | sed 's@/dev/@@; s@mapper/@@'  \
  1292 | perl -ne '$a=$_;$b=<>;chomp $a; chomp $b; '\
  1293   '$p=q(.)x(length($b)-length(a)-4); print qq(s/$a $p/$b/;) ')"
  1294 \end{verbatim}
  1297 Скрипт должен быть исполняемым:
  1298 \begin{verbatim}
  1299 %# chmod +x /usr/local/bin/dm_convert
  1300 \end{verbatim}
  1302 Теперь можно вызывать программу просмотра статистики нагрузки \textbf{iostat}
  1303 и смотреть на какие тома LVM наибольшая нагрузка:
  1305 \begin{verbatim}
  1306 %# iostat -dx 2 2 | dm_convert
  1307 %# watch 'iostat -dx 2 2 | dm_convert'
  1308 \end{verbatim}
  1310 Если вы используете систему виртуализации, то результаты автоматическ означают
  1311 какую дисковую активность создаёт тот или иной виртуальный домен.
  1313 Собранная информация может быть отправной точкой, для того чтобы регулировать
  1314 приоритеты ввода/вывода для доменов с помощью \textbf{dm-band}.
  1315 В любом случае, это позволит выяснить какие именно задачи 
  1316 создают на дисковую подсистему системы виртуализации наибольшую нагрузку.
  1318 \paragraph{Графическое представление статистики ввода/вывода в Cacti}.
  1320 \begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/a/a4/Cacti-iostat-1.png}}\\ \textit{}\end{center}
  1322 \begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/8/8b/Cacti-iostat-2.png}}\\ \textit{}\end{center}
  1325 \subsection{Дополнительная информация}
  1327 \begin{itemize}
  1328 \item \htmladdnormallinkfoot{LVM-HOWTO}{http://tldp.org/HOWTO/LVM-HOWTO/} (англ.)
  1329 \item \htmladdnormallinkfoot{LVM2 Resource Page}{http://sourceware.org/lvm2/} (англ.)
  1330 \item \htmladdnormallinkfoot{Повесть о Linux и LVM (Logical Volume Manager)}{http://gazette.linux.ru.net/rus/articles/taleLinuxLVM.html}, Иван Песин
  1331 \item \htmladdnormallinkfoot{LVM}{http://ru.wikipedia.org/wiki/LVM} в Википедии
  1332 \item \htmladdnormallinkfoot{LVM}{http://en.wikipedia.org/wiki/Logical\_volume\_management} в Wikipedia (англ.)
  1333 \end{itemize}
  1335 Xen и LVM:
  1336 \begin{itemize}
  1337 \item \htmladdnormallinkfoot{(Xen-users) Xen with LVM}{http://lists.xensource.com/archives/html/xen-users/2007-10/msg00331.html} (англ.)
  1338 \item \htmladdnormallinkfoot{Mount/access Files Residing on Xen Virtual Machines}{http://www.novell.com/coolsolutions/tip/19568.html} (англ.)
  1339 \end{itemize}
