xg-scale

annotate lvm.tex @ 6:4a790b55d005

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