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/;) ')"
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}