xg-scale
diff 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 diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/lvm.tex Sun Jul 06 23:27:46 2008 +0300 1.3 @@ -0,0 +1,1342 @@ 1.4 +\section{Система управления томами LVM} 1.5 + 1.6 +Система управления логическими томами особенно полезна в работе с серверами, поскольку обеспечивает масштабируемость и удобное управление дисковым пространством. Она упрощает планирование дискового пространства и предотвращает проблемы, возникающие при неожиданно быстром росте занятого места в разделах. LVM не предназначен для обеспечения отказоустойчивости или высокой производительности. Потому он часто используется в сочетании с системами RAID. 1.7 + 1.8 +Здесь описывается процесс установки и использования менеджера логических томов на Linux-системе. LVM (Logical Volume Manager), менеджер логических томов -- это система управления дисковым пространством, абстрагирующаяся от физических устройств. Она позволяет эффективно использовать и легко управлять дисковым пространством. LVM обладает хорошей масштабируемостью, уменьшает общую сложность системы. У логических томов, созданных с помощью LVM, можно легко изменить размер, а их названия могут нести большую смысловую нагрузку, в отличие от традиционных /dev/sda, /dev/hda {\dots} 1.9 + 1.10 +Реализации менеджеров логических томов существуют практически во всех UNIX-подобных операционных системах. Зачастую они сильно отличаются в реализации, но все они основаны на одинаковой идее и преследуют аналогичные цели. Одна из основных реализаций была выполнена Open Software Foundation (OSF) и сейчас входит в состав многих систем, например IBM AIX, DEC Tru64, HP/UX. Она же послужила и основой для Linux-реализации LVM. 1.11 + 1.12 +Помимо собственно системы LVM и основных операций по её использованию, 1.13 +рассмотрены несколько более углублённых вопросов. 1.14 + 1.15 +Один из вопросов это использование \textbf{kpartx} из 1.16 +пакета \textbf{multipath-tools} для построения карты устройства (device map) 1.17 +и \textit{рекурсивного доступа к томам LVM} (когда LVM развёрнут на разделах, созданных внутри 1.18 +логического тома LVM более низкого уровня). Это может быть полезно 1.19 +при использовании LVM совместно с системами виртуализации. 1.20 + 1.21 +Второй вопрос --- это использование постоянных снимков 1.22 +(persistent snapshot) для быстрого \textit{клонирования разделов}. 1.23 +Эта возможность может быть полезна как при выполнении резервного копирования, 1.24 +так и при быстром создании виртуальных машин в системах виртуализации 1.25 +(вопрос создания снапшотов затрагивался и в \textit{повести}, но здесь он рассмотрен более детально). 1.26 + 1.27 +Третий вопрос --- это \textit{сравнение LVM и файловой системой ZFS}, набирающей 1.28 +в последнее время большую популярность. 1.29 +На первый взгляд такое сравнение может показаться странным, ведь ZFS -- это файловая система, 1.30 +а LVM -- система управления томами, то есть нечто, что находится на уровень ниже файловой системы. 1.31 +В действительности, сравнение вполне имеет право на существование, поскольку ZFS это не просто файловая система, 1.32 +а нечто большее. В ней присутствует уровень \dq{}storage pool\dq{}, который берёт на себя те же задачи, что и LVM. 1.33 + 1.34 +% Шифрование LVM-томов и замер скорости обращения к LVM-томам. 1.35 + 1.36 +\subsection{Введение} 1.37 + 1.38 + 1.39 +\subsubsection{Терминология.} 1.40 +Поскольку система управления логическими томами использует собственную модель представления дискового пространства, нам будет необходимо определиться с терминами и взаимосвязями понятий. Рассмотрим схему, основанную на диаграмме Эрика Бегфорса (Erik Bеgfors), приведенную им в списке рассылки linux-lvm. Она демонстрирует взаимосвязь понятий системы LVM: 1.41 + 1.42 +\begin{verbatim} 1.43 + sda1 sda2 sdb sdc <-- PV 1.44 + | | | | 1.45 + | | | | 1.46 + +--------+- VG00 -+-------+ <-- VG 1.47 + | 1.48 + +-------+-------+---------+ 1.49 + | | | | 1.50 + root usr home var <-- LV 1.51 + | | | | 1.52 + ext3 reiserfs reiserfs xfs <-- Файловые системы 1.53 +\end{verbatim} 1.54 + 1.55 +Обозначения и понятия: 1.56 + 1.57 +\begin{itemize} 1.58 +\item \textit{PV, Physical volume, физический том.} Обычно это раздел на диске или весь диск. В том числе, устройства программного и аппаратного RAID (которые уже могут включать в себя несколько физических дисков). Физические тома входят в состав группы томов. 1.59 +\item \textit{VG, Volume group, группа томов.} Это самый верхний уровень абстрактной модели, используемой системой LVM. С одной стороны группа томов состоит из физических томов, с другой -- из логических и представляет собой единую административную единицу. 1.60 +\item \textit{LV, Logical volume, логический том.} Раздел группы томов, эквивалентен разделу диска в не-LVM системе. Представляет собой блочное устройство и, как следствие, может содержать файловую систему. 1.61 +\item \textit{PE, Physical extent, физический экстент.} Каждый физический том делится на порции данных, называющиеся физическими экстентами. Их размеры те же, что и у логических экстентов. 1.62 +\item \textit{LE, Logical extent, логический экстент.} Каждый логический том делится на порции данных, называющиеся логическими экстентами. Размер логических экстентов не меняется в пределах группы томов. 1.63 +\end{itemize} 1.64 + 1.65 +Давайте теперь соединим все эти понятия в общую картину. Пусть у нас имеется группа томов VG00 с размером физического экстента 4Мб. В эту группу мы добавляем два раздела, /dev/hda1 и /dev/hdb1. Эти разделы становятся физическими томами, например PV1 и PV2 (символьные имена присваивает администратор, так что они могут быть более осмысленными). Физические тома делятся на 4-х мегабайтные порции данных, т.к. это размер логического экстента. Диски имеют разный размер: PV1 получается размером в 99 экстентов, а PV2 -- размером в 248 экстентов. Теперь можно приступать к созданию логических томов, размером от 1 до 347 (248+99) экстентов. При создании логического тома, определяется отображение между логическими и физическими экстентами. Например, логический экстент 1 может отображаться в физический экстент 51 тома PV1. В этом случае, данные, записанные в первые 4Мб логического экстента 1, будут в действительности записаны в 51-й экстент тома PV1. 1.66 + 1.67 +Администратор может выбрать алгоритм отображения логических экстентов в физические. На данный момент доступны два алгоритма: 1.68 +\begin{enumerate} 1.69 +\item Линейное отображение последовательно назначает набор физических экстентов области логического тома, т.е. LE 1 -- 99 отображаются на PV1, а LE 100 -- 347 -- на PV2. 1.70 +\item "Расслоенное" (striped) отображение разделяет порции данных логических экстентов на определенное количество физических томов. То есть: 1.71 +\end{enumerate} 1.72 + 1.73 +\begin{verbatim} 1.74 + 1-я порция данных LE[1] -> PV1[1], 1.75 + 2-я порция данных LE[1] -> PV2[1], 1.76 + 3-я порция данных LE[1] -> PV3[1], 1.77 + 4-я порция данных LE[1] -> PV1[2], и т.д. 1.78 +\end{verbatim} 1.79 + 1.80 +Похожая схема используется в работе RAID нулевого уровня. В некоторых ситуациях этот алгоритм отображения позволяет увеличить производительность логического тома. Однако он имеет значительное ограничение: логический том с данным отображением не может быть расширен за пределы физических томов, на которых он изначально и создавался. 1.81 + 1.82 +Великолепная возможность, предоставляемая системой LVM -- это \dq{}снапшоты\dq{}. Они позволяют администратору создавать новые блочные устройства с точной копией логического тома, \dq{}замороженного\dq{} в какой-то момент времени. Обычно это используется в пакетных режимах. Например, при создании резервной копии системы. Однако при этом вам не будет нужно останавливать работающие задачи, меняющие данные на файловой системе. Когда необходимые процедуры будут выполнены, системный администратор может просто удалить устройство-\dq{}снапшот\dq{}. Ниже мы рассмотрим работу с таким устройством. 1.83 +Работа с LVM 1.84 + 1.85 +Давайте теперь рассмотрим задачи, стоящие перед администратором LVM системы. Помните, что для работы с системой LVM ее нужно инициализировать командами: 1.86 +\begin{verbatim} 1.87 + %# vgscan 1.88 + %# vgchange -ay 1.89 +\end{verbatim} 1.90 + 1.91 +Первая команда сканирует диски на предмет наличия групп томов, вторая активирует все найденные группы томов. Аналогично для завершения всех работ, связанных с LVM, нужно выполнить деактивацию групп: 1.92 +\begin{verbatim} 1.93 + %# vgchange -an 1.94 +\end{verbatim} 1.95 + 1.96 +Первые две строки нужно будет поместить в скрипты автозагрузки (если их там нет), а последнюю можно дописать в скрипт shutdown. 1.97 + 1.98 +\subsubsection{Инициализация дисков и разделов} 1.99 +Перед использованием диска или раздела в качестве физического тома необходимо его инициализировать: 1.100 + 1.101 +Для целого диска: 1.102 +\begin{verbatim} 1.103 + %# pvcreate /dev/hdb 1.104 +\end{verbatim} 1.105 + 1.106 +Эта команда создает в начале диска дескриптор группы томов. 1.107 + 1.108 +Если вы получили ошибку инициализации диска с таблицей разделов -- проверьте, что работаете именно с нужным диском, и когда полностью будете уверены в том, что делаете, выполните следующие команды 1.109 +\begin{verbatim} 1.110 + %# dd if=/dev/zero of=/dev/diskname bs=1k count=1 1.111 + %# blockdev --rereadpt /dev/diskname 1.112 +\end{verbatim} 1.113 + 1.114 +Эти команды уничтожат таблицу разделов на целевом диске. 1.115 + 1.116 +Для разделов: 1.117 + 1.118 +Установите программой fdisk тип раздела в 0x8e. 1.119 +\begin{verbatim} 1.120 + %# pvcreate /dev/hdb1 1.121 +\end{verbatim} 1.122 + 1.123 +Команда создаст в начале раздела /dev/hdb1 дескриптор группы томов. 1.124 + 1.125 +\subsubsection{Создание группы томов} 1.126 +Для создания группы томов используется команда \rq{}vgcreate\rq{} 1.127 +\begin{verbatim} 1.128 + %# vgcreate vg00 /dev/hda1 /dev/hdb1 1.129 +\end{verbatim} 1.130 + 1.131 +Если вы используете devfs важно указывать полное имя в devfs, а не ссылку в каталоге /dev. Таким образом приведенная команда должна выглядеть в системе с devfs так: 1.132 +\begin{verbatim} 1.133 + %# vgcreate vg00 /dev/ide/host0/bus0/target0/lun0/part1 \ 1.134 + /dev/ide/host0/bus0/target1/lun0/part1 1.135 +\end{verbatim} 1.136 + 1.137 +Кроме того, вы можете задать размер экстента при помощи ключа \dq{}-s\dq{}, если значение по умолчанию в 32Мб вас не устраивает. Можно, также, указать ограничения возможного количества физических и логических томов. 1.138 + 1.139 +\subsubsection{Активация группы томов} 1.140 +После перезагрузки системы или выполнения команды vgchange -an, ваши группы томов и логические тома находятся в неактивном состоянии. Для их активации необходимо выполнить команду 1.141 +\begin{verbatim} 1.142 + %# vgchange -a y vg00 1.143 +\end{verbatim} 1.144 + 1.145 +\subsubsection{Удаление группы томов} 1.146 +Убедитесь, что группа томов не содержит логических томов. Как это сделать, показано в следующих разделах. 1.147 + 1.148 +Деактивируйте группу томов: 1.149 +\begin{verbatim} 1.150 + %# vgchange -a n vg00 1.151 +\end{verbatim} 1.152 + 1.153 +Теперь можно удалить группу томов командой: 1.154 +\begin{verbatim} 1.155 + %# vgremove vg00 1.156 +\end{verbatim} 1.157 + 1.158 +\subsubsection{Добавление физических томов в группу томов} 1.159 +Для добавления предварительно инициализированного физического тома в существующую группу томов используется команда \rq{}vgextend\rq{}: 1.160 + 1.161 +\begin{verbatim} 1.162 +%# vgextend vg00 /dev/hdc1 1.163 + ^^^^^^^^^ новый физический том 1.164 +\end{verbatim} 1.165 + 1.166 +\subsubsection{Удаление физических томов из группы томов} 1.167 +Убедитесь, что физический том не используется никакими логическими томами. Для этого используйте команду \rq{}pvdisplay\rq{}: 1.168 + 1.169 +\begin{verbatim} 1.170 +%# pvdisplay /dev/hda1 1.171 + 1.172 +--- Physical volume --- 1.173 + PV Name /dev/hda1 1.174 + VG Name vg00 1.175 + PV Size 1.95 GB / NOT usable 4 MB [LVM: 122 KB] 1.176 + PV# 1 1.177 + PV Status available 1.178 + Allocatable yes (but full) 1.179 + Cur LV 1 1.180 + PE Size (KByte) 4096 1.181 + Total PE 499 1.182 + Free PE 0 1.183 + Allocated PE 499 1.184 + PV UUID Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7 1.185 +\end{verbatim} 1.186 + 1.187 +Если же физический том используется, вам нужно будет перенести данные на другой физический том. Эта процедура будет описана в следующих разделах. 1.188 + 1.189 +После этого можно использовать \rq{}vgreduce\rq{} для удаления физических томов: 1.190 +\begin{verbatim} 1.191 + %# vgreduce vg00 /dev/hda1 1.192 +\end{verbatim} 1.193 + 1.194 +\subsubsection{Создание логического тома} 1.195 +Для того, чтобы создать логический том \dq{}lv00\dq{}, размером 1500Мб, выполните команду: 1.196 +\begin{verbatim} 1.197 + %# lvcreate -L1500 -nlv00 vg00 1.198 +\end{verbatim} 1.199 + 1.200 +Для создания логического тома размером в 100 логических экстентов с расслоением по двум физическим томам и размером блока данных 4 KB: 1.201 +\begin{verbatim} 1.202 + %# lvcreate -i2 -I4 -l100 -nlv01 vg00 1.203 +\end{verbatim} 1.204 + 1.205 +Если вы хотите создать логический том, полностью занимающий группу томов, выполните команду vgdisplay, чтобы узнать полные размер группы томов, после чего используйте команду lvcreate. 1.206 +\begin{verbatim} 1.207 + %# vgdisplay vg00 | grep "Total PE" 1.208 + Total PE 10230 1.209 + %# lvcreate -l 10230 vg00 -n lv02 1.210 +\end{verbatim} 1.211 + 1.212 +Эти команды создают логический том testvg, полностью заполняющий группу томов. 1.213 + 1.214 +\subsubsection{Удаление логических томов} 1.215 +Логический том должен быть размонтирован перед удалением: 1.216 +\begin{verbatim} 1.217 + # umount /home 1.218 + # resize2fs /dev/vg00/home 524288 1.219 + # lvreduce -L-1G /dev/vg00/home 1.220 + # mount /home 1.221 +\end{verbatim} 1.222 + 1.223 +\subsubsection{Увеличение логических томов} 1.224 +Для увеличения логического тома вам нужно просто указать команде lvextend до какого размера вы хотите увеличить том: 1.225 + 1.226 +\begin{verbatim} 1.227 + %# lvextend -L12G /dev/vg00/home 1.228 + lvextend -- extending logical volume "/dev/vg00/home" to 12 GB 1.229 + lvextend -- doing automatic backup of volume group "vg00" 1.230 + lvextend -- logical volume "/dev/vg00/home" successfully extended 1.231 +\end{verbatim} 1.232 + 1.233 +В результате /dev/vg00/home увеличится до 12Гбайт. 1.234 + 1.235 +\begin{verbatim} 1.236 + # umount /home 1.237 + # resize_reiserfs -s-1G /dev/vg00/home 1.238 + # lvreduce -L-1G /dev/vg00/home 1.239 + # mount -treiserfs /dev/vg00/home /home 1.240 +\end{verbatim} 1.241 + 1.242 +Эта команда увеличивает размер логического тома на 1Гб. 1.243 + 1.244 +После того как вы увеличили логический том, необходимо соответственно увеличить размер файловой системы. Как это сделать зависит от типа используемой файловой системы. 1.245 + 1.246 +По умолчанию большинство утилит изменения размера файловой системы увеличивают ее размер до размера соответствующего логического тома. Так что вам не нужно беспокоится об указании одинаковых размеров для всех команд. 1.247 + 1.248 +\paragraph{ext2} 1.249 + 1.250 +Если вы не пропатчили ваше ядро патчем ext2online, вам будет необходимо размонтировать файловую систему перед изменением размера. 1.251 +В современных ядрах этот патч не требуется. Точнее, он уже и так присутсвуетв коде ядра. 1.252 +\begin{verbatim} 1.253 + # umount /dev/vg00/home 1.254 + # resize2fs /dev/vg00/home 1.255 + # mount /dev/vg00/home /home 1.256 +\end{verbatim} 1.257 + 1.258 +Для файловой системы ext2 есть и другой путь. В состав LVM входит утилита e2fsadm, которая выполняет и lvextend, и resize2fs (она также выполняет и уменьшение размера файловой системы, это описано в следующем разделе). Так что можно использовать одну команду: 1.259 +\begin{verbatim} 1.260 + %# e2fsadm -L+1G /dev/vg00/home 1.261 +\end{verbatim} 1.262 +что эквивалентно двум следующим: 1.263 +\begin{verbatim} 1.264 + %# lvextend -L+1G /dev/vg00/home 1.265 + %# resize2fs /dev/vg00/home 1.266 +\end{verbatim} 1.267 + 1.268 +\paragraph{reiserfs} 1.269 + 1.270 +Увеличивать размер файловых систем Reiserfs можно как в смонтированном, так и в размонтированном состоянии. 1.271 + 1.272 +Увеличить размер смонтированной файловой системы: 1.273 +\begin{verbatim} 1.274 + %# resize_reiserfs -f /dev/vg00/home 1.275 +\end{verbatim} 1.276 + 1.277 +Увеличить размер размонтированной файловой системы: 1.278 +\begin{verbatim} 1.279 + %# umount /dev/vg00/homevol 1.280 + %# resize_reiserfs /dev/vg00/homevol 1.281 + %# mount -treiserfs /dev/vg00/homevol /home 1.282 +\end{verbatim} 1.283 + 1.284 +\paragraph{xfs} 1.285 + 1.286 +Размер файловой системы XFS можно увеличить только в смонтированном состоянии. 1.287 +Кроме того, утилите в качестве параметра нужно передать точку монтирования, а не имя устройства: 1.288 +\begin{verbatim} 1.289 + %# xfs_growfs /home 1.290 +\end{verbatim} 1.291 + 1.292 +\subsubsection{Уменьшение размера логического тома} 1.293 +Логические тома могут быть уменьшены в размере, точно также как и увеличены. Однако очень важно помнить, что нужно в первую очередь уменьшить размер файловой системы, и только после этого уменьшать размер логического тома. Если вы нарушите последовательность, вы можете потерять данные. 1.294 + 1.295 +\paragraph{ext2} 1.296 + 1.297 +При использовании файловой системы ext2, как уже указывалось ранее, можно использовать команду e2fsadm: 1.298 + 1.299 +\begin{verbatim} 1.300 + # umount /home 1.301 + # e2fsadm -L-1G /dev/vg00/home 1.302 + # mount /home 1.303 +\end{verbatim} 1.304 + 1.305 +Если вы хотите выполнить операцию по уменьшению логического тома вручную, вам нужно знать размер тома в блоках: 1.306 +\begin{verbatim} 1.307 + # umount /home 1.308 + # resize2fs /dev/vg00/home 524288 1.309 + # lvreduce -L-1G /dev/vg00/home 1.310 + # mount /home 1.311 +\end{verbatim} 1.312 + 1.313 +\paragraph{reiserfs} 1.314 + 1.315 +При уменьшении размера файловой системы Reiserfs, ее нужно размонтировать: 1.316 +\begin{verbatim} 1.317 + # umount /home 1.318 + # resize_reiserfs -s-1G /dev/vg00/home 1.319 + # lvreduce -L-1G /dev/vg00/home 1.320 + # mount -treiserfs /dev/vg00/home /home 1.321 +\end{verbatim} 1.322 + 1.323 +\paragraph{xfs} 1.324 + 1.325 +Уменьшить размер файловой системы XFS нельзя. 1.326 + 1.327 +Примечание: обратите внимание на то, что для уменьшения размера файловых систем, необходимо их размонтировать. Это вносит определенные трудности, если вы желаете уменьшить размер корневой файловой системы. В этом случае можно применить следующий метод: загрузится с CD дистрибутива, поддерживающего LVM. Перейти в командный режим (обычно это делается нажатием клавиш Alt+F2) и выполнить команды сканирования и активации группы томов: 1.328 + 1.329 +\begin{verbatim} 1.330 +%# vgscan 1.331 +%# vgchange -a y 1.332 +\end{verbatim} 1.333 + 1.334 +Теперь вы имеете доступ к логическим томам и можете изменять их размеры: 1.335 + 1.336 +\begin{verbatim} 1.337 +%# resize_reiserfs -s-500M /dev/vg00/root 1.338 +%# lvreduce -L-500M /dev/vg00/root 1.339 +%# reboot 1.340 +\end{verbatim} 1.341 + 1.342 + 1.343 +\subsubsection{Перенос данных с физического тома} 1.344 + 1.345 +Для того, чтобы можно было удалить физический том из группы томов, необходимо освободить все занятые на нем физические экстенты. Это делается путем перераспределения занятых физических экстентов на другие физические тома. Следовательно, в группе томов должно быть достаточно свободных физических экстентов. Описание операции удаления физического тома приведено в разделе примеров. 1.346 + 1.347 +\subsection{Примеры} 1.348 +\subsubsection{Настройка LVM на трех SCSI дисках} 1.349 +В первом примере мы настроим логический том из трех SCSI дисков. Устройства дисков: /dev/sda, /dev/sdb и /dev/sdc. 1.350 + 1.351 +Перед добавлением в группу томов диски нужно инициализировать: 1.352 + 1.353 +\begin{verbatim} 1.354 +%# pvcreate /dev/sda 1.355 +%# pvcreate /dev/sdb 1.356 +%# pvcreate /dev/sdc 1.357 +\end{verbatim} 1.358 + 1.359 +После выполнения этих команд в начале каждого диска создастся область дескрипторов группы томов. 1.360 + 1.361 +Теперь создадим группу томов vg01, состоящую из этих дисков: 1.362 + 1.363 +\begin{verbatim} 1.364 +%# vgcreate vg01 /dev/sda /dev/sdb /dev/sdc/ 1.365 +\end{verbatim} 1.366 + 1.367 +Проверим статус группы томов командой vgdisplay: 1.368 + 1.369 +\begin{verbatim} 1.370 +%# vgdisplay 1.371 +--- Volume Group --- 1.372 +VG Name vg01 1.373 +VG Access read/write 1.374 +VG Status available/resizable 1.375 +VG # 1 1.376 +MAX LV 256 1.377 +Cur LV 0 1.378 +Open LV 0 1.379 +MAX LV Size 255.99 GB 1.380 +Max PV 256 1.381 +Cur PV 3 1.382 +Act PV 3 1.383 +VG Size 1.45 GB 1.384 +PE Size 4 MB 1.385 +Total PE 372 1.386 +Alloc PE / Size 0 / 0 1.387 +Free PE / Size 372/ 1.45 GB 1.388 +VG UUID nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y 1.389 +\end{verbatim} 1.390 + 1.391 +Обратите внимание на первые три строки и строку с общим размером группы томов. Она должна соответствовать сумме всех трех дисков. Если всё в порядке, можно переходить к следующей задаче. 1.392 + 1.393 +\subsubsection{Создание логического тома} 1.394 +После успешного создания группы томов, можно начать создавать логические тома в этой группе. Размер тома может быть любым, но, естественно, не более всего размера группы томов. В этом примере мы создадим один логический том размером 1 Гб. Мы не будем использовать \dq{}расслоение\dq{}, поскольку при этом невозможно добавить диск в группу томов после создания логического тома, использующего данный алгоритм. 1.395 + 1.396 +\begin{verbatim} 1.397 +%# lvcreate -L1G -nusrlv vg01 1.398 +lvcreate -- doing automatic backup of "vg01" 1.399 +lvcreate -- logical volume "/dev/vg01/usrlv" successfully created 1.400 +\end{verbatim} 1.401 + 1.402 +\subsubsection{Создание файловой системы} 1.403 +Создадим на логическом томе файловую систему ext2: 1.404 + 1.405 +\begin{verbatim} 1.406 +%# mke2fs /dev/vg01/usrlv 1.407 +mke2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09 1.408 +Filesystem label= 1.409 +OS type: Linux 1.410 +Block size=4096 (log=2) 1.411 +Fragment size=4096 (log=2) 1.412 +131072 inodes, 262144 blocks 1.413 +13107 blocks (5.00%) reserved for the super user 1.414 +First data block=0 1.415 +9 block groups 1.416 +32768 blocks per group, 32768 fragments per group 1.417 +16384 inodes per group 1.418 +Superblock backups stored on blocks: 1.419 +32768, 98304, 163840, 229376 1.420 + 1.421 +Writing inode tables: done 1.422 +Writing superblocks and filesystem accounting information: done 1.423 +\end{verbatim} 1.424 + 1.425 +\subsubsection{Тестирование файловой системы} 1.426 +Смонтируйте логический том и проверьте все ли в порядке: 1.427 + 1.428 +\begin{verbatim} 1.429 +%# mount /dev/vg01/usrlv /mnt 1.430 +%# df 1.431 +Filesystem 1k-blocks Used Available Use% Mounted on 1.432 +/dev/hda1 1311552 628824 616104 51% / 1.433 +/dev/vg01/usrlv 1040132 20 987276 0% /mnt 1.434 +\end{verbatim} 1.435 + 1.436 +Если вы все сделали правильно, у вас должен появиться логический том с файловой системой ext2, смонтированный в точке /mnt. 1.437 + 1.438 +\subsubsection{Создание логического тома с \dq{}расслоением\dq{}} 1.439 +Рассмотрим теперь вариант логического тома, использующего алгоритм \dq{}расслоения\dq{}. Как уже указывалось выше, минусом этого решения является невозможность добавления дополнительного диска. 1.440 + 1.441 +Процедура создания данного типа логического тома также требует инициализации устройств и добавления их в группу томов, как это уже было показано. 1.442 + 1.443 +Для создания логического тома с \dq{}расслоением\dq{} на три физических тома с блоком данных 4Кб выполните команду: 1.444 + 1.445 +\begin{verbatim} 1.446 +%# lvcreate -i3 -I4 -L1G -nvarlv vg01 1.447 +lvcreate -- rounding 1048576 KB to stripe boundary size 1056768 KB / 258 PE 1.448 +lvcreate -- doing automatic backup of "vg01" 1.449 +lvcreate -- logical volume "/dev/vg01/varlv" successfully created 1.450 +\end{verbatim} 1.451 + 1.452 +После чего можно создавать файловую систему на логическом томе. 1.453 + 1.454 +\subsubsection{Добавление нового диска} 1.455 +Рассмотрим систему со следующей конфигурацией: 1.456 + 1.457 +\begin{verbatim} 1.458 +%# pvscan 1.459 +pvscan -- ACTIVE PV "/dev/sda" of VG "dev" [1.95 GB / 0 free] 1.460 +pvscan -- ACTIVE PV "/dev/sdb" of VG "sales" [1.95 GB / 0 free] 1.461 +pvscan -- ACTIVE PV "/dev/sdc" of VG "ops" [1.95 GB / 44 MB free] 1.462 +pvscan -- ACTIVE PV "/dev/sdd" of VG "dev" [1.95 GB / 0 free] 1.463 +pvscan -- ACTIVE PV "/dev/sde1" of VG "ops" [996 MB / 52 MB free] 1.464 +pvscan -- ACTIVE PV "/dev/sde2" of VG "sales" [996 MB / 944 MB free] 1.465 +pvscan -- ACTIVE PV "/dev/sdf1" of VG "ops" [996 MB / 0 free] 1.466 +pvscan -- ACTIVE PV "/dev/sdf2" of VG "dev" [996 MB / 72 MB free] 1.467 +pvscan -- total: 8 [11.72 GB] / in use: 8 [11.72 GB] / in no VG: 0 [0] 1.468 + 1.469 +%# df 1.470 +Filesystem 1k-blocks Used Available Use% Mounted on 1.471 +/dev/dev/cvs 1342492 516468 757828 41% /mnt/dev/cvs 1.472 +/dev/dev/users 2064208 2060036 4172 100% /mnt/dev/users 1.473 +/dev/dev/build 1548144 1023041 525103 66% /mnt/dev/build 1.474 +/dev/ops/databases 2890692 2302417 588275 79% /mnt/ops/databases 1.475 +/dev/sales/users 2064208 871214 1192994 42% /mnt/sales/users 1.476 +/dev/ops/batch 1032088 897122 134966 86% /mnt/ops/batch 1.477 +\end{verbatim} 1.478 + 1.479 +Как видно из листинга, группы томов \dq{}dev\dq{} и \dq{}ops\dq{} практически заполнены. В систему добавили новый диск /dev/sdg. Его необходимо разделить между группами \dq{}ops\dq{} и \dq{}dev\dq{}, поэтому разобьем его на разделы: 1.480 + 1.481 +\begin{verbatim} 1.482 +%# fdisk /dev/sdg 1.483 +Device contains neither a valid DOS partition table, nor Sun or SGI 1.484 +disklabel Building a new DOS disklabel. Changes will remain in memory 1.485 +only, until you decide to write them. After that, of course, the 1.486 +previous content won't be recoverable. 1.487 + 1.488 +Command (m for help): n 1.489 +Command action 1.490 + e extended 1.491 + p primary partition (1-4) 1.492 +p 1.493 +Partition number (1-4): 1 1.494 +First cylinder (1-1000, default 1): 1.495 +Using default value 1 1.496 +Last cylinder or +size or +sizeM or +sizeK (1-1000, default 1000): 500 1.497 + 1.498 +Command (m for help): n 1.499 +Command action 1.500 + e extended 1.501 + p primary partition (1-4) 1.502 +p 1.503 +Partition number (1-4): 2 1.504 +First cylinder (501-1000, default 501): 1.505 +Using default value 501 1.506 +Last cylinder or +size or +sizeM or +sizeK (501-1000, default 1000): 1.507 +Using default value 1000 1.508 + 1.509 +Command (m for help): t 1.510 +Partition number (1-4): 1 1.511 +Hex code (type L to list codes): 8e 1.512 +Changed system type of partition 1 to 8e (Unknown) 1.513 + 1.514 +Command (m for help): t 1.515 +Partition number (1-4): 2 1.516 +Hex code (type L to list codes): 8e 1.517 +Changed system type of partition 2 to 8e (Unknown) 1.518 + 1.519 +Command (m for help): w 1.520 +The partition table has been altered! 1.521 + 1.522 +Calling ioctl() to re-read partition table. 1.523 + 1.524 +WARNING: If you have created or modified any DOS 6.x partitions, 1.525 +please see the fdisk manual page for additional information. 1.526 +\end{verbatim} 1.527 + 1.528 +Перед тем как добавить разделы в группу томов, их необходимо инициализировать: 1.529 + 1.530 +\begin{verbatim} 1.531 +%# pvcreate /dev/sdg1 1.532 +pvcreate -- physical volume "/dev/sdg1" successfully created 1.533 + 1.534 +# pvcreate /dev/sdg2 1.535 +pvcreate -- physical volume "/dev/sdg2" successfully created 1.536 +\end{verbatim} 1.537 + 1.538 +Теперь можно добавлять физические тома в группы томов: 1.539 + 1.540 +\begin{verbatim} 1.541 +%# vgextend ops /dev/sdg1 1.542 +vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte 1.543 +vgextend -- doing automatic backup of volume group "ops" 1.544 +vgextend -- volume group "ops" successfully extended 1.545 + 1.546 +# vgextend dev /dev/sdg2 1.547 +vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte 1.548 +vgextend -- doing automatic backup of volume group "dev" 1.549 +vgextend -- volume group "dev" successfully extended 1.550 + 1.551 +# pvscan 1.552 +pvscan -- reading all physical volumes (this may take a while...) 1.553 +pvscan -- ACTIVE PV "/dev/sda" of VG "dev" [1.95 GB / 0 free] 1.554 +pvscan -- ACTIVE PV "/dev/sdb" of VG "sales" [1.95 GB / 0 free] 1.555 +pvscan -- ACTIVE PV "/dev/sdc" of VG "ops" [1.95 GB / 44 MB free] 1.556 +pvscan -- ACTIVE PV "/dev/sdd" of VG "dev" [1.95 GB / 0 free] 1.557 +pvscan -- ACTIVE PV "/dev/sde1" of VG "ops" [996 MB / 52 MB free] 1.558 +pvscan -- ACTIVE PV "/dev/sde2" of VG "sales" [996 MB / 944 MB free] 1.559 +pvscan -- ACTIVE PV "/dev/sdf1" of VG "ops" [996 MB / 0 free] 1.560 +pvscan -- ACTIVE PV "/dev/sdf2" of VG "dev" [996 MB / 72 MB free] 1.561 +pvscan -- ACTIVE PV "/dev/sdg1" of VG "ops" [996 MB / 996 MB free] 1.562 +pvscan -- ACTIVE PV "/dev/sdg2" of VG "dev" [996 MB / 996 MB free] 1.563 +pvscan -- total: 10 [13.67 GB] / in use: 10 [13.67 GB] / in no VG: 0 [0] 1.564 +\end{verbatim} 1.565 + 1.566 +Наконец, увеличим размеры логических томов и расширим файловые системы до размеров логических томов: 1.567 + 1.568 +\begin{verbatim} 1.569 +%# umount /mnt/ops/batch 1.570 +%# umount /mnt/dev/users 1.571 + 1.572 +# export E2FSADM_RESIZE_CMD=ext2resize 1.573 +# e2fsadm /dev/ops/batch -L+500M 1.574 +e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09 1.575 +Pass 1: Checking inodes, blocks, and sizes 1.576 +Pass 2: Checking directory structure 1.577 +Pass 3: Checking directory connectivity 1.578 +Pass 4: Checking reference counts 1.579 +Pass 5: Checking group summary information 1.580 +/dev/ops/batch: 11/131072 files (0.0<!-- non-contiguous), 4127/262144 blocks 1.581 +lvextend -- extending logical volume "/dev/ops/batch" to 1.49 GB 1.582 +lvextend -- doing automatic backup of volume group "ops" 1.583 +lvextend -- logical volume "/dev/ops/batch" successfully extended 1.584 + 1.585 +ext2resize v1.1.15 - 2000/08/08 for EXT2FS 0.5b 1.586 +e2fsadm -- ext2fs in logical volume "/dev/ops/batch" successfully extended to 1.49 GB 1.587 + 1.588 +# e2fsadm /dev/dev/users -L+900M 1.589 +e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09 1.590 +Pass 1: Checking inodes, blocks, and sizes 1.591 +Pass 2: Checking directory structure 1.592 +Pass 3: Checking directory connectivity 1.593 +Pass 4: Checking reference counts 1.594 +Pass 5: Checking group summary information 1.595 +/dev/dev/users: 12/262144 files (0.0% non-contiguous), 275245/524288 blocks 1.596 +lvextend -- extending logical volume "/dev/dev/users" to 2.88 GB 1.597 +lvextend -- doing automatic backup of volume group "dev" 1.598 +lvextend -- logical volume "/dev/dev/users" successfully extended 1.599 + 1.600 +ext2resize v1.1.15 - 2000/08/08 for EXT2FS 0.5b 1.601 +e2fsadm -- ext2fs in logical volume "/dev/dev/users" successfully extended to 2.88 GB 1.602 +\end{verbatim} 1.603 + 1.604 +Нам осталось смонтировать системы и посмотреть их размеры: 1.605 + 1.606 +\begin{verbatim} 1.607 +%# mount /dev/ops/batch 1.608 +%# mount /dev/dev/users 1.609 +%# df 1.610 +Filesystem 1k-blocks Used Available Use% Mounted on 1.611 +/dev/dev/cvs 1342492 516468 757828 41% /mnt/dev/cvs 1.612 +/dev/dev/users 2969360 2060036 909324 69% /mnt/dev/users 1.613 +/dev/dev/build 1548144 1023041 525103 66% /mnt/dev/build 1.614 +/dev/ops/databases 2890692 2302417 588275 79% /mnt/ops/databases 1.615 +/dev/sales/users 2064208 871214 1192994 42% /mnt/sales/users 1.616 +/dev/ops/batch 1535856 897122 638734 58% /mnt/ops/batch 1.617 +\end{verbatim} 1.618 + 1.619 +\subsubsection{Резервное копирование при помощи \dq{}снапшотов\dq{}} 1.620 +Развивая приведенный пример, предположим, что нам нужно выполнить резервирование базы данных. Для этой задачи мы будем использовать устройство-\dq{}снапшот\dq{}. 1.621 + 1.622 +Этот тип устройства представляет собой доступную только на чтение копию другого тома на момент выполнения процедуры \dq{}снапшот\dq{}. Это дает возможность продолжать работу не заботясь о том, что данные могут измениться в момент резервного копирования. Следовательно, нам не нужно останавливать работу базы данных на время выполнения резервного копирования. Останов нужен только на момент создания устройства-\dq{}снапшот\dq{}, который значительно короче самого копированя. 1.623 + 1.624 +В группе томов ops у нас осталось около 600Мб свободного места, его мы и задействуем для \dq{}снапшот\dq{}-устройства. Размер \dq{}снапшот\dq{}-устройства не регламентируется, но должен быть достаточен для сохранения всех изменений, которые могут произойти с томом, с которого он сделан, за время жизни снапшота. 600Мб должно хватить для наших целей: 1.625 + 1.626 +\begin{verbatim} 1.627 +%# lvcreate -L592M -s -n dbbackup /dev/ops/databases 1.628 +lvcreate -- WARNING: the snapshot must be disabled if it gets full 1.629 +lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/ops/dbbackup" 1.630 +lvcreate -- doing automatic backup of "ops" 1.631 +lvcreate -- logical volume "/dev/ops/dbbackup" successfully create 1.632 +\end{verbatim} 1.633 + 1.634 +Если вы делаете \dq{}снапшот\dq{} файловой системы XFS, нужно выполнить на смонтированной файловой системе команду xfs\_freeze, и лишь после этого создавать \dq{}снапшот\dq{}: 1.635 + 1.636 +\begin{verbatim} 1.637 +%# xfs_freeze -f /mnt/point; lvcreate -L592M -s -n dbbackup /dev/ops/databases; xfs_freeze -u /mnt/point 1.638 +\end{verbatim} 1.639 + 1.640 +Если устройство-\dq{}снапшот\dq{} полностью заполняется, оно автоматически деактивируется. В этом случае \dq{}снапшот\dq{} не может более использоваться, потому крайне важно выделять достаточное пространство для него. 1.641 + 1.642 +После того как мы создали \dq{}снапшот\dq{}, его нужно смонтировать: 1.643 + 1.644 +\begin{verbatim} 1.645 +%# mkdir /mnt/ops/dbbackup 1.646 +%# mount /dev/ops/dbbackup /mnt/ops/dbbackup 1.647 +mount: block device /dev/ops/dbbackup is write-protected, mounting read-only 1.648 +\end{verbatim} 1.649 + 1.650 +Если вы работаете с файловой системой XFS, вам будет нужно при монтировании указать опцию nouuid: 1.651 + 1.652 +\begin{verbatim} 1.653 +%# mount -o nouuid,ro /dev/ops/dbbackup /mnt/ops/dbbackup 1.654 +\end{verbatim} 1.655 + 1.656 +Выполним резервное копирование раздела: 1.657 + 1.658 +\begin{verbatim} 1.659 +%# tar -cf /dev/rmt0 /mnt/ops/dbbackup 1.660 +tar: Removing leading `/' from member names 1.661 +\end{verbatim} 1.662 + 1.663 +После выполнения необходимых процедур, нужно удалить устройство-\dq{}снапшот\dq{}: 1.664 + 1.665 +\begin{verbatim} 1.666 +%# umount /mnt/ops/dbbackup 1.667 +%# lvremove /dev/ops/dbbackup 1.668 +lvremove -- do you really want to remove "/dev/ops/dbbackup"? [y/n]: y 1.669 +lvremove -- doing automatic backup of volume group "ops" 1.670 +lvremove -- logical volume "/dev/ops/dbbackup" successfully removed 1.671 +\end{verbatim} 1.672 + 1.673 +Подробнее: 1.674 +\begin{itemize} 1.675 +\item \htmladdnormallinkfoot{Consistent backup with Linux Logical Volume Manager (LVM) snapshots}{http://www.cyberciti.biz/tips/consistent-backup-linux-logical-volume-manager-snapshots.html} (англ.) 1.676 +\item \htmladdnormallinkfoot{Back Up (And Restore) LVM Partitions With LVM Snapshots}{http://www.howtoforge.com/linux\_lvm\_snapshots} (англ.) 1.677 +\item \htmladdnormallinkfoot{Linux Kernel Documentation: device-mapper/snapshot.txt}{http://www.mjmwired.net/kernel/Documentation/device-mapper/snapshot.txt} (англ.) 1.678 +\end{itemize} 1.679 + 1.680 +Резервное копирование MySQL и LVM: 1.681 +\begin{itemize} 1.682 +\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/} (англ.) 1.683 +\item \htmladdnormallinkfoot{MySQL Backups using LVM Snapshots}{http://mike.kruckenberg.com/archives/2006/05/mysql\_backups\_u.html} (англ.) 1.684 +\item \htmladdnormallinkfoot{mylvmbackup}{http://lenz.homelinux.org/mylvmbackup/} (англ.) 1.685 +\end{itemize} 1.686 + 1.687 +\subsubsection{Удаление диска из группы томов} 1.688 +Скажем, вы хотите освободить один диск из группы томов. Для этого необходимо выполнить процедуру переноса использующихся физических экстентов. Естественно, что на других физических томах должно быть достаточно свободных физических экстентов. 1.689 + 1.690 +Выполните команду: 1.691 + 1.692 +\begin{verbatim} 1.693 +%# pvmove /dev/hdb 1.694 +pvmove -- moving physical extents in active volume group "dev" 1.695 +pvmove -- WARNING: moving of active logical volumes may cause data loss! 1.696 +pvmove -- do you want to continue? [y/n] y 1.697 +pvmove -- 249 extents of physical volume "/dev/hdb" successfully moved 1.698 +\end{verbatim} 1.699 + 1.700 +Учтите, что операция переноса физических экстентов занимает много времени. Если вы хотите наблюдать за процессом переноса экстентов, укажите в команде ключ -v . 1.701 + 1.702 +После окончания процедуры переноса, удалите физический том из группы томов: 1.703 + 1.704 +\begin{verbatim} 1.705 +%# vgreduce dev /dev/hdb 1.706 +vgreduce -- doing automatic backup of volume group "dev" 1.707 +vgreduce -- volume group "dev" successfully reduced by physical volume: 1.708 +vgreduce -- /dev/hdb 1.709 +\end{verbatim} 1.710 + 1.711 +Теперь данный диск может быть физически удален из системы или использован в других целях. Например, добавлен в другую группу томов. 1.712 + 1.713 +\subsubsection{Перенос группы томов на другую систему} 1.714 +Физический перенос группы томов на другую систему организовывается при помощи команд vgexport и vgimport. 1.715 + 1.716 +Сперва необходимо размонтировать все логические тома группы томов и деактивировать группу: 1.717 + 1.718 +\begin{verbatim} 1.719 +%# unmount /mnt/design/users 1.720 +%# vgchange -an design 1.721 +vgchange -- volume group "design" successfully deactivated 1.722 +\end{verbatim} 1.723 + 1.724 +После этого экспортируем группу томов. Процедура экспорта запрещает доступ к группе на данной системе и готовит ее к удалению: 1.725 + 1.726 +\begin{verbatim} 1.727 +%# vgexport design 1.728 +vgexport -- volume group "design" sucessfully exported 1.729 +\end{verbatim} 1.730 + 1.731 +Теперь можно выключить машину, отсоединить диски, составляющие группу томов и подключить их к новой системе. Остается импортировать группу томов на новой машине и смонтировать логические тома: 1.732 + 1.733 +\begin{verbatim} 1.734 +%# pvscan 1.735 +pvscan -- reading all physical volumes (this may take a while...) 1.736 +pvscan -- inactive PV "/dev/sdb1" is in EXPORTED VG "design" [996 MB / 996 MB free] 1.737 +pvscan -- inactive PV "/dev/sdb2" is in EXPORTED VG "design" [996 MB / 244 MB free] 1.738 +pvscan -- total: 2 [1.95 GB] / in use: 2 [1.95 GB] / in no VG: 0 [0] 1.739 +# vgimport design /dev/sdb1 /dev/sdb2 1.740 +vgimport -- doing automatic backup of volume group "design" 1.741 +vgimport -- volume group "design" successfully imported and activated 1.742 + 1.743 +%# mkdir -p /mnt/design/users 1.744 +%# mount /dev/design/users /mnt/design/users 1.745 +\end{verbatim} 1.746 + 1.747 +Все! Группа томов готова к использованию на новой системе. 1.748 + 1.749 +\subsubsection{Конвертация корневой файловой системы в LVM} 1.750 +В данном примере имеется установленная система на двух разделах: корневом и /boot. Диск размером 2Гб разбит на разделы следующим образом: 1.751 + 1.752 +\begin{verbatim} 1.753 +/dev/hda1 /boot 1.754 +/dev/hda2 swap 1.755 +/dev/hda3 / 1.756 +\end{verbatim} 1.757 + 1.758 +Корневой раздел занимает все пространство, оставшееся после выделения swap и /boot разделов. Главное требование, предъявляемое к корневому разделу в нашем примере: он должен быть более чем на половину пуст. Это нужно, чтобы мы могли создать его копию. Если это не так, нужно будет использовать дополнительный диск. Процесс при этом останется тот же, но уменьшать корневой раздел будет не нужно. 1.759 + 1.760 +Для изменения размера файловой системы мы будем использовать утилиту GNU parted. 1.761 + 1.762 +Загрузитесь в однопользовательском режиме, это важно. Запустите программу parted для уменьшения размера корневого раздела. Ниже приведен пример диалога с утилитой parted: 1.763 + 1.764 +\begin{verbatim} 1.765 +# parted /dev/hda 1.766 +(parted) p 1.767 +. 1.768 +. 1.769 +. 1.770 +\end{verbatim} 1.771 + 1.772 +Изменим размер раздела: 1.773 + 1.774 +\begin{verbatim} 1.775 +(parted) resize 3 145 999 1.776 +\end{verbatim} 1.777 + 1.778 +Первое число -- это номер раздела (hda3), второе -- начало раздела hda3, не меняйте его. Последнее число -- это конец раздела. Укажите приблизительно половину текущего размера раздела. 1.779 + 1.780 +Создадим новый раздел: 1.781 + 1.782 +\begin{verbatim} 1.783 +(parted) mkpart primary ext2 1000 1999 1.784 +\end{verbatim} 1.785 + 1.786 +Этот раздел будет содержать LVM. Он должен начинаться после раздела hda3 и заканчиваться в конце диска. 1.787 + 1.788 +Выйдите из утилиты parted: 1.789 + 1.790 +\begin{verbatim} 1.791 +(parted) q 1.792 +\end{verbatim} 1.793 + 1.794 +Перезагрузите систему. Убедитесь, что ваше ядро содержит необходимые установки. Для поддержки LVM должны быть включены параметры CONFIG\_BLK\_DEV\_RAM и CONFIG\_BLK\_DEV\_INITRD. 1.795 + 1.796 +Для созданного раздела необходимо изменить тип на LVM (8e). Поскольку parted не знает такого типа, воспользуемся утилитой fdisk: 1.797 + 1.798 +\begin{verbatim} 1.799 +%# fdisk /dev/hda 1.800 +Command (m for help): t 1.801 +Partition number (1-4): 4 1.802 +Hex code (type L to list codes): 8e 1.803 +Changed system type of partition 4 to 8e (Unknown) 1.804 +Command (m for help): w 1.805 +\end{verbatim} 1.806 + 1.807 +Инициализируем LVM, физический том; создаем группу томов и логический том для корневого раздела: 1.808 + 1.809 +\begin{verbatim} 1.810 +%# vgscan 1.811 +%# pvcreate /dev/hda4 1.812 +%# vgcreate vg /dev/hda4 1.813 +%# lvcreate -L250M -n root vg 1.814 +\end{verbatim} 1.815 + 1.816 +Создадим теперь файловую систему на логическом томе и перенесем туда содержимое корневого каталога: 1.817 + 1.818 +\begin{verbatim} 1.819 +%# mke2fs /dev/vg/root 1.820 +%# mount /dev/vg/root /mnt/ 1.821 +%# find / -xdev | cpio -pvmd /mnt 1.822 +\end{verbatim} 1.823 + 1.824 +Отредактируйте файл /mnt/etc/fstab на логическом томе соответствующем образом. Например, строку: 1.825 + 1.826 +\begin{verbatim} 1.827 +/dev/hda3 / ext2 defaults 1 1 1.828 +\end{verbatim} 1.829 + 1.830 +замените на: 1.831 + 1.832 +\begin{verbatim} 1.833 +/dev/vg/root / ext2 defaults 1 1 1.834 +\end{verbatim} 1.835 + 1.836 +Создаем образ initrd, поддерживающий LVM: 1.837 + 1.838 +\begin{verbatim} 1.839 +%# lvmcreate_initrd 1.840 +Logical Volume Manager 1.0.6 by Heinz Mauelshagen 25/10/2002 1.841 +lvmcreate_initrd -- make LVM initial ram disk /boot/initrd-lvm-2.4.20-inp1-up-rootlvm.gz 1.842 + 1.843 +lvmcreate_initrd -- finding required shared libraries 1.844 +lvmcreate_initrd -- stripping shared libraries 1.845 +lvmcreate_initrd -- calculating initrd filesystem parameters 1.846 +lvmcreate_initrd -- calculating loopback file size 1.847 +lvmcreate_initrd -- making loopback file (6491 kB) 1.848 +lvmcreate_initrd -- making ram disk filesystem (19125 inodes) 1.849 +lvmcreate_initrd -- mounting ram disk filesystem 1.850 +lvmcreate_initrd -- creating new /etc/modules.conf 1.851 +lvmcreate_initrd -- creating new modules.dep 1.852 +lvmcreate_initrd -- copying device files to ram disk 1.853 +lvmcreate_initrd -- copying initrd files to ram disk 1.854 +lvmcreate_initrd -- copying shared libraries to ram disk 1.855 +lvmcreate_initrd -- creating new /linuxrc 1.856 +lvmcreate_initrd -- creating new /etc/fstab 1.857 +lvmcreate_initrd -- ummounting ram disk 1.858 +lvmcreate_initrd -- creating compressed initrd /boot/initrd-lvm-2.4.20-inp1-up-rootlvm.gz 1.859 +\end{verbatim} 1.860 + 1.861 +Внимательно изучите вывод команды. Обратите внимание на имя 1.862 +нового образа и его размер. Отредактируйте файл /etc/lilo.conf. Он 1.863 +должен выглядеть приблизительно следующим образом: 1.864 + 1.865 +\begin{verbatim} 1.866 +image = /boot/KERNEL_IMAGE_NAME 1.867 +label = lvm 1.868 +root = /dev/vg/root 1.869 +initrd = /boot/INITRD_IMAGE_NAME 1.870 +ramdisk = 8192 1.871 +\end{verbatim} 1.872 + 1.873 +KERNEL\_IMAGE\_NAME -- имя ядра, поддерживающего LVM. INITRD\_IMAGE\_NAME -- имя образа initrd, созданного командой lvmcreate\_initrd. Возможно, вам будет нужно увеличить значение ramdisk, если у вас достаточно большая конфигурация LVM, но значения 8192 должно хватить в большинстве случаев. Значение по умолчанию параметра ramdisk равно 4096. Если сомневаетесь, проверьте вывод команды lvmcreate\_initrd в строке lvmcreate\_initrd -- making loopback file (6189 kB). 1.874 + 1.875 +После этого файл lilo.conf нужно скопировать и на логический том: 1.876 + 1.877 +\begin{verbatim} 1.878 +%# cp /etc/lilo.conf /mnt/etc/ 1.879 +\end{verbatim} 1.880 + 1.881 +Выполните команду lilo: 1.882 + 1.883 +\begin{verbatim} 1.884 +%# lilo 1.885 +\end{verbatim} 1.886 + 1.887 +Перезагрузитесь и выберите образ lvm. Для этого введите \dq{}lvm\dq{} в ответ на приглашение LILO. Система должна загрузится, а корневой раздел будет находиться на логическом томе. 1.888 + 1.889 +После того как вы убедитесь, что все работает нормально, образ lvm нужно сделать загружаемым по умолчанию. Для этого укажите в конфигурационном файле LILO строку default=lvm, и выполните команду lilo. 1.890 + 1.891 +Наконец, добавьте оставшийся старый корневой раздел в группу томов. Для этого измените тип раздела утилитой fdisk на 8е, и выполните команды: 1.892 + 1.893 +\begin{verbatim} 1.894 +%# pvcreate /dev/hda3 1.895 +%# vgextend vg /dev/hda3 1.896 +\end{verbatim} 1.897 + 1.898 + 1.899 + 1.900 +\subsection{Дополнительные вопросы по LVM} 1.901 + 1.902 +\subsubsection{Дисковые разделы и LVM внутри LVM} 1.903 +LVM может находиться рекурсивно внутри логического 1.904 +тома LVM. 1.905 + 1.906 +Например, пусть есть три логических тома: \textit{LV1}, \textit{LV2} и \textit{LV3}. 1.907 +Один из которых, LV2 разбит на разделы, 1.908 +каждый из которых является физическим томом LVM, 1.909 +который в свою очередь объединены в группу томов, 1.910 +на которых созданы логические тома и так далее. 1.911 + 1.912 +\begin{verbatim} 1.913 + LV1 LV2 LV3 1.914 + ...--++----------------------------+ +--.... 1.915 + ||+-------------------------+ | | 1.916 + ||| LVM | | | 1.917 + ||+-------------------------+ | | 1.918 + ...--++----------------------------+ +--..... 1.919 +\end{verbatim} 1.920 + 1.921 +Такая ситуация очень легко может возникнуть 1.922 +при использовании виртуальных машин, 1.923 +например в том случае, если том LV2 1.924 +выдан как диск виртуальной машине Xen или эмулятору QEMU. 1.925 + 1.926 +Может возникнуть необходимость залезть 1.927 +внутрь системы томов, которые установлены внутрь логического тома. 1.928 +Например, это может произойти в случае, когда 1.929 +виртуальная машина в результате сбоя или по какой-то другой причине 1.930 +не загружается, а нужно добраться до её данных 1.931 +(напомним, что всё это при условии, что LVM используется не только 1.932 +снуражи, то есть в домене 0, но и внутри, то есть в домене U). 1.933 + 1.934 +Решение, если говорить кратко, заключается в том, 1.935 +что бы использовать программу \textbf{kpartx} из пакета \textbf{multipath-tools}, 1.936 +которая даёт возможность строить карты устройств 1.937 +(device maps) для разделов. 1.938 + 1.939 +Далее процедура использования \textbf{kpartx} 1.940 +описывается подробно. 1.941 + 1.942 +Блочное устройство, внутри которого находятся 1.943 +тома LVM может быть любым, в частности, 1.944 +это может быть том LVM, том EVMS, простой дисковый раздел или физическое устройство. 1.945 + 1.946 +Убедитесь что пакет multipath-tools установлен: 1.947 + 1.948 +\begin{verbatim} 1.949 +%# apt-get install multipath-tools 1.950 +\end{verbatim} 1.951 + 1.952 +Посмотрите как выполнено разбинение на разделы: 1.953 + 1.954 +\begin{verbatim} 1.955 +dom0:~ # fdisk -l /dev/evms/san2/vm3 1.956 +Disk /dev/evms/san2/vm3: 5368 MB, 5368708096 bytes 1.957 +255 heads, 63 sectors/track, 652 cylinders 1.958 +Units = cylinders of 16065 * 512 = 8225280 bytes 1.959 + 1.960 + Device Boot Start End Blocks Id System 1.961 +/dev/evms/san2/vm3p1 * 1 9 72261 83 Linux 1.962 +/dev/evms/san2/vm3p2 10 652 5164897+ f W95 Ext'd (LBA) 1.963 +/dev/evms/san2/vm3p5 10 75 530113+ 82 Linux swap / Solaris 1.964 +/dev/evms/san2/vm3p6 76 493 3357553+ 83 Linux 1.965 +/dev/evms/san2/vm3p7 494 652 1277136 83 Linux 1.966 +\end{verbatim} 1.967 + 1.968 +Создайте карту устройств для блочного устройства: 1.969 + 1.970 +\begin{verbatim} 1.971 +dom0:~ # kpartx -a /dev/evms/san2/vm3 1.972 +\end{verbatim} 1.973 + 1.974 +Карты находятся здесь: 1.975 + 1.976 +\begin{verbatim} 1.977 +%# ls -l /dev/mapper 1.978 +total 0 1.979 +lrwxrwxrwx 1 root root 16 Aug 26 16:28 control -> ../device-mapper 1.980 +brw------- 1 root root 253, 1 Aug 26 16:28 mpath1 1.981 +brw------- 1 root root 253, 0 Aug 26 16:28 mpath2 1.982 +brw------- 1 root root 253, 13 Aug 29 08:55 san2|vm3p1 1.983 +brw------- 1 root root 253, 14 Aug 29 08:55 san2|vm3p2 1.984 +brw------- 1 root root 253, 15 Aug 29 08:55 san2|vm3p5 1.985 +brw------- 1 root root 253, 16 Aug 29 08:55 san2|vm3p6 1.986 +brw------- 1 root root 253, 17 Aug 29 08:55 san2|vm3p7 1.987 +\end{verbatim} 1.988 + 1.989 +Имена выглядят несколько странно, но вообще это нормально. 1.990 + 1.991 +Можно попробовать смонтировать раздел: 1.992 + 1.993 +\begin{verbatim} 1.994 +%# mount -o rw /dev/mapper/san2\|vm3p6 /mnt 1.995 +\end{verbatim} 1.996 + 1.997 +В данном случае была смонтирована корневая файловая система 1.998 +виртуальной машины: 1.999 + 1.1000 +\begin{verbatim} 1.1001 +%# ls -l /mnt 1.1002 +total 96 1.1003 +dr-xr-xr-x 3 root root 4096 Aug 28 10:12 automount 1.1004 +drwxr-xr-x 2 root root 4096 Aug 25 16:51 bin 1.1005 +drwxr-xr-x 2 root root 4096 Aug 25 16:45 boot 1.1006 +drwxr-xr-x 5 root root 4096 Aug 25 16:45 dev 1.1007 +drwxr-xr-x 69 root root 8192 Aug 29 08:53 etc 1.1008 +drwxr-xr-x 2 root root 4096 May 4 01:43 home 1.1009 +drwxr-xr-x 11 root root 4096 Aug 25 17:10 lib 1.1010 +drwx------ 2 root root 16384 Aug 25 16:45 lost+found 1.1011 +drwxr-xr-x 2 root root 4096 May 4 01:43 media 1.1012 +drwxr-xr-x 3 root root 4096 Aug 28 15:08 mnt 1.1013 +drwxr-xr-x 4 root root 4096 Aug 25 16:49 opt 1.1014 +drwxr-xr-x 2 root root 4096 Aug 25 16:45 proc 1.1015 +drwx------ 10 root root 4096 Aug 28 14:56 root 1.1016 +drwxr-xr-x 3 root root 8192 Aug 25 16:52 sbin 1.1017 +drwxr-xr-x 4 root root 4096 Aug 25 16:45 srv 1.1018 +-rw-r--r-- 1 root root 0 Aug 29 08:53 success 1.1019 +drwxr-xr-x 3 root root 4096 Aug 25 16:45 sys 1.1020 +drwxrwxrwt 6 root root 4096 Aug 29 08:49 tmp 1.1021 +drwxr-xr-x 12 root root 4096 Aug 25 16:50 usr 1.1022 +drwxr-xr-x 3 root root 4096 Aug 25 16:54 var 1.1023 +\end{verbatim} 1.1024 + 1.1025 +Аналогичным образом монтируем остальные разделы: 1.1026 + 1.1027 +\begin{verbatim} 1.1028 +%# mount -o rw /dev/mapper/san2\|vm3p1 /mnt/boot 1.1029 +%# mount -o rw /dev/mapper/san2\|vm3p7 /mnt/var 1.1030 +\end{verbatim} 1.1031 + 1.1032 +С разделами можно работать как обычно. 1.1033 + 1.1034 +По завершению работы нужно 1.1035 +\begin{itemize} 1.1036 +\item размонтировать разделы; 1.1037 +\item удалить карты устройств. 1.1038 +\end{itemize} 1.1039 + 1.1040 +Произвести эти действия 1.1041 +особенно важно, если разделы принадлежат какой-либо виртуальной 1.1042 +машине, которую вы собираетесь запускать. 1.1043 + 1.1044 +\begin{verbatim} 1.1045 +%# umount /mnt/var 1.1046 +%# umount /mnt/boot 1.1047 +%# umount /mnt 1.1048 +%# kpartx -d /dev/evms/san2/vm3 1.1049 + 1.1050 +%# ls -l /dev/mapper 1.1051 +total 0 1.1052 +lrwxrwxrwx 1 root root 16 Aug 26 16:28 control > ../device-mapper 1.1053 +brw------- 1 root root 253, 1 Aug 26 16:28 mpath1 1.1054 +brw------- 1 root root 253, 0 Aug 26 16:28 mpath2 1.1055 +\end{verbatim} 1.1056 + 1.1057 +При условии что разделы находятся не на блочном устройстве, 1.1058 +а в обычно файле, сначала нужно воспользоваться 1.1059 +программой \textit{losetup}. 1.1060 + 1.1061 +В данном примере \textit{loop0} это первое свободное loopback-устройство, 1.1062 +но возможно, что оно будет занято, и тогда вместо loop0 нужно будет использовать \textit{loopX} с более выскоим номерм X: 1.1063 + 1.1064 +\begin{verbatim} 1.1065 +%# cd /etc/xen/images 1.1066 +%# losetup /dev/loop0 /xen/images/vm1.img 1.1067 +%# losetup -a 1.1068 +/dev/loop0: [6806]:318859 (vm1.img) 1.1069 + 1.1070 +%# fdisk -l /dev/loop0 1.1071 +Disk /dev/loop0: 1638 MB, 1638400000 bytes 1.1072 +255 heads, 63 sectors/track, 199 cylinders 1.1073 +Units = cylinders of 16065 * 512 = 8225280 bytes 1.1074 + Device Boot Start End Blocks Id System 1.1075 +/dev/loop0p1 * 1 9 72261 83 Linux 1.1076 +/dev/loop0p2 10 199 1526175 5 Extended 1.1077 +/dev/loop0p5 10 26 136521 82 Linux swap / Solaris 1.1078 +/dev/loop0p6 27 151 1004031 83 Linux 1.1079 +/dev/loop0p7 152 199 385528+ 83 Linux 1.1080 + 1.1081 +%# kpartx -a /dev/loop0 1.1082 +%# ls -l /dev/mapper/ 1.1083 +total 0 1.1084 +lrwxrwxrwx 1 root root 16 Sep 12 15:38 control -> ../device-mapper 1.1085 +brw------- 1 root root 253, 15 Sep 30 13:19 loop0p1 1.1086 +brw------- 1 root root 253, 16 Sep 30 13:19 loop0p2 1.1087 +brw------- 1 root root 253, 17 Sep 30 13:19 loop0p5 1.1088 +brw------- 1 root root 253, 18 Sep 30 13:19 loop0p6 1.1089 +brw------- 1 root root 253, 19 Sep 30 13:19 loop0p7 1.1090 +\end{verbatim} 1.1091 + 1.1092 +Можно монтировать, копировать, восстанаивливать, форматировать 1.1093 +эти разделы, короче, делать с ними всё, что делается с обучными дисковыми разделами. 1.1094 + 1.1095 +\begin{verbatim} 1.1096 +%# mount /dev/mapper/loop0p6 /mnt 1.1097 +%# mount /dev/mapper/loop0p1 /mnt/boot 1.1098 +%# mount /dev/mapper/loop0p7 /mnt/var 1.1099 +%# mount 1.1100 +-snip- 1.1101 +/dev/mapper/loop0p6 on /mnt type ext3 (rw) 1.1102 +/dev/mapper/loop0p1 on /mnt/boot type ext2 (rw) 1.1103 +/dev/mapper/loop0p7 on /mnt/var type ext3 (rw) 1.1104 +\end{verbatim} 1.1105 + 1.1106 +Другое решение: 1.1107 + 1.1108 +\begin{verbatim} 1.1109 +%# lomount -diskimage vm1.img -partition 1 /mnt 1.1110 +%# mount 1.1111 +-snip- 1.1112 +/xen/images/vm1.img on /mnt type ext2 (rw,loop=/dev/loop0,offset=32256) 1.1113 +\end{verbatim} 1.1114 + 1.1115 +С одной стороны при таком подходе: 1.1116 +\begin{itemize} 1.1117 +\item не нужно вручную подключать loopback-устройства; 1.1118 +\item не нужно использовать \textit{kpartx}; 1.1119 +\end{itemize} 1.1120 +Но с другой стороны: 1.1121 +\begin{itemize} 1.1122 +\item это решение позволяет смонтировать только простые разделы, размещённые внутри тома LVM. 1.1123 +\end{itemize} 1.1124 + 1.1125 +Если внутри логического тома выполнено другое разбиение, 1.1126 +такой подход не поможет. 1.1127 + 1.1128 +Если внутри тома находится расширенный раздел, подход работает, 1.1129 +но требует дополнительных манипуляций: 1.1130 + 1.1131 +\begin{verbatim} 1.1132 +%# fdisk -l -u /xen/images/vm1.img 1.1133 +You must set cylinders. 1.1134 +You can do this from the extra functions menu. 1.1135 +Disk vm1.img: 0 MB, 0 bytes 1.1136 +255 heads, 63 sectors/track, 0 cylinders, total 0 sectors 1.1137 +Units = sectors of 1 * 512 = 512 bytes 1.1138 + Device Boot Start End Blocks Id System 1.1139 +vm1.img1 * 63 144584 72261 83 Linux 1.1140 +vm1.img2 144585 3196934 1526175 5 Extended 1.1141 +vm1.img5 144648 417689 136521 83 Linux 1.1142 +vm1.img6 417753 2425814 1004031 83 Linux 1.1143 +vm1.img7 2425878 3196934 385528+ 83 Linux 1.1144 +\end{verbatim} 1.1145 + 1.1146 +Найти начало интересующего раздела можно путём 1.1147 +умножения значения поля \textit{Start} (показанного fdiks) на 512. 1.1148 + 1.1149 +417753\(\ast{}\)512=213889536 1.1150 + 1.1151 +Если мы хотим смонтировать корневой раздел: 1.1152 + 1.1153 +\begin{verbatim} 1.1154 +%# mount -o loop,offset=213889536 /xen/images/vm1.img /mnt 1.1155 +%# mount 1.1156 +-snip- 1.1157 +/xen/images/vm1.img on /mnt type ext3 (rw,loop=/dev/loop0,offset=213889536) 1.1158 +\end{verbatim} 1.1159 + 1.1160 +\subsubsection{Создание зашифрованных томов LVM} 1.1161 +Пример создания зашифрованного тома: 1.1162 + 1.1163 +\begin{verbatim} 1.1164 +%# cryptsetup -y -s 256 -c aes-cbc-essiv:sha256 luksFormat /dev/hda3 1.1165 +%# cryptsetup luksOpen /dev/hda3 lukspace 1.1166 +%# pvcreate /dev/mapper/lukspace 1.1167 +%# vgcreate vg /dev/mapper/lukspace 1.1168 +%# lvcreate -L10G -nroot vg 1.1169 +%# lvcreate -l 100%FREE -nmyspace vg 1.1170 +\end{verbatim} 1.1171 + 1.1172 +Подробнее: 1.1173 +\begin{itemize} 1.1174 +\item \htmladdnormallinkfoot{Recover Data From RAID1 LVM Partitions With Knoppix Linux LiveCD}{http://www.howtoforge.com/recover\_data\_from\_raid\_lvm\_partitions} (англ.) 1.1175 +\item \htmladdnormallinkfoot{LVM Recovery Tale}{http://codeworks.gnomedia.com/archives/2005/general/lvm\_recovery/} (англ.) 1.1176 +\item \htmladdnormallinkfoot{Recovery of RAID and LVM2 Volumes}{http://www.linuxjournal.com/article/8874} (англ.) 1.1177 +\end{itemize} 1.1178 + 1.1179 + 1.1180 +\subsubsection{Восстановления LVM после сбоя} 1.1181 +\begin{itemize} 1.1182 +\item \htmladdnormallinkfoot{Recover Data From RAID1 LVM Partitions With Knoppix Linux LiveCD}{http://www.howtoforge.com/recover\_data\_from\_raid\_lvm\_partitions}(англ.) 1.1183 +\item \htmladdnormallinkfoot{LVM Recovery Tale}{http://codeworks.gnomedia.com/archives/2005/general/lvm\_recovery/} (англ.) 1.1184 +\item \htmladdnormallinkfoot{Recovery of RAID and LVM2 Volumes}{http://www.linuxjournal.com/article/8874} (англ.) 1.1185 +\end{itemize} 1.1186 + 1.1187 + 1.1188 +\subsubsection{Определение интенсивности использования томов LVM} 1.1189 + 1.1190 +Определить интенсивность ввода/вывода на каждый том LVM 1.1191 +можно с помощью программы \textbf{iostat} (пакет \textit{sysstat}). 1.1192 + 1.1193 +Формат вызова: 1.1194 +\begin{verbatim} 1.1195 + iostat [опции] интервал повторения 1.1196 +\end{verbatim} 1.1197 + 1.1198 +Например, мы хотим наблюдать за интенсивностью ввода вывода на протяжении 1.1199 +одного часа, с интервалом в 10 секунд: 1.1200 +\begin{verbatim} 1.1201 + %# iostat 10 360 1.1202 +\end{verbatim} 1.1203 +Или в расширенном виде: 1.1204 +\begin{verbatim} 1.1205 + %# iostat -dx 10 360 1.1206 +\end{verbatim} 1.1207 + 1.1208 + 1.1209 +Программа iostat показывает 1.1210 +имена томов, которые чаще всего оказываются неинформативными 1.1211 +для администратора: 1.1212 +\begin{verbatim} 1.1213 +$ iostat -dx 1.1214 +Linux 2.6.18-4-xen-686 (cholpon... 1.1215 + 1.1216 +Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s av... 1.1217 +sda 0,44 128,55 1,77 3,36 57,23 1055,45 ... 1.1218 +sdb 0,08 0,00 0,05 0,00 0,60 0,00 ... 1.1219 +dm-0 0,00 0,00 0,03 0,00 0,22 0,00 ... 1.1220 +dm-1 0,00 0,00 0,03 0,00 0,21 0,00 ... 1.1221 +dm-2 0,00 0,00 0,28 123,53 13,62 988,24 ... 1.1222 +dm-3 0,00 0,00 0,02 0,48 1,06 3,83 ... 1.1223 +dm-4 0,00 0,00 0,00 0,00 0,01 0,00 ... 1.1224 +dm-5 0,00 0,00 0,03 0,00 0,22 0,00 ... 1.1225 +dm-6 0,00 0,00 0,20 2,48 3,52 19,85 ... 1.1226 +\end{verbatim} 1.1227 + 1.1228 +Здесь, видно, напимер, что нагрузка на \textit{dm-2} выше чем на другие LVM 1.1229 +тома, но сразу не видно, какому именно тому соответствует \textit{dm-2}. 1.1230 +Это можно выяснить вручную: 1.1231 + 1.1232 +\begin{verbatim} 1.1233 +%$ ls -l /dev/dm-2 1.1234 +brw-rw---- 1 root disk 254, 2 Фев 14 12:49 /dev/dm-2 1.1235 +%$ ls -l /dev/mapper/| grep '254,\s*2' 1.1236 +brw-rw---- 1 root disk 254, 2 Фев 14 12:49 MAIN-xen 1.1237 +\end{verbatim} 1.1238 + 1.1239 +Однако выяснять так каждый раз для каждой записи 1.1240 +неудобно. Было бы лучше, если бы имена были сразу 1.1241 +в таблице были представлены правильно. 1.1242 + 1.1243 +Функция \textbf{dm\_convert}, представленная ниже, 1.1244 +преобразует имена томов к понятной форме. 1.1245 +Она работает как фильтр: обрабатывает стандартный поток ввода, 1.1246 +и отправляет результат на поток вывода. 1.1247 +При замене учитывается то, что имена могут иметь разную 1.1248 +длину, и что данные должны сохранить форматирование. 1.1249 +\begin{verbatim} 1.1250 +dm_convert() { 1.1251 +sed "s/ / /; $( \ 1.1252 +LANG=C ls -l /dev/dm* /dev/mapper/* | grep 25[34], \ 1.1253 +| sort -n -k +6 | awk '{print $10}' \ 1.1254 +| sed 's@/dev/@@; s@mapper/@@' \ 1.1255 +| perl -ne '$a=$_;$b=<>;chomp $a; chomp $b; '\ 1.1256 + '$p=q(.)x(length($b)-length(a)-4); print qq(s/$a $p/$b/;) ')" 1.1257 +} 1.1258 +\end{verbatim} 1.1259 +\noindent теперь вы можете пропускать вывод \textbf{iostat} через \textbf{dm\_convert} 1.1260 +и получать сразу понятные результаты: 1.1261 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/0/03/Iostat-dm.png}}\\ \textit{Замер нагрузки на подсистему ввода/вывода с помощью \textit{iostat}}\end{center} 1.1262 + 1.1263 +\begin{verbatim} 1.1264 +$ iostat -dx 1 100 | dm_convert 1.1265 +Linux 2.6.18-4-xen-686 (cholpon) 14.02.2008 1.1266 + 1.1267 +Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s av... 1.1268 +sda 0,43 124,98 1,74 3,33 55,91 1026,56 ... 1.1269 +sdb 0,08 0,00 0,05 0,00 0,58 0,00 ... 1.1270 +VG2-music 0,00 0,00 0,03 0,00 0,22 0,00 ... 1.1271 +VG2-xentaur 0,00 0,00 0,03 0,00 0,20 0,00 ... 1.1272 +MAIN-xen 0,00 0,00 0,27 120,02 13,23 960,13 ... 1.1273 +MAIN-backup 0,00 0,00 0,02 0,47 1,04 3,74 ... 1.1274 +MAIN-movies 0,00 0,00 0,00 0,00 0,01 0,00 ... 1.1275 +MAIN-iso 0,00 0,00 0,03 0,00 0,21 0,00 ... 1.1276 +MAIN-home 0,00 0,00 0,19 2,47 3,43 19,74 ... 1.1277 +... 1.1278 +\end{verbatim} 1.1279 + 1.1280 +Для того чтобы смотреть статистику не в виде бесконечной, 1.1281 +бегущей по консоли полосы, а в виде постоянно обновляющегося окна (a-la top), 1.1282 +вы можете использовать программу \textbf{watch} (или \textbf{display} в FreeBSD). 1.1283 + 1.1284 +Но в этом случае \textbf{dm\_convert} должен быть оформлен не как 1.1285 +функция shell, а как отдельный скрипт: 1.1286 + 1.1287 +\begin{verbatim} 1.1288 +%$ cat /usr/local/bin/dm_convert 1.1289 +#!/bin/sh 1.1290 + 1.1291 +sed "s/ / /; $( \ 1.1292 +LANG=C ls -l /dev/dm* /dev/mapper/* | grep 25[34], \ 1.1293 +| sort -n -k +6 | awk '{print $10}' \ 1.1294 +| sed 's@/dev/@@; s@mapper/@@' \ 1.1295 +| perl -ne '$a=$_;$b=<>;chomp $a; chomp $b; '\ 1.1296 + '$p=q(.)x(length($b)-length(a)-4); print qq(s/$a $p/$b/;) ')" 1.1297 +\end{verbatim} 1.1298 + 1.1299 + 1.1300 +Скрипт должен быть исполняемым: 1.1301 +\begin{verbatim} 1.1302 +%# chmod +x /usr/local/bin/dm_convert 1.1303 +\end{verbatim} 1.1304 + 1.1305 +Теперь можно вызывать программу просмотра статистики нагрузки \textbf{iostat} 1.1306 +и смотреть на какие тома LVM наибольшая нагрузка: 1.1307 + 1.1308 +\begin{verbatim} 1.1309 +%# iostat -dx 2 2 | dm_convert 1.1310 +%# watch 'iostat -dx 2 2 | dm_convert' 1.1311 +\end{verbatim} 1.1312 + 1.1313 +Если вы используете систему виртуализации, то результаты автоматическ означают 1.1314 +какую дисковую активность создаёт тот или иной виртуальный домен. 1.1315 + 1.1316 +Собранная информация может быть отправной точкой, для того чтобы регулировать 1.1317 +приоритеты ввода/вывода для доменов с помощью \textbf{dm-band}. 1.1318 +В любом случае, это позволит выяснить какие именно задачи 1.1319 +создают на дисковую подсистему системы виртуализации наибольшую нагрузку. 1.1320 + 1.1321 +\paragraph{Графическое представление статистики ввода/вывода в Cacti}. 1.1322 + 1.1323 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/a/a4/Cacti-iostat-1.png}}\\ \textit{}\end{center} 1.1324 + 1.1325 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/8/8b/Cacti-iostat-2.png}}\\ \textit{}\end{center} 1.1326 + 1.1327 + 1.1328 +\subsection{Дополнительная информация} 1.1329 + 1.1330 +\begin{itemize} 1.1331 +\item \htmladdnormallinkfoot{LVM-HOWTO}{http://tldp.org/HOWTO/LVM-HOWTO/} (англ.) 1.1332 +\item \htmladdnormallinkfoot{LVM2 Resource Page}{http://sourceware.org/lvm2/} (англ.) 1.1333 +\item \htmladdnormallinkfoot{Повесть о Linux и LVM (Logical Volume Manager)}{http://gazette.linux.ru.net/rus/articles/taleLinuxLVM.html}, Иван Песин 1.1334 +\item \htmladdnormallinkfoot{LVM}{http://ru.wikipedia.org/wiki/LVM} в Википедии 1.1335 +\item \htmladdnormallinkfoot{LVM}{http://en.wikipedia.org/wiki/Logical\_volume\_management} в Wikipedia (англ.) 1.1336 +\end{itemize} 1.1337 + 1.1338 +Xen и LVM: 1.1339 +\begin{itemize} 1.1340 +\item \htmladdnormallinkfoot{(Xen-users) Xen with LVM}{http://lists.xensource.com/archives/html/xen-users/2007-10/msg00331.html} (англ.) 1.1341 +\item \htmladdnormallinkfoot{Mount/access Files Residing on Xen Virtual Machines}{http://www.novell.com/coolsolutions/tip/19568.html} (англ.) 1.1342 +\end{itemize} 1.1343 + 1.1344 + 1.1345 +