xg-scale
changeset 0:4730a0d07d88 v0.1
Исходники курса после первого прочтения.
Правки (которых должно быть много),
ещё пока не вносились.
Правки (которых должно быть много),
ещё пока не вносились.
author | Igor Chubin <igor@chub.in> |
---|---|
date | Tue Jul 01 16:16:44 2008 +0300 (2008-07-01) |
parents | |
children | 6f6e0f706b86 |
files | aoe.tex bridge.tex drbd.tex evms.tex lvm.tex raid.tex windowsxp.tex xen-drbd-install.tex xen-drbd.tex xen.tex xen/block-attach.tex xen/devices.tex xen/drbd.tex xen/export.tex xen/hvm2pv.tex xen/hw.tex xen/installation.tex xen/io.tex xen/linux.tex xen/net.tex xen/os.tex xen/pxe.tex xen/resources.tex xg-scale.tex |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/aoe.tex Tue Jul 01 16:16:44 2008 +0300 1.3 @@ -0,0 +1,424 @@ 1.4 +\section{ATA over Ethernet} 1.5 + 1.6 +Описываемая технология построения хранилищ даёт возможность строить дисковые массивы 1.7 +для архивов, резервных копий или традиционного использования 1.8 +на базе обычных дисков ATA, которые дешевле даже чем лента. 1.9 +Эта технология может оказаться особенно интересной для тех, 1.10 +кто использует виртуализированные системы на базе Xen. 1.11 + 1.12 +Технология является альтернативой для iSCSI, но с более узким 1.13 +спектром задач, где она может использоваться. Подробнее об этом ниже, 1.14 +в разделе \textit{\dq{}Преимущества и недостатки AoE\dq{}}. 1.15 + 1.16 +\subsection{Введение} 1.17 +Данные некоторых видов огромны просто в силу своей природы. 1.18 +Видео, например, как правило занимает большой объём диска. 1.19 +В связи с широким распространением видеонаблюдения 1.20 +потребность в хранении видео-данных становится ещё более актуальной. 1.21 + 1.22 +Резервное копирование и избыточность данных 1.23 +имеет существенное значение для любого дела, 1.24 +в котором используются компьютеры. 1.25 +Похоже, не важно, какой объём хранилища -- всегда хочется иметь больше. 1.26 +Даже почта может вырасти за пределы контейнера, в котором она лежит. 1.27 +Это хорошо известно провайдерам Интернет-услуг. 1.28 + 1.29 +Хранилище неограниченного размера вполне имеет право на существование, 1.30 +если сделать так, чтобы диски можно было вынести за предел корпуса 1.31 +и отвязать хранилище от компьютера, которые его использует. 1.32 +Принцип развязки связанных компонент с целью достижения большей гибкости 1.33 +хорошо показал себя во множестве различных областей, 1.34 +не только при построении хранилищ. 1.35 +Модульный код обладает гибкостью, которая позволяет 1.36 +применять его в непредвиденных ситуациях или 1.37 +стерео-система, сделанная из компонентов, 1.38 +может использоваться в различных интересных конфигурациях, 1.39 +а не только как аудио-комбайн. 1.40 + 1.41 +Наиболее известный пример хранилищ, работающих из коробки это, наверное, SAN (storage area network). 1.42 +Когда SAN\rq{}ы только появились вокруг них был большой шум и переполох. 1.43 +Сложно было выяснить, что же это в действительности такое. 1.44 +А когда в итоге это всё-таки получилось, выяснилось что это нечто 1.45 +сложное, проприетарное и дорогое. 1.46 + 1.47 +Однако, поддерживая SAN\rq{}ы Linux-сообщество сделало несколько полезных изменений в ядре. 1.48 +Сегодня в ядрах Linux есть возможности, которых ещё несколько лет назад очень не хватало. 1.49 +Они могут использоваться как гигантские блочные устройства, выходящие далеко 1.50 +за старые пределы в два терабайта (именно терабайта! подробности, например, в \url{http://lkml.org/lkml/2002/5/9/217} и \url{http://kerneltrap.org/node/186}). Они поддерживают намного больше 1.51 +одновременно подключённых дисков. Также появились богатые возможности управления томами. 1.52 +В дополнение ко всему прочему, файловые системы могут теперь расширяться до огромных размеров, 1.53 +даже когда они смонтированы и используются. 1.54 + 1.55 +Здесь рассматриваются новые пути использования эти возможности ядра: 1.56 +диски выносятся из компьютера старые пределы ёмкости преодолеваются. 1.57 +Можно воспринимать ATA over Ethernet как способ заменить IDE-кабель 1.58 +сетью Ethernet. Когда хранилище и компьютер развязаны и между ними стоит такая гибкая вещь 1.59 +как Ethernet, возможности ограничены только воображением и желанием изучать новые вещи. 1.60 + 1.61 +\subsection{Что такое AoE} 1.62 +ATA over Ethernet (AoE) — это сетевой протокол, зарегистрированный IEEE как Ethernet-протокол 1.63 +номер 0x88a2. AoE это низкоуровневый протокол, намного более простой чем TCP/IP или даже просто IP. 1.64 +TCP/IP и IP нужны обязательно, если требуется организовать (надёжную) передачу данных через Интернет, 1.65 +но на компьютер в этом случае ложится намного большая нагрузка, для того чтобы 1.66 +обеспечить ту сложность, которая присуща этим протоколам. 1.67 + 1.68 +Особенно хорошо это известно пользователям iSCSI. 1.69 +iSCSI позволяет перенаправить ввод/вывод поверх TCP/IP, 1.70 +что в свою очередь даёт возможность заменить дорогое оборудование Fibre Channel на значительно 1.71 +более дешёвое Ethernet и IP. 1.72 +Зачастую iSCSI используется совместно с устройствами для разгрузки TCP (TCP offload engines, TOE). 1.73 +Эти устройства довольно дорогие, но они снимают часть нагрузки TCP/IP 1.74 +с центрального процессора машин, использующих iSCSI. 1.75 + 1.76 +Интересно, что в большинстве своём iSCSI не используется поверх собственно сети Интернет. 1.77 +Чаще всего пакеты просто передаются на машину, стоящую в соседней серверной стойке, 1.78 +и в этом случае вся мощь TCP/IP оказывается просто избыточной. 1.79 + 1.80 +Резонный вопрос, почему бы вместо того что разгружать TCP/IP вообще от него не избавиться? 1.81 +Протокол AoE именно это и делает. 1.82 +И вместо того чтобы полагаться на TCP/IP, он полагается на возможности современных коммутаторов, 1.83 +у которых не бывает коллизий, есть возможность управления потоком и 1.84 +постоянно растёт производительность. 1.85 +В локальной сети сохраняется последовательность пакетов 1.86 +и для каждого пакеты сетевым оборудованием вычисляется контрольная сумма. 1.87 + 1.88 +В каждом AoE пакете находится команда для ATA-диска или ответ от ATA-диска. 1.89 +Драйвер AoE в ядре Linux выполняется AoE и делает диск доступным как обычное 1.90 +блочное устройство, такое, например, как \texttt{/dev/etherd/e0.0} -- точно также 1.91 +как IDE-драйвер делает диск, подключённый к концу IDE-кабеля, доступным как \texttt{/dev/hda}. 1.92 +Драйвер, если нужно, ретранслирует пакеты, так что AoE-устройство выглядит для остального ядра как обычный диск. 1.93 + 1.94 +В дополнение к ATA командам, у AoE есть простая возможность идентификации 1.95 +доступных устройств с помощью конфигурационных опросных пакетов (query config packets). 1.96 +Это всё: ATA команды и конфигурационных опросные пакеты. 1.97 + 1.98 +Возникает вопрос: 1.99 +если все диски находятся в сети, тогда как я могу ограничить доступ к дискам? 1.100 +Как можно быть уверенным что, даже если машину А взломали, что диски машины B в безопасности? 1.101 + 1.102 +Ответ в том, что AoE немаршрутизируемый протокол. Можно легко определить какой компьютер 1.103 +будет видеть какие диски путём конфигурирования Ethernet-сети. 1.104 +Поскольку AoE-устройствам не нужны IP-адреса, создать изолированные 1.105 +Ethernet-сети несложно. 1.106 +Большинство современных коммутаторов имеют возможность организации 1.107 +VLAN\rq{}ов, что позволяет легко разделить коммутатор на несколько широковещательных доменов. 1.108 + 1.109 +Протокол AoE настолько легковесный, что его может использовать даже самое недорогое железо 1.110 +(существует как минимум один производитель оборудования, поддерживаеющего ATA over Ethernet — Coraid). 1.111 +Описание спецификаций AoE помещается на 8 страниц. Простота протокола выглядит контрастно 1.112 +по отношению к iSCSI, который описывается на сотнях страниц, 1.113 +включая спецификации по шифрованию, маршрутизации, контролю доступа 1.114 +и множеству других вопросов. 1.115 + 1.116 +Простые примитивы могут быть очень мощными. 1.117 + 1.118 +\subsection{Стэн-архиватор} 1.119 +Эта история основана на реальных событиях, случившихся с гражданином 1.120 +одного другого государства. 1.121 + 1.122 +Стэн — вымышленный админ, работающий на государственной службе. 1.123 +В соответствии с новым государственным законом той страны все официальные 1.124 +документы должны архивироваться. Любой гражданин государства 1.125 +может потребовать показать любой документ в любое время. 1.126 +Из-за этого Стэну понадобилось огромное хранилище, которое может расти 1.127 +без всяких ограничений. Производительность хранилища может не быть 1.128 +больше производительности локального диска. Любые данные из хранилища 1.129 +должны доставаться легко и мгновенно. 1.130 + 1.131 +Стэн уверенно чувствует себя в системном администрировании Linux и Ethernet сетях, 1.132 +и из-за этого он решает попробовать для своей задачи ATA over Ethernet. 1.133 +Он покупает кое-какое оборудование, потратив на это меньше \$6.5K: 1.134 +\begin{itemize} 1.135 +\item Одна двухпортовая гигабитная Ethernet-карта, вместо старой 100-мегабитной карты. 1.136 +\item Один 26-портовый коммутатор с двумя гигабитными портами. 1.137 +\item Одну полку Coraid EtherDrive и десять блэйдов EtherDrive. 1.138 +\item Десять 400GB ATA жестких дисков. 1.139 +\end{itemize} 1.140 + 1.141 +Оборудование может быть объединеное в программный RAID-10 — чередование поверх зеркалированных пар. 1.142 +Хотя этак конфигурация не даёт столько ёмкости как конфигурация RAID 5, 1.143 +она максимизирует отказоустойчивость, надёжность, снижает нагрузку 1.144 +на процессор и время реинициализации диска при замене. 1.145 + 1.146 +Имеет смысл поверх AoE-дисков использовать 1.147 +LVM и файловые системы с возможностью online-расширения, такие например, 1.148 +как ext3, XFS или JFS. 1.149 +Это даст возможность в дальнейшем, при необходимости купить новую заполненную 1.150 +полку, создать ещё один RAID 10, превратить его в физический том, 1.151 +и использовать этот том для расширения 1.152 +объёма логических томов с файловыми системами. 1.153 + 1.154 +Для старых систем нужно скомпилировать драйвер 1.155 +AoE с AOE\_PARTITIONS=1 (в частности, sarge не поддерживал большие минорные номера), 1.156 +поэтому он выключает поддержку разделов, для того чтобы использовать побольше дисков. 1.157 + 1.158 +\begin{verbatim} 1.159 +%# # Настройка хоста для работы с AOE 1.160 + 1.161 +%# # Сборка и инсталляция драйвера aoe 1.162 +%# tar xvfz aoe-2.6-5.tar.gz 1.163 +%# cd aoe-2.6-5 1.164 +%# make AOE_PARTITIONS=1 install 1.165 + 1.166 +%# # Настройка сети 1.167 +%# # Для AoE IP-адрес не нужен 1.168 +%# ifconfig eth1 up 1.169 + 1.170 +%# # Чтобы быть уверенным что интерфейс успел подняться, нужно подождать какое-то время 1.171 +%# # И после этого загрузить драйвер aoe 1.172 +%# sleep 5 1.173 +%# modprobe aoe 1.174 + 1.175 +%# # Теперь можно посмотреть какие AoE-устройства есть в сети 1.176 +%# aoe-stat 1.177 +\end{verbatim} 1.178 + 1.179 +\subsection{Минорные номера устройств} 1.180 +Программы, которые хотят использовать устройство, как правило, обращаются к нему 1.181 +через специальный файл, соответствующий ему. Типичный пример -- файл \texttt{/dev/hda}. 1.182 +Команда \texttt{ls -l} покажет для этого устройства, \texttt{/dev/hda}, номера 3 и 0. 1.183 +Мажорный номер 3 и минорный номер 0. А у устройства \texttt{/dev/hda1} минорный номер 1, 1.184 +в то время как мажорный номер тоже 3. 1.185 + 1.186 +До ядра 2.6 минорный номер был 8битный, ограничивая возможное количество номеров от 0 до 255. 1.187 +Ни у кого и не было столько устройств, поэтому ограничение не имело существенного значения. 1.188 +Теперь, когда диски могут быть отвязаны от серверов, ограничение стало важным -- 1.189 +в настоящее время ядро 2.6 использует до 20 бит для минорного номера устройства. 1.190 + 1.191 +Иметь 1048576 разных значений для минорного номера это большая помощь для систем, в которых 1.192 +много устройств, но не всякое программное обеспечение может с этим разобраться. 1.193 +Если glibc или другая программа всё ещё думает, что минорные номера 8-битные, 1.194 +будет проблематично заставить её использовать номера превышающие 255. 1.195 + 1.196 +Для облегчения перехода, драйвер AoE может быть скомипилирован 1.197 +без поддержки разделов. 1.198 +Это позволит вместо 16 номеров на диск использовать только один. 1.199 +Так что, даже на системах, которые до сих пор не поддерживают большие 1.200 +минорные номера как ядро 2.6, можно использовать до 256 AoE дисков. 1.201 + 1.202 +Команды для создания файловой системы и логических томов показаны на листинге 2. 1.203 +Стэн решил назвать группу ben и логический том franklin. 1.204 +После этого нужно сделать небольшие изменения в конфигурации LVM2. 1.205 +Во-первых, нужно добавить строку с типом = [\dq{}aoe\dq{}, 16], 1.206 +так чтобы LVM распознал AoE-диски. Во-вторых, нужно указать md\_component\_detection = 1, 1.207 +чтобы диски внутри RAID 10 игнорировались, как только весь RAID 10 1.208 +стал физическим томом. 1.209 + 1.210 +\begin{verbatim} 1.211 +%# # ускорить инициализацию массива 1.212 +%# for f in `find /proc | grep speed`; do echo 100000 > $f done 1.213 + 1.214 +%# создать массив (mdadm will manage hot spares) 1.215 +%# mdadm -C /dev/md1 -l 1 -n 2 /dev/etherd/e0.0 /dev/etherd/e0.1 1.216 +%# mdadm -C /dev/md2 -l 1 -n 2 /dev/etherd/e0.2 /dev/etherd/e0.3 1.217 +%# mdadm -C /dev/md3 -l 1 -n 2 /dev/etherd/e0.4 /dev/etherd/e0.5 1.218 +%# mdadm -C /dev/md4 -l 1 -n 2 -x 2 \ 1.219 + /dev/etherd/e0.6 /dev/etherd/e0.7 \ 1.220 + /dev/etherd/e0.8 /dev/etherd/e0.9 1.221 +%# sleep 1 1.222 + 1.223 +%# распределение по зеркалам 1.224 +%# mdadm -C /dev/md0 -l 0 -n 4 \ 1.225 + /dev/md1 /dev/md2 /dev/md3 /dev/md4 1.226 + 1.227 +%# # превращаем RAID10 в физический том, и добавляем его в группу 1.228 +%# pvcreate /dev/md0 1.229 +%# vgcreate TURBO /dev/md0 1.230 + 1.231 +%# # смотрим количество экстентов 1.232 +%# vgdisplay TURBO | grep -i 'free.*PE' 1.233 + 1.234 +%## создаём том, занимающий всё свободное пространство 1.235 +%# lvcreate --extents 88349 --name vol1 TURBO 1.236 +%# modprobe jfs 1.237 +%# mkfs -t jfs /dev/TURBO/vol1 1.238 +%# mkdir /vol1 1.239 +%# mount /dev/TURBO/vol1 /vol1 1.240 +\end{verbatim} 1.241 + 1.242 +На системе Debian Sarge с двумя процессорами 1.243 +Athlon MP, 1 GB памяти, сетевой картой Intel PRO/1000MT и 40GB дисками 1.244 +и коммутатором Netgear FS526T 1.245 +с RAID 10 работающим поверх 8 блэйдов EtherDrive в полке Coraid 1.246 +была зафиксирована произодвительность 23.58MB/s на чтение 1.247 +и 17.45MB/s на запись. 1.248 +Измерения делались 1.249 +путём копирования 1GB файла в /dev/null после сброса кэша. 1.250 +Во время копирования включена также команда sync. 1.251 + 1.252 +RAID 10 в данном случае состоит из четырёх stripe\rq{}ов, 1.253 +каждый из которых это пара зеркалированных дисков. 1.254 +Вообще, можно вычислить производительность 1.255 +набора блэйдов EtherDrive исходя только из количества stripe\rq{}ов в нём. 1.256 +Для RAID 10 stripe\rq{}ов будет в два раза меньше чем дисков, 1.257 +поскольку каждый диск зеркалируется на другой диск. 1.258 +Для RAID 5 один диск выделяется под чётность, оставляя остальные диски для stripe\rq{}ов. 1.259 + 1.260 +Ожидаемая пропускная способность чтения равна количеству stripe\rq{}ов умножить на 6MB/s. 1.261 +Это означает, что если Стэн изначальное купил бы две полки 1.262 +и собрал бы из них 18-блэйдный RAID 10 вместо своего 8-блэйдного, он мог ожидать 1.263 +прироста производительности более чем в два раза. 1.264 +Стэну не нужна такая большая производительность и он хочет начать с маленькой файловой системы, 1.265 +размером 1.6TB. 1.266 + 1.267 +Ниже показано как можно расширить файловую систему. 1.268 + 1.269 +На листинге не показан файл \#mdadm-aoe.conf\# и стартовые/стоповые скрипты. 1.270 +Конфигурационный файл mdadm указывает процессу mdadm, работающему в режиме монитора, 1.271 +как выполнять горячую замену, чтобы можно было заменить сбойный диск в зеркале. 1.272 +Подробности о группах резервирования (spare groups) можно прочитать на man-странице 1.273 +по mdadm. 1.274 + 1.275 +Увеличить файловую систему без размонтирования, установить массив RAID 10, добавить его в группу томов и затем увеличить файловую систему: 1.276 + 1.277 +\begin{verbatim} 1.278 +%# # когда для второй полки сделан RAID10, добавляем его в группу томов 1.279 +%# vgextend TURBO /dev/md5 1.280 +%# vgdisplay TURBO | grep -i 'free.*PE' 1.281 + 1.282 +%# # увеличиваем логический том и файловую систему 1.283 +%# lvextend --extents +88349 /dev/TURBO/vol1 1.284 +%# mount -o remount,resize /vol1 1.285 +\end{verbatim} 1.286 + 1.287 +Стартовый и стоповый скрипты легко создать. 1.288 +Стартовый скрипт просто собирает зеркалированные пары RAID 1, 1.289 +собирает все RAID 0 и запускает процесс мониторинга mdadm. 1.290 +Стоповый скрипт останавливает монитор mdadm, 1.291 +останавливает RAID 0 и, в последнюю очередь, 1.292 +останавливает RAID 1. 1.293 + 1.294 +\subsection{Совместный доступ к блочным хранилищам} 1.295 +Теперь, после того как мы увидели конкретный пример ATA over Ethernet в действии, 1.296 +может возникнуть вопрос: \dq{}А что произойдёт, если другой хост попытается получить 1.297 +доступ к данным, когда с ними уже работает какой-то хост в сети?\dq{} 1.298 +Сможет ли этот второй хост подмонтировать файловую систему JFS и получить доступ 1.299 +к тем же данным? Короткий ответ такой: \dq{}Да, но это не безопасно!\dq{}. 1.300 +JFS, как и ext3, как и многие другие файловые системы спроектированы 1.301 +для использования на отдельном хосте. И для таких файловых систем 1.302 +одновременный доступ с нескольких хостов приведёт к повреждениям. 1.303 +Причина -- в кэш-буфере, который унифицирован с кэшем страниц в ядре 2.6. 1.304 + 1.305 +Linux кэширует данные файловых систем в оперативной памяти 1.306 +везде, где это только возможно, дабы избежать использования 1.307 +медленного блочного устройства и добиться хорошего прироста производительности. 1.308 +Вы могли видеть результат наглядно, 1.309 +когда, например, запускали \textbf{find} дважды 1.310 +поверх одного и того же каталога. 1.311 + 1.312 +Некоторые файловые системы спроектированы так, что они могут использоваться одновременно 1.313 +несколькими хостами — такие файловые системы называют \textit{кластерными}. 1.314 +Они имеют механизмы для проверки, синхронизирован ли кэш на всех 1.315 +машинах с нижележащей файловой системой. 1.316 +Отличный пример такой системы с открытым кодом это GFS. 1.317 +GFS использует кластерное программное обеспечение 1.318 +для того чтобы отследить, кто из группы хостов 1.319 +работает с файловой системой. 1.320 +Для того чтобы убедиться, 1.321 +что разные хосты договариваются друг с другом 1.322 +при совместном доступе к файловой системе, 1.323 +в GFS используются блокировки. 1.324 + 1.325 +Когда используются кластерные файловые системы, такие как GFS, 1.326 +становится возможным совместный доступ множества хостов 1.327 +к одному и тому же блочному устройству по сети. 1.328 +Не нужно ничего типа NFS-сервера, поскольку 1.329 +каждый хост работает с хранилищем непосредственно. 1.330 + 1.331 +Но есть одна загвоздка. 1.332 +Чем больше дисков вы используете, тем выше шансы, 1.333 +что один из дисков засбоит. 1.334 +В этой ситуации обычно используется RAID, 1.335 +который добавляет избыточность. 1.336 +К сожалению, программный RAID Linux 1.337 +пока что не умеет работать с кластерными файловыми системами. 1.338 +Это означает, что каждый хост 1.339 +в сети не сможет запускать mdadm. 1.340 + 1.341 +Кластерное программное обеспечение для Linux развивается 1.342 +с большой скоростью. Есть надежда что рано или поздно RAID будет поддерживать кластерные файловые системы. 1.343 +До этого момента мало вариантов использования AoE в кластерных системах. 1.344 +Основная идея — централизовать функциональность RAID. 1.345 +Можно купить один или два Coraid RAIDblade 1.346 +и сделать чтобы кластерные узлы использовали их. 1.347 +RAIDblade\rq{}ы будут управлять EtherDrive\rq{}ами, 1.348 +которые должны подключаться за них. 1.349 +Или тоже самое можно сделать на обычной Linux-системе, 1.350 +которая подключит массивы, сделает на них RAID 1.351 +и с помощью ATA over Ethernet экспортирует его как готовое устройство. 1.352 +Это может сделать, например, программа [vblade]. 1.353 + 1.354 +\subsection{Резервное копирование} 1.355 +Поскольку AoE выводит недорогие диски в Ethernet-сеть, многие админы 1.356 +могут заинтересоваться в использовании AoE для создания резервных копий. 1.357 +Часто в стратегиях резервного копирования используются двухуровневые хранилища, 1.358 +которые не такие быстрые как on-line хранилища, но и не такие медленные для доступа как лента. 1.359 +ATA over Ethernet даёт возможность легко использовать дешёвые ATA-диски как хранилище второго уровня. 1.360 + 1.361 +Но вообще говоря, с такими дешёвыми жёсткими дисками и стабильным программным RAID, 1.362 +почему бы не использовать диски как носитель для хранения резервных копий? 1.363 +В такой системе резервного копирования, в отличие от ленточной, 1.364 +есть возможность непосредственного доступа к заархивированным файлам. 1.365 + 1.366 +В нескольких программах резервного копирования при создании резервных копий 1.367 +используются преимущества возможностей файловых систем. 1.368 +Например, используя жёсткие ссылки они могут делать полные бэкапы 1.369 +с эффективностью инкрементальных. Подробности 1.370 +здесь ([rsync Backups http://www.mikerubel.org/computers/rsync\_snapshots]) 1.371 +и здесь ([Backup PC http://backuppc.sourceforge.net/]). 1.372 + 1.373 +\subsection{Заключение} 1.374 +Размещение недорогих дисков в локальной сети это одна из тех идей, 1.375 +которая заставляет подумать \dq{}Почему это интересно раньше никто не сделал?\dq{}. 1.376 +С помощью простого сетевого протокола можно развязать хранилища 1.377 +и сервера, не используя при этом дорогого аппаратного обеспечения 1.378 +и сложной сетевой инфраструктуры. В простой Ethernet сети нет необходимости 1.379 +в сложном, развитом но требовательном к ресурсам стеке протоколов TCP/IP. 1.380 + 1.381 +Если вы используете хранилища в локальной сети, и если настройки 1.382 +доступа к хранилищу путём конфигурирование сети Ethernet достаточно, 1.383 +тогда ATA over Ethernet подойдёт вас лучше всего. 1.384 +Если вас интересуют такие вещи как шифрование, возможность маршрутизации 1.385 +и контроль доступа, посмотрите iSCSI. 1.386 + 1.387 +С AoE появляется простое альтернативное решение для организации хранилищ на Linux, 1.388 +которой ранее явно не хватало. С простотой появляются и возможности. 1.389 +AoE может использоваться как строительный блок в любом решении для хранения. 1.390 +Дальше уже ваша фантазия. 1.391 + 1.392 +\subsection{Преимущества и недостатки AoE} 1.393 +Преимущества и недостатки AoE в сравнении с iSCSI. 1.394 + 1.395 +Преимущества: 1.396 +\begin{itemize} 1.397 +\item Низкая стоимость 1.398 +\item Высокая производительность 1.399 +\item Простота 1.400 +\end{itemize} 1.401 + 1.402 +Недостатки: 1.403 +\begin{itemize} 1.404 +\item Низкая масштабируемость, возможность использования только в пределах одной Ethernet-сети 1.405 +\item Отсутствие механизмов обеспечения безопасности 1.406 +\item Отсутствие механизмов контроля ошибок передачи данных, за исключением тех, что есть у самой сети Ethernet (см, например \url{http://lists.xensource.com/archives/html/xen-devel/2005-05/msg00832.html}) 1.407 +\end{itemize} 1.408 + 1.409 +\subsection{Дополнительная информация} 1.410 +\begin{itemize} 1.411 +\item \htmladdnormallinkfoot{ATA over Ethernet}{http://xgu.ru/wiki/aoe} (рус.) 1.412 +\item \htmladdnormallinkfoot{ATA over Ethernet}{http://en.wikipedia.org/wiki/ATA\_over\_Ethernet}(англ.) в Wikipedia 1.413 +\item \htmladdnormallinkfoot{ATA Over Ethernet: Putting Hard Drives on the LAN}{http://www.linuxjournal.com/article/8149} — статья в Linux Journal 1.414 +\item \htmladdnormallinkfoot{Resources for "ATA Over Ethernet: Putting Hard Drives on the LAN"}{http://www.linuxjournal.com/article/8201} (англ.) 1.415 +\item \htmladdnormallinkfoot{Resources for "ATA Over Ethernet: Putting Hard Drives on the LAN"}{http://www.linuxjournal.com/article/8201} (англ.) — дополнительные ссылки в Linux Journal 1.416 +\item \htmladdnormallinkfoot{The ATA over Ethernet (AoE) Protocol}{http://www.linux-mag.com/index.php?option=com\_content\&task=view\&id=2069\&Itemid=2307} (англ.) — статья на Linux Magazine (требуется регистрация) 1.417 +\item \htmladdnormallinkfoot{Using AoE in FreeBSD}{http://www.coraid.com/support/freebsd/usingaoe.html} — Поддержка AoE в FreeBSD 1.418 +\item \htmladdnormallinkfoot{Протоколы сетей хранения данных. Часть I — ATA over Ethernet}{http://www.samag.ru/cgi-bin/go.pl?q=articles;n=09.2005;a=15} — статья в журнале Системный администратор 1.419 +\item \htmladdnormallinkfoot{The Coraid Linux NAS HOWTO}{http://www.coraid.com/support/cln/CLN-HOWTO.html} (англ.) — HOWTO по разворачиванию NAS на базе ATA over Ethernet 1.420 +\item \htmladdnormallinkfoot{(Xen-users) HOWTO: AOE in domU and boot from it.}{http://lists.xensource.com/archives/html/xen-users/2006-07/msg00595.html} (англ. 1.421 +\item \htmladdnormallinkfoot{Access over Ethernet Insecurities in AoE SLIDES}{http://www.slideshare.net/amiable\_indian/access-over-ethernet-insecurites-in-aoe/} (англ.) 1.422 +\item \htmladdnormallinkfoot{"iSCSI killer" Native in Linux}{http://hardware.slashdot.org/article.pl?sid=06/07/31/1143230} (англ.) — обсуждение AoE на Slashdot 1.423 +\item \htmladdnormallinkfoot{OpenNews: ATA over Ethernet в Linux}{http://www.opennet.ru/openforum/vsluhforumID3/36130.html} — обсуждение статьи на OpenNet 1.424 +\item \htmladdnormallinkfoot{OpenNews: Построение SAN для Xen на основе DRBD, LVM и GNBD" }{http://www.opennet.ru/openforum/vsluhforumID3/36804.html} — другое обсуждение на OpenNet, где затрагиваются вопросы сравнения AoE и iSCSI 1.425 +\end{itemize} 1.426 + 1.427 +
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/bridge.tex Tue Jul 01 16:16:44 2008 +0300 2.3 @@ -0,0 +1,563 @@ 2.4 +\section{Программный мост в Linux} 2.5 + 2.6 +\textbf{Бридж} (англ. \textit{bridge}, мост) — это способ соединения двух сегментов Ethernet на канальном уровне, т.е. без использования протоколов более высокого уровня, таких как IP. Пакеты передаются на основе Ethernet-адресов, а не IP-адресов (как в маршрутизаторе). Поскольку передача выполняется на канальном уровне (уровень 2 модели OSI), все протоколы более высокого уровня прозрачно проходят через мост. 2.7 + 2.8 +Термины коммутатор, мост и бридж могут использоваться на данной странице как взаимознаменяемые. 2.9 + 2.10 +Код bridge в Linux является частичной реализацией стандарта \htmladdnormallinkfoot{ANSI/IEEE 802.1d}{http://standards.ieee.org/getieee802/}. 2.11 +Впервые бриджинг в Linux появился в 2.2, затем код был переписан 2.12 +Леннертом Буйтенхеком (Lennert Buytenhek). 2.13 +Код bridge интегрирован в ядра серий 2.4 и 2.6. 2.14 + 2.15 +\subsection{Коммутация и фильтрация} 2.16 +Linux-мосты более мощные чем простые аппаратные мосты и коммутаторы, 2.17 +поскольку они могут ещё фильтровать и регулировать трафик. 2.18 +Комбинация коммутатора и брандмауэра выполняется с помощью 2.19 +родственного проекта 2.20 +ebtables. 2.21 + 2.22 +\subsection{Состояние} 2.23 +Код обновляется как часть ядра Linux 2.4 и 2.6, доступного на kernel.org. 2.24 + 2.25 +Возможные будущие усовершенствования: 2.26 +\begin{itemize} 2.27 +\item Описать фильтрацию STP 2.28 +\item Использовать Netlink interface для управление бриджами (прототип в 2.6.18) 2.29 +\item Добавить поддержку в user space 2.30 +\item Сделать поддержку RSTP и других расширений 802.1d STP 2.31 +\end{itemize} 2.32 + 2.33 +\subsection{Скачивание} 2.34 +Поддержка бриджинга есть в текущих ядрах 2.4 и 2.6 2.35 +всех основных дистрибутивов Linux. Требуемый комплект утилит для администрирования 2.36 +\textit{bridge-utils} есть практически во всех дистрибутивах. 2.37 + 2.38 +Инсталляция утилит выполняется стандартным для дистрибутива способом. 2.39 +Например, в Debian GNU/Linux: 2.40 +\begin{verbatim} 2.41 + # apt-get install bridge-utils 2.42 +\end{verbatim} 2.43 + 2.44 +Исходный код последнего релиза утилит можно получить со \htmladdnormallinkfoot{этой}{http://sourceforge.net/project/showfiles.php?group\_id=26089} страницы. 2.45 + 2.46 +Как вариант можно сделать свою самую последнюю сборку кода 2.47 +с kernel.org 2.48 +и собрать утилиты bridge-utils из GIT-репозитория. 2.49 + 2.50 +\begin{verbatim} 2.51 + $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/bridge-utils.git 2.52 + $ cd bridge-utils 2.53 + $ autoconf 2.54 + $ ./configure 2.55 +\end{verbatim} 2.56 + 2.57 +\subsection{Ручная конфигурация} 2.58 +\subsubsection{Сетевые карты} 2.59 +Перед тем как вы приступите к настройке коммутатора, убедитесь, 2.60 +что сетевые карты работают нормально. 2.61 +Не устанавливайте на них IP-адресов, и не позволяйте начальным скриптам 2.62 +выполнять DHCP-запрос с них. 2.63 +IP-адреса должны устанавливаться уже после того как бридж сконфигурирован. 2.64 + 2.65 +Команда ifconfig должна показывать обе (или больше, если их больше) сетевые карты, и они должны быть выключены, т.е. находиться в состоянии DOWN 2.66 +(это на момент начала настройки, дальше они будут переведены в UP). 2.67 + 2.68 +\subsubsection{Загрузка модуля} 2.69 +В большинстве случаев код коммутатора оформляется в виде модуля. 2.70 +Если модуль сконфигурирован и установлен корректно, 2.71 +он автоматически загружается при первом вызове команды \textbf{brctl}. 2.72 + 2.73 +Если ваши утилиты bridge-utilities корректно установлены, 2.74 +и ядро и его модуль bridge в порядке, вызовом команды \textbf{brctl} 2.75 +можно будет просмотреть маленькую сводку о синтаксисе команды: 2.76 +\begin{verbatim} 2.77 +# brctl 2.78 +# commands: 2.79 + addbr <bridge> add bridge 2.80 + delbr <bridge> delete bridge 2.81 + addif <bridge> <device> add interface to bridge 2.82 + delif <bridge> <device> delete interface from bridge 2.83 + setageing <bridge> <time> set ageing time 2.84 + setbridgeprio <bridge> <prio> set bridge priority 2.85 + setfd <bridge> <time> set bridge forward delay 2.86 + sethello <bridge> <time> set hello time 2.87 + setmaxage <bridge> <time> set max message age 2.88 + setpathcost <bridge> <port> <cost> set path cost 2.89 + setportprio <bridge> <port> <prio> set port priority 2.90 + show show a list of bridges 2.91 + showmacs <bridge> show a list of mac addrs 2.92 + showstp <bridge> show bridge stp info 2.93 + stp <bridge> <state> turn stp on/off 2.94 +\end{verbatim} 2.95 + 2.96 +\subsubsection{Создание и удаление коммутатора} 2.97 +Команда 2.98 +\begin{verbatim} 2.99 + brctl addbr bridgename 2.100 +\end{verbatim} 2.101 + 2.102 +создаёт экземпляр логического коммутатора с именем \textit{bridgename}. 2.103 +Для того чтобы выполнять коммутацию пакетов, нужно создать хотя бы один коммутатор . 2.104 +Можно воспринимать логический бридж как контейнер интерфейсов, 2.105 +принимающих участие в коммутации. 2.106 +Каждый экземпляр коммутатора представлен новым сетевым интерфейсом. 2.107 + 2.108 +Соответствующая команда для удаления коммутатора: 2.109 +\begin{verbatim} 2.110 + brctl delbr bridgename 2.111 +\end{verbatim} 2.112 + 2.113 +\subsubsection{Включение устройства в коммутатор} 2.114 +Команда 2.115 +\begin{verbatim} 2.116 + brctl addif bridgename device 2.117 +\end{verbatim} 2.118 +\noindent включает сетевое устройство \textit{device} 2.119 +в коммутатор с именем \textit{bridgename}. 2.120 +Все устройства, включенные в один бридж работают как одна большая сеть. 2.121 +Нельзя добавить устройство в несколько бриджей одновременно, 2.122 +поскольку это не имеет никакого смысла. 2.123 +Коммутатору потребуется небольшое время после того как устройство 2.124 +подключено, для того чтобы узнать его Ethernet-адрес, а затем 2.125 +он начинает делать перенаправление (forward). 2.126 + 2.127 +Соответствующая команда для выключения устройства из коммутатора: 2.128 +\begin{verbatim} 2.129 + brctl delif bridgename device 2.130 +\end{verbatim} 2.131 + 2.132 +\subsubsection{Просмотр устройств} 2.133 +Команда \textbf{brctl} \verb|show| показывает состояние всех работающих коммутаторов: 2.134 +\begin{verbatim} 2.135 + # brctl addbr br549 2.136 + # brctl addif br549 eth0 2.137 + # brctl addif br549 eth1 2.138 + # brctl show 2.139 + bridge name bridge id STP enabled interfaces 2.140 + br549 8000.00004c9f0bd2 no eth0 2.141 + eth1 2.142 +\end{verbatim} 2.143 +Если выполнить команду \textbf{brctl} \verb|showmacs|, 2.144 +будет показана информация о сетевых адресах 2.145 +источников трафика, прошедшего через коммутатор 2.146 +(и самого коммутатора тоже): 2.147 + 2.148 +\begin{verbatim} 2.149 + # brctl showmacs br549 2.150 + port no mac addr is local? ageing timer 2.151 + 1 00:00:4c:9f:0b:ae no 17.84 2.152 + 1 00:00:4c:9f:0b:d2 yes 0.00 2.153 + 2 00:00:4c:9f:0b:d3 yes 0.00 2.154 + 1 00:02:55:1a:35:09 no 53.84 2.155 + 1 00:02:55:1a:82:87 no 11.53 2.156 + ... 2.157 +\end{verbatim} 2.158 + 2.159 +Время жизни (aging time) -- это количество секунд, которое 2.160 +MAC-адрес будет находится в таблице forwarding database 2.161 +после получения пакета с этим адресом. 2.162 +Записи в таблице периодически удаляются по тайм-ауту, 2.163 +для того чтобы не получилось, что они будут находиться там вечно. 2.164 +В нормальной ситуации, не понадобится менять данные параметры, 2.165 +но это сделать можно (время указывается в секундах) 2.166 + 2.167 +\begin{verbatim} 2.168 + # brctl setageing ''bridgename'' ''time'' 2.169 +\end{verbatim} 2.170 + 2.171 +Если установить время в ноль, запись становится постоянной. 2.172 + 2.173 +\subsubsection{Spanning Tree Protocol} 2.174 +Если используется несколько коммутаторов, для того чтобы избежать петель коммутации, нужно включить поддержку протокола 2.175 +Spanning Tree Protocol (Протокол остовного дерева). 2.176 + 2.177 +\begin{verbatim} 2.178 + # brctl stp br549 on 2.179 +\end{verbatim} 2.180 + 2.181 +Посмотреть параметры STP можно так: 2.182 + 2.183 +\begin{verbatim} 2.184 + # brctl showstp br549 2.185 + br549 2.186 + bridge id 8000.00004c9f0bd2 2.187 + designated root 0000.000480295a00 2.188 + root port 1 path cost 104 2.189 + max age 20.00 bridge max age 200.00 2.190 + hello time 2.00 bridge hello time 20.00 2.191 + forward delay 150.00 bridge forward delay 15.00 2.192 + ageing time 300.00 gc interval 0.00 2.193 + hello timer 0.00 tcn timer 0.00 2.194 + topology change timer 0.00 gc timer 0.33 2.195 + flags 2.196 + 2.197 + eth0 (1) 2.198 + port id 8001 state forwarding 2.199 + designated root 0000.000480295a00 path cost 100 2.200 + designated bridge 001e.00048026b901 message age timer 17.84 2.201 + designated port 80c1 forward delay timer 0.00 2.202 + designated cost 4 hold timer 0.00 2.203 + flags 2.204 + 2.205 + eth1 (2) 2.206 + port id 8002 state disabled 2.207 + designated root 8000.00004c9f0bd2 path cost 100 2.208 + designated bridge 8000.00004c9f0bd2 message age timer 0.00 2.209 + designated port 8002 forward delay timer 0.00 2.210 + designated cost 0 hold timer 0.00 2.211 + flags 2.212 +\end{verbatim} 2.213 + 2.214 +\paragraph{Настройка STP} 2.215 +Конфигурироваться может несколько параметров, имеющих отношение к Spanning Tree Protocol. 2.216 +Код автоматически определяет скорость соединения и другие параметры, 2.217 +поэтому, как правило, вручную их менять не нужно. 2.218 + 2.219 +\paragraph{Приоритет коммутатора} 2.220 +У каждого коммутатора есть относительный приоритет (priority) и стоимость (cost). 2.221 +Каждый интерфейс коммутатора ассоциируется с номером порта в коде STP. У каждого есть приоритет и стоимость, на основе которых принимается решение о том, какой путь для передчи пакета является кратчайшим. Всегда используется путь с наимеьшей стоимостью (за исключением случая, когда этот путь разорван). 2.222 +Если у вас несколько коммутаторов и интерфейсов, 2.223 +может понадобиться отрегулировать приоритеты, чтобы достичь максимальной 2.224 +производительности. 2.225 + 2.226 +\begin{verbatim} 2.227 + # brctl setbridgeprio ''bridgename'' ''priority'' 2.228 +\end{verbatim} 2.229 + 2.230 +Бридж с наименьшим приоритетом избирается как \textit{корневой}. 2.231 +Корневой бридж является центром остовного дерева (spanning tree) 2.232 +коммутационных связей. 2.233 + 2.234 +\paragraph{Приоритет и стоимость} 2.235 +У каждого интерфейса моста может быть своя собственная скорость, и её значение 2.236 +используется при выборе какое соединение должно использоваться. 2.237 +У более быстрых интерфейсов должна быть более низкая стоимость. 2.238 + 2.239 +\begin{verbatim} 2.240 + # brctl ''setpathcost bridge port cost'' 2.241 +\end{verbatim} 2.242 + 2.243 +Для разных портов, имеющих одинаковую стоимость 2.244 +существует ещё \textit{приоритет}. 2.245 + 2.246 +\paragraph{Задержка передачи (Forwarding delay)} 2.247 +Задержка передачи (forwarding delay) это время 2.248 +в течение которого порт находится в состояниях 2.249 +Listening и Learning, прежде чем перейти в состояние Forwarding. 2.250 +Это время нужно для того чтобы мост, когда он включается в 2.251 +сеть, сначала должен ознакомиться с трафиком, прежде чем включаться 2.252 +в работу. 2.253 + 2.254 +\begin{verbatim} 2.255 + # brctl setfd ''bridgename'' ''time'' 2.256 +\end{verbatim} 2.257 + 2.258 +\paragraph{Время Hello} 2.259 +Время от времени 2.260 +корневой мост (Root Bridge) 2.261 +и выделенные мосты (Designated Bridges) 2.262 +отправляют пакет \textit{hello}. 2.263 +Пакеты hello нужны для обмена информацией 2.264 +о топологии все коммутироемой локальной сети. 2.265 + 2.266 +\begin{verbatim} 2.267 + # brctl sethello ''bridgename'' ''time'' 2.268 +\end{verbatim} 2.269 + 2.270 +\paragraph{max age -- таймаут hello} 2.271 +Если другой коммутатор в дереве spanning tree не отправляет пакет hello 2.272 +в течение долгого времени, считается, что он не в порядке (dead). 2.273 +Таймаут устанавливается командой: 2.274 +\begin{verbatim} 2.275 + # brctl maxage ''bridgename'' ''time'' 2.276 +\end{verbatim} 2.277 + 2.278 +\subsubsection{Пример настройки} 2.279 +Базовая настройка моста выполняется так: 2.280 + 2.281 +\begin{verbatim} 2.282 + # ifconfig eth0 0.0.0.0 2.283 + # ifconfig eth1 0.0.0.0 2.284 + # brctl addbr mybridge 2.285 + # brctl addif mybridge eth0 2.286 + # brctl addif mybridge eth1 2.287 + # ifconfig mybridge up 2.288 +\end{verbatim} 2.289 + 2.290 +Хост настраивается как обычный мост. 2.291 +У него самого нет IP-адреса, поэтому к нему 2.292 +нельзя получить доступ (или взломать) удалённо 2.293 +по TCP/IP. 2.294 + 2.295 +Опционально можно настроить виртуальный интерфейс \textit{mybridge} 2.296 +на доступ по локальной сети. 2.297 +Он будет работать как обычный интерфейс -- как сетевая карта. 2.298 +Процесс настройки полностью совпадает с вышеописанным, 2.299 +за тем исключением, что нужно заменить 2.300 +последнюю команду на такую: 2.301 + 2.302 +\begin{verbatim} 2.303 + # ifconfig mybridge 192.168.100.5 netmask 255.255.255.0 2.304 +\end{verbatim} 2.305 + 2.306 +Если вы хотите чтобы мост автоматически получал IP-адрес 2.307 +у ADSL-модема по DHCP (или в другой похожей ситуации), 2.308 +сделайте так: 2.309 + 2.310 +\begin{verbatim} 2.311 + # ifconfig eth0 0.0.0.0 2.312 + # ifconfig eth1 0.0.0.0 2.313 + # brctl addbr mybridge 2.314 + # brctl addif mybridge eth0 2.315 + # brctl addif mybridge eth1 2.316 + # dhclient mybridge 2.317 +\end{verbatim} 2.318 + 2.319 +Если делать это много раз, процессов \textbf{dhclient} может расплодиться великое множество. Или безжалостно убейте их, или почитайте об \textbf{omshell}. 2.320 + 2.321 +\subsection{Конфигурирование через /etc/net} 2.322 +Сначала в \texttt{/etc/net} настраиваются два ethernet-устройства port0 и port1: 2.323 +\begin{verbatim} 2.324 + # cat >> /etc/net/iftab 2.325 + port0 mac 00:13:46:66:01:5e 2.326 + port1 mac 00:13:46:66:01:5f 2.327 + ^D 2.328 + # mkdir /etc/net/ifaces/port0 2.329 + # cat > /etc/net/ifaces/port0/options 2.330 + TYPE=eth 2.331 + MODULE=via-rhine 2.332 + # mkdir /etc/net/ifaces/port1 2.333 + # cat > /etc/net/ifaces/port1/options 2.334 + TYPE=eth 2.335 + MODULE=via-rhine 2.336 + ^D 2.337 +\end{verbatim} 2.338 +После этого описывается мост: 2.339 +\begin{verbatim} 2.340 + # mkdir /etc/net/ifaces/mybridge 2.341 + # cat > /etc/net/ifaces/mybridge/options 2.342 + TYPE=bri 2.343 + HOST='port0 port1' 2.344 + ^D 2.345 + # cat > /etc/net/ifaces/mybridge/brctl 2.346 + stp AUTO on 2.347 + ^D 2.348 +\end{verbatim} 2.349 +После этого можно поднять бридж командой \textbf{ifup} \texttt{mybridge}. Устройства port0 и port1 поднимутся автоматически. 2.350 + 2.351 +\subsection{FAQ} 2.352 +\subsubsection{Что делает мост/коммутатор?} 2.353 +Мост прозрачно пересылает трафик между несколькими сетевыми интерфейсами. 2.354 +На простом языке это означает, что коммутатор соединяет два или более интерфейсов Ethernet между собой, для того чтобы получилась большая Ethernet-сеть. 2.355 + 2.356 +\subsubsection{Это как-то зависит от используемых протоколов?} 2.357 +Нет. Коммутатор ничего не знает о протоколах высокого уровня, он только видит кадры Ethernet. Поэтому функциональность моста является протоколонезависимой и проблем с передачей протоколов таких как IPX, NetBEUI, IP, IPv6 и других быть не должно. 2.358 + 2.359 +\subsubsection{Чем этот код лучше чем аппаратный коммутатор?} 2.360 +Пожалуйста, имейте в виду, что этот код не писался 2.361 +с целью заменить Linux-боксами выделенное сетевое оборудование. 2.362 +Не надо воспринимать Linux с этим кодом как замену аппаратным коммутаторам. 2.363 +Это скорее расширение сетевых возможностей Linux. Как бывает, что Linux-маршрутизатор лучше чем аппаратный маршрутизатор (и наоборот), 2.364 +есть ситуации, когда Linux-мост лучше чем выделенный мост (и наоборот). 2.365 + 2.366 +Основная сила кода моста Linux это его гибкость. 2.367 +И так есть уже огромнейшее количество всяких интересных 2.368 +вещей, которые можно делать с Linux (см. например, Linux Advanced Routing and Traffic Control), и мосты -- ещё одно добавление к этой гремучей смеси. 2.369 + 2.370 +Одним из главных преимуществ решения, базирующегося на Linux, 2.371 +в сравнении с выделенным коммутатором 2.372 +являются разнообразные возможности по фильтрации трафика. 2.373 +Можно использовать всю функциональность netfilter (iptables) в комбинации 2.374 +с мостами, что даёт больший функционал, чем проприетарные решения. 2.375 + 2.376 +\subsubsection{Чем этот код хуже чем аппаратный коммутатор?} 2.377 +Для того чтобы работать в качестве моста, 2.378 +устройство должно быть переведено в неразборчивый (promiscuous) 2.379 +режим, в котором оно получает весь трафик, приходящий на интерфейс. 2.380 +В действительно загруженных сетях, это может занять значительную часть 2.381 +процессора, замедляя работу системы. 2.382 +Выход -- или использовать выделенную Linux-систему в качестве моста 2.383 +или использовать аппаратный коммутатор. 2.384 + 2.385 +\subsubsection{Какова производительность моста?} 2.386 +Производительность ограничивается используеммыми сетевыми картами и процессором. 2.387 +Джеймс Ю (James Yu) из университета DePaul провёл исследование, 2.388 +в котором выполнил сравнение Linux моста и коммутатора Catalyst 2.389 +Yu-Linux-TSM2004.pdf 2.390 + 2.391 +\subsubsection{Моего моста не видно в трассе traceroute\rq{}а!} 2.392 +И не должно быть видно. 2.393 +Работа моста является полностью прозрачной для сети (по крайней мере должна); 2.394 +сети, которые мост соединяет между собой должны видеться как одна большая сеть. 2.395 +Именно поэтому мост и не виден в traceroute; пакеты и не думают о том, что они пересекают границы подсети. 2.396 + 2.397 +Дополнительная информация об этом в книгах по сетям TCP/IP. 2.398 + 2.399 +\subsubsection{Ничего не работает!} 2.400 +Когда я пытаюсь добавить мост, система говорит: \dq{}br\_add\_bridge: bad address\dq{}! 2.401 + 2.402 +Или ваше ядро слишком старое (2.2 или более ранее), или вы забыли включить поддержку бриджей в ядро. 2.403 + 2.404 +\subsubsection{Работает ли бриджинг на ядре 2.2?} 2.405 +Изначально разработка велась на 2.2, есть патчи для этого ядра. 2.406 +Но сейчас эти патчи уже не поддерживаются и не развиваются. 2.407 + 2.408 +\subsubsection{Есть ли в планах поддержка RSTP (802.1w)?} 2.409 +Да. Ведётся работа по включению поддержки RSTP в будущий релиз для ядра 2.6. Код делался для ядра 2.4 и нуждается в доработке, тестировании и обновлении. 2.410 + 2.411 +\subsubsection{Что можно соединять с помощью моста?} 2.412 +Мосты Linux очень гибкие; можно соединять 2.413 +как традиционные ethernet-устройства, так и псевдоустройства такие 2.414 +как PPP, VPN или VLAN\rq{}ы. 2.415 + 2.416 +Ограничения, которые накладываются на соединяемые устройства: 2.417 +\begin{itemize} 2.418 +\item У всех должен быть одинаковый максимальный размер пакета (MTU). Мост не выполняет фрагментирование пакетов. 2.419 +\item Устройства должны выглядеть как Ethernet, т.е. у них должны быть 6-байтные адреса отправителя и получателя. 2.420 +\item Должен поддерживаться неразборчивый (promiscuous) режим. Мост должен получать не только трафик, адресованный ему, но и весь сетевой трафик. 2.421 +\item Должен быть разрешён спуфинг адресов. У моста должна быть возможность отправлять данные по сети, как если бы они пришли от другого хоста. 2.422 +\end{itemize} 2.423 + 2.424 +\subsubsection{Можно ли выполнять коммутацию в сочетании с netfilter/iptables?} 2.425 +Да. Соответствующий код включен в большинство ядер. Смотрите проект ebtables. 2.426 + 2.427 +\subsubsection{Работает ли он с Token Ring, FDDI и Firewire?} 2.428 +Нет. У этих протоколов отличается адресация и размер кадра. 2.429 + 2.430 +\subsubsection{Я продолжаю получать сообщение \dq{}retransmitting tcn bpdu\dq{}!} 2.431 +Это означает, что ваш Linux-мост ретранслирует сообщение 2.432 +Topology Change Notification Bridge Protocol Data Unit 2.433 +Это означает что где-то есть коммутатор (или другой Linux-мост), 2.434 +который не согласен с правилами STP. 2.435 + 2.436 +В каждой коммутируемой сети есть один \dq{}главный коммутатор\dq{}, 2.437 +который также называется \textit{корневым} (root). 2.438 +Какой именно мост является корневым можно узнать с помощью \textbf{brctl}. 2.439 + 2.440 +Когда топология коммутируемой сети меняется (например, кто-то выдернул 2.441 +кабель между коммутаторами), коммутатор, который это обнаружил, 2.442 +отправляет сообщение корневому коммутатору. 2.443 +Корневой коммутатор устанавливает бит \rq{}topology changed\rq{} 2.444 +в пакеты hello, которые будут отправляеться в течение следующих X секунд 2.445 +(обычно X равно 30). В результате все мосты узнают об изменении топологии, 2.446 +и они могут работать с учётом этого -- например удалить устаревшие MAC-записи. 2.447 + 2.448 +После того как коммутатор отправляет сообщение об изменении топологии, 2.449 +он ждёт что в hello-сообщении будет установлени бит \rq{}\dq{}topology changed\dq{}. 2.450 +Если его нет (бит в данном случае играет роль подтверждения получения информации 2.451 +о смене топологии), коммутатор решает, что сообщение было потеряно. 2.452 +Поэтому пересылает сообщение повторно. 2.453 +Однако, в некоторых коммутаторах реализациия 2.454 +STP немного недоделанная, и они не отправляют подтверждение 2.455 +получения сообщения об изменении топологии. 2.456 +Если один из таких коммутаторов у вас корневой, 2.457 +все остальные коммутаторы будут постоянно повторно пересылать 2.458 +информацию об изменении топологии. 2.459 +В результате чего и будут появляеться такие сообщения. 2.460 + 2.461 +Список вещей, которые можно сделать: 2.462 +\begin{itemize} 2.463 +\item Найти какой коммутатор является корневым, где он находится и под управлением какого программного обеспечения работает. Пожалуйста, сообщите о таком коммутаторе в список рассылки, чтобы можно было его добавить в blacklist. 2.464 +\item Заставить Linux-мост быть корневым. Найдите какой приоритет у коммутатора, который сейчас является корневым, и с помощью команды \textbf{brctl} \verb|setbridgeprio| установите приоритет линуксового моста на 1 меньше (Мост с наименьшим приоритеом всегда становится корневым). 2.465 +\item Вообще отключите STP на Linux-мосте. Только смотрите чтобы не появилось петель коммутации! Если у вас есть петли, и не работает STP, пакеты зациклятся и будут гулять по сети вечно, что сделает её нерабочей. 2.466 +\end{itemize} 2.467 + 2.468 +\subsubsection{Оно не работает с моей обычной ethernet-карточкой!} 2.469 +К сожалению, у некоторых сетевых карт глючные драйверы, 2.470 +которые сбоят во время загрузки. 2.471 +Ситуация улучшается, поэтому может помочь установка текущего ядра и сетевых драйверов. Ещё можно попробовать устройства другого производителя. 2.472 + 2.473 +Пожалуйста, сообщайте обо всех проблемах 2.474 +в список рассылки \dq{}Bridge mailing list\dq{}: bridge@osdl.org. 2.475 +Если ваша сетевая карта не работает даже без бриджинга, 2.476 +попробуйте обратиться в список рассылки 2.477 +\dq{}Linux networking mailing list\dq{} linux-net@vger.kernel.org. 2.478 + 2.479 +\subsubsection{Оно не работает с моей wireless-карточкой!} 2.480 +Это известная проблема, и она не связана с кодом моста. 2.481 +Большое количество wireless-карт не позволяет делать подмену (spoofing) 2.482 +адреса источника. В некоторых чипсетах это ограничение на уровне прошивки (firmware). 2.483 +Дополнительная информация может быть найдена в архивах списков рассылки. 2.484 + 2.485 +Удалось ли кому-нибудь обойти проблему связанную с тем, 2.486 +что Wavelan не позволяет использовать никакие MAC-адреса за исключением 2.487 +своего собственного? 2.488 + 2.489 +\textit{(Отвечает Michael Renzmann, mrenzmann at compulan.de)} 2.490 + 2.491 +99\% пользователей никогда не смогут избавиться от этой проблемы. 2.492 +Для такой функции нужна специальная прошивка. Её нужно загрузить 2.493 +в память WaveLAN-карточки и тогда карточка сможет выполнять бриджинг. 2.494 +Но нет общедоступной документации интерфейса. 2.495 +Единственный выход -- иметь полную версию библиотеки hcf, 2.496 +которая контролирует все действия карты, и в частности, 2.497 +доступ к памяти карты. 2.498 +Для получения этой библиотеки нужно убедить компанию Lucent, 2.499 +что это ей будет выгодно и помимо этого подписать NDA. 2.500 +Поэтому, скорее всего, пока Lucent не передумает, 2.501 +вам не удастся получить доступ к коду (а в том, что Lucent передумает 2.502 +есть большие сомнения). 2.503 + 2.504 +Если вам срочно нужна wireless-карта которая может работать в мосте, 2.505 +нужно использовать те, что построены на базе чипсета \textit{prism} 2.506 +(изготавливает Harris Intersil). 2.507 +Драйверы для этой карты есть на www.linux-wlan.com 2.508 +(веб-сайт от Absoval), и в одном из сообщений говорится, 2.509 +что общедоступна необходимая прошивка и программа для загрузки для Linux. 2.510 +Если вам нужны какие-то дополнительные возможности, нужно разговаривать 2.511 +с Absoval. 2.512 + 2.513 +\subsubsection{И всё же я не понимаю!!} 2.514 +Полноценный мост для беспроводных сетей (802.11) требует поддержки WDS. 2.515 +В текущей реализации её нет. 2.516 + 2.517 +Можно сделать ограниченную функциональность с некоторыми драйверами. 2.518 +Для этого обязательно чтобы устройство поддерживало 2.519 +разные адреса отправителя и получателя. Что и обеспечивает WDS. 2.520 + 2.521 +Есть способы добиться чтобы оно заработало, но они достаточно запутанные, 2.522 +и их сложно понять без досконального знания 802.11, режимов его работы и формата загловка кадра. 2.523 + 2.524 +\subsubsection{Я получаю ошибку \rq{}too much work in interrupt\rq{}} 2.525 +Это связано с тем, что сетевая карта теряет пакеты. 2.526 +Можно попробовать несколько вещей. Во-первых, собрать 2.527 +драйвер с поддержкой NAPI (если он по умолчанию, не включен). 2.528 +NAPI делает так чтобы получал управление по программному прерыванию, 2.529 +не по прерыванию низкого уровня. 2.530 + 2.531 +Если драйвер не поддерживает NAPI, можно попробовать 2.532 +увеличить объём работы, который драйвер может делать 2.533 +в течение обработки прерывания. 2.534 +Для 3c59x это делается с помощью опции \verb|max_interrupt_work| (поэтому нужно добавить опцию \verb|options 3c59x max_interrupt_work=10000| в файл \texttt{/etc/modules.conf}). 2.535 +У других сетевых карт похожие опции. 2.536 + 2.537 +\subsubsection{Работает ли DHCP через/поверх моста?} 2.538 +Мост передаёт DHCP-трафик (широковещательный) и ответы на него. 2.539 +Также можно использовать DHCP для установки локального IP-адреса на псевдо-интерфейс моста. 2.540 + 2.541 +Одна из распространённых ошибок при использовании DHCP является установка задержки передачи (forwarding delay) на порту коммутатора равной 30 секунд. 2.542 +При такой задержке интерфейс когда он подключился к мосту не может посылать 2.543 +через него данные в течении первых 30 секунд. Причина в том, что при использовании моста в сложной топологии он должен сначала обнаружить остальные мосты дабы не создавать петель. Проблема была одной из причин создания протокола 2.544 +Rapid Spanning Tree Protocol (RSTP). 2.545 + 2.546 +Если мост используется в одиночку (т.е. поблизости нет мостов) 2.547 +можно спокойно отключить задержку передачи (установить её равной 0) 2.548 +перед тем как подключать интерфейс к мосту. 2.549 +После этого сразу же можно вызывать dhclient: 2.550 + 2.551 +\begin{verbatim} 2.552 + # brctl setfd br0 0 2.553 + # brctl addif br0 eth0 2.554 + # dhclient eth0 2.555 +\end{verbatim} 2.556 + 2.557 +\subsection{Дополнительная информация} 2.558 +\begin{itemize} 2.559 +\item \htmladdnormallinkfoot{Linux Bridge}{http://xgu.ru/wiki/Linux\_Bridge} (рус.) 2.560 +\item \htmladdnormallinkfoot{Ethernet VPN bridging}{http://openvpn.sourceforge.net/bridge.html} 2.561 +\item \htmladdnormallinkfoot{Ebtables firewalling}{http://ebtables.sourceforge.net} 2.562 +\item \htmladdnormallinkfoot{Ethernet-bridge + netfilter HOWTO}{http://www.tldp.org/HOWTO/Ethernet-Bridge-netfilter-HOWTO.html} 2.563 +\item \htmladdnormallinkfoot{Linux-bridge STP HOWTO}{http://www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/index.html} 2.564 +\item \htmladdnormallinkfoot{Spanning Tree Protocol}{http://en.wikipedia.org/wiki/Spanning\_tree\_protocol} на Wikipedia 2.565 +\end{itemize} 2.566 +
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/drbd.tex Tue Jul 01 16:16:44 2008 +0300 3.3 @@ -0,0 +1,413 @@ 3.4 +\section{Реплицируемое блочное устройство DRBD} 3.5 + 3.6 + 3.7 +Здесь детально рассматривается процедура 3.8 +подготовки двух систем для синхронизации одного 3.9 +из своих дисковых разделов с помощью DRBD. 3.10 + 3.11 +Может применяться для организации отказоустойчивых систем 3.12 +хранения данных и отказоустойчивых кластерных систем. 3.13 + 3.14 +\subsection{Что такое DRBD?} 3.15 +\textbf{DRBD} (англ. \textit{Distributed Replicated Block Device}, распределённое реплицируемое блочное устройство) --- это блочное устройство, 3.16 +предназначенное для построения отказоустойчивых кластерных систем на операционной системе Linux. DRBD занимается полным отражением (mirroring) по сети всех операций с блочным устройством. Можно считать, что DRBD это сетевой RAID-1. 3.17 + 3.18 +DRBD берёт данные, записывает их на локальный диск и пересылает на другой хост. 3.19 +На другом хосте они тоже записываются на диск. 3.20 + 3.21 +Помимо DRBD в кластере должно быть ещё два важных компонента: 3.22 +\begin{enumerate} 3.23 +\item Служба кластера (Cluster membership service), (в качестве которого чаще всего выступает \textit{heartbeat}; 3.24 +\item Приложение, работающее поверх распределённого блочного устройства. 3.25 +\end{enumerate} 3.26 + 3.27 +Примеры приложений: 3.28 +\begin{itemize} 3.29 +\item Файловая система c fsck; 3.30 +\item Журналируемая файловая система; 3.31 +\item СУБД; 3.32 +\item домен Xen. 3.33 +\end{itemize} 3.34 + 3.35 +\subsection{Как работает DRBD?} 3.36 +Каждое DRBD-устройство (а DRBD-устройств одновременно может быть много) 3.37 +находится в одном из двух состояний: 3.38 +\begin{itemize} 3.39 +\item primary — главном (первичном); 3.40 +\item secondary — резервном (вторичном). 3.41 +\end{itemize} 3.42 +На узле, на котором DRBD-устройство находится в основном состоянии, 3.43 +операционная система или процессы могут работать 3.44 +с DRBD-устройством (оно доступно через файл-устройства \texttt{/dev/drbdX}). 3.45 + 3.46 +Каждое обращение на запись к DRBD-устройству 3.47 +отправляется локальном к нижележащему устройству 3.48 +и на узел, на котором находится реплика устройства. 3.49 +Резервное устройство, получившее запрос, выполняет запись. 3.50 + 3.51 +Чтение выполняется всегда только локально. 3.52 + 3.53 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/d/da/Drbd.png}}\\ \textit{}\end{center} 3.54 + 3.55 +\begin{verbatim} 3.56 + 3.57 +\end{verbatim} 3.58 +Если основной узел падает, heartbeat переключает запасной узел в 3.59 +состояние ведущего и запускает приложения на нём 3.60 +(если используется нежурналируемая файловая система, 3.61 +кроме всего прочего ещё выполнится fsck). 3.62 + 3.63 +Когда сбойный узел поднимается, DRBD-устройство на нём находится в состоянии 3.64 +второстепенного (secondary), и оно начинается синхронизироваться с основным устройством. 3.65 +Конечно же, это происходит в фоне, без нарушения работы системы. 3.66 + 3.67 +Синхронизируются только те части устройства, 3.68 +которые подверглись изменению. 3.69 +DRBD старается выполнять ресинхронизацию максимально эффективным способом. 3.70 +Начиная с DRBD-0.7 существует возможность 3.71 +создания так называемых \textit{активных множеств} (active set) 3.72 +определённого размера. 3.73 +Что позволяет выполнять ресинхронизацию на 1—3 минуты, независимо от размера устройства (сегодня до 4TB) даже после падения активного узла. 3.74 + 3.75 +\subsubsection{Какое отношение DRBD имеет к HA-кластерам?} 3.76 +Сегодня HA-кластеры (отказоуйстойчивые кластеры) используют в своей работе внешние хранилища, которые подключаюся сразу к нескольким узлам. 3.77 +Обычно это делается с помощью шин SCSI или Fibre Channel (но не обязательно). 3.78 + 3.79 +DRBD позволяет делать похожие вещи, только оно не использует никакого специального оборудования, а работает поверх обычных IP-сетей. 3.80 + 3.81 +\subsubsection{DRBD и кластерные файловые системы} 3.82 +Как уже говорилось, обычно 3.83 +DRBD-устройство работает на одном из узлов в режиме главного (primary role), 3.84 +а на других — в режиме второстепенного или резервного (secondary role). 3.85 +Запись идёт на устройство, которое находится в режиме главного, 3.86 +а на остальные просто выполняется репликация. 3.87 +Такой режим применим для классических отказоустойчивых кластеров, 3.88 +его следует использовать, если на DRBD-устройстве непосредственно 3.89 +находятся традиционные, не кластерные файловые системы (ext3, XFS, JFS и т.д.). 3.90 + 3.91 +Начиная с DRBD-8.0.08 можно заставить работать оба узла в режиме primary. 3.92 +Это даёт возможность монтировать кластерную ФС сразу на двух узлах 3.93 +одновременно. Примеры таких кластерных файловых систем: \textit{GFS}, \textit{OCFS2}. 3.94 + 3.95 +Кроме того, эта возможность DRBD позволяет выполнять живую миграцию 3.96 +доменов Xen, которые используют эти устройства. 3.97 +В этом случае использование кластерных систем в домене Xen 3.98 +не является обязательным, можно обойтись традиционными системами, 3.99 +такими как \textit{ext3}, \textit{XFS}, \textit{JFS}. 3.100 + 3.101 +\subsection{DRBD: подготовка модуля ядра Linux} 3.102 +Процедуры подготовки DRBD 3.103 +для различных дистрибутивов Linux описаны здесь \htmladdnormallinkfoot{Howto Build and Install DRBD}{http://www.linux-ha.org/DRBD/HowTo/Install} (англ.). 3.104 + 3.105 +В Debian GNU/Linux подготовка выполняется очень просто: 3.106 + 3.107 +1) Найти пакет с модулем ядра: 3.108 +\begin{verbatim} 3.109 + %# apt-cache search drbd 3.110 + drbd0.7-module-source - RAID 1 over tcp/ip for Linux module source 3.111 + drbd0.7-utils - RAID 1 over tcp/ip for Linux utilities 3.112 + drbd8-module-source - RAID 1 over tcp/ip for Linux module source 3.113 + drbd8-utils - RAID 1 over tcp/ip for Linux utilities 3.114 + drbdlinks - Manages symlinks into a shared DRBD partition 3.115 +\end{verbatim} 3.116 + 3.117 +2) Установить этот пакет: 3.118 +\begin{verbatim} 3.119 + %# apt-get install drbd8-module-source 3.120 +\end{verbatim} 3.121 + 3.122 +3) Собрать и загрузить модуль ядра: 3.123 +\begin{verbatim} 3.124 + %# module-assistant auto-install drbd8 3.125 +\end{verbatim} 3.126 + 3.127 +\subsection{Настройка DRBD} 3.128 +Если инсталляция выполняется из архива исходных текстов, 3.129 +нужно прочитать \texttt{README}, \texttt{INSTALL} 3.130 +и \htmladdnormallinkfoot{DRBD/HowTo/Install}{http://www.linux-ha.org/DRBD/HowTo/Install}. 3.131 +Нужно также ознакомится с файлами \texttt{upgrade\(\ast{}\).txt} 3.132 +в каталоге \texttt{src/} drbd или непосредственно в репозитории проекта. 3.133 + 3.134 +В дистрибутив входит хорошо прокомментированный конфигурационный файл-пример. 3.135 +В архиве исходных текстов он находится в \texttt{./scripts/drbd.conf}; 3.136 +в пакетах может быть в одном из каталогов: 3.137 +\texttt{/usr/\{shared/,\}doc/packages/drbd}. 3.138 + 3.139 +Нужно отредактировать этот файл в соответствии с вашими требованиями, 3.140 +а потом скопировать его на оба узла. Затем убедиться, что meta-disk\rq{}и 3.141 +находятся в правильных местах. 3.142 +Если вы настраиваете синхронизацию нескольких ресурсов, 3.143 +убедитесь, что в файле \texttt{/etc/drbd.conf} 3.144 +указаны разные порты (или разные IP) для этих ресурсов. 3.145 + 3.146 +Пример фрагмента конфигурационного файла: 3.147 +\begin{verbatim} 3.148 +resource dns { 3.149 + protocol C; 3.150 + net { 3.151 + allow-two-primaries; 3.152 + after-sb-0pri discard-least-changes; 3.153 + after-sb-1pri call-pri-lost-after-sb; 3.154 + after-sb-2pri call-pri-lost-after-sb; 3.155 + } 3.156 + syncer { 3.157 + rate 5M; 3.158 + } 3.159 + on dom0 3.160 + { 3.161 + device /dev/drbd1; 3.162 + disk /dev/XEN/dns; 3.163 + address 192.168.1.190:7792; 3.164 + meta-disk /dev/XEN/meta[1]; 3.165 + } 3.166 + on dom0m 3.167 + { 3.168 + device /dev/drbd1; 3.169 + disk /dev/XEN/dns; 3.170 + address 192.168.1.191:7792; 3.171 + meta-disk /dev/XEN/meta[1]; 3.172 + } 3.173 +} 3.174 +\end{verbatim} 3.175 + 3.176 + 3.177 +Нужно обратить особое внимание на местоположение метадиска. 3.178 +Если DRBD не найдёт метаданных там, где он их ождиает, он создаст новые. 3.179 +Если вы укажите на неверное место, будут переписаны несколько килобайтов 3.180 +или даже несколько мегабайтов возможно полезных данных! 3.181 +Если использовать внутренний метадиск (\texttt{meta-disk=internal}), 3.182 +нужно обязательно уменьшить файловую систему раздела (если она там есть). 3.183 + 3.184 +В настоящий момент метаданные DRBD забирают 128M, 3.185 +независимо от настоящего размера физических данных. 3.186 +В связи с этим маскимальный размер одного хранилища DRBD 3.187 +не может превышать ~4TB. 3.188 + 3.189 +Скопируйте \texttt{drbd.conf} в \texttt{/etc/drbd.conf} 3.190 +на обоих узлах. 3.191 +После этого на обоих узлах выполните команду: 3.192 +\begin{verbatim} 3.193 + %# drbdadm up all 3.194 +\end{verbatim} 3.195 +Узлы должны подняться и перейти в состояние \textit{Secondary} и \textit{Inconsistent}. 3.196 + 3.197 +Последнее связано с тем, что хранилища на нижнем уровне не синхронизированы между собой, 3.198 +и DRBD не знает откуда куда выполнять синхронизацию. 3.199 +Источник и, соответственно, направлени синхронизации нужно указать явным образом указать. 3.200 +Если данных нет, не имеет значения в какую сторону синхронизировать. 3.201 +Если есть файловая система, которая должна быть скопирована, 3.202 +указание неправильного направления приведёт к тому, что файловая система будет утеряна. 3.203 + 3.204 +Выберите, какой из узлов будет \textit{primary} (если есть данные, то это должен 3.205 +быть узел, на котором они уже есть). 3.206 +После этого выполните: 3.207 +\begin{verbatim} 3.208 + %# drbdsetup /dev/drbd1 primary -o 3.209 +\end{verbatim} 3.210 +или (для более старых версий) 3.211 +\begin{verbatim} 3.212 + %# drbdadm -- --do-what-I-say primary all 3.213 +\end{verbatim} 3.214 +Команда установит одно из устройств /dev/drbd1 в основной режим (если быть точным, 3.215 +то это будет устройство на той машине, где вызывалась команда). 3.216 +После этого должна выполниться полная синхронизация нижележащих устройств. 3.217 + 3.218 +Устройство готово к использованию. Если у вас ещё нет файловой системы на нём, 3.219 +можно её создать прямо сейчас. 3.220 + 3.221 +Теперь: 3.222 +\begin{itemize} 3.223 +\item Смонтируйте DRBD-устройство на том узле, который находится в состоянии \textit{primary}; 3.224 +\item Отредактируйте какие-нибудь файлы; 3.225 +\item Размонтируйте DRBD; 3.226 +\item Переведите этот узел \textit{secondary}, а второй — \textit{primary}; 3.227 +\item Смонитруйте DRBD на новом узле; 3.228 +\item Посмотрите изменения в файлах, которые вы сделали -- они должны были отразиться на втором узле. 3.229 +\end{itemize} 3.230 + 3.231 +Устройство настроено и готово к использованию. 3.232 + 3.233 +\subsection{Пример настройки} 3.234 +В этом примере используются устройства \texttt{/dev/drbdX}. 3.235 +Раньше использовались \texttt{/dev/nbX}. 3.236 +Исторически так сложилось что DRBD хищнечиски захватил 3.237 +мажорный номер NBD (43) и узлы устройств. 3.238 +Сейчас официально DRBD может использовать свой номер (147). 3.239 +В связи с этим начиная с версии 0.7.1 3.240 +по умолчанию используются свои номера устройств и названия файлов устройств. 3.241 + 3.242 +Если система ничего не знает о \texttt{/dev/drbdX}, 3.243 +нужно создать их командой наподобие такой: 3.244 +\begin{verbatim} 3.245 + %# for i in $(seq 0 15) ; do mknod /dev/drbd$i b 147 $i ; done 3.246 +\end{verbatim} 3.247 +Подробнее можно почитать в файлах \texttt{upgrade\(\ast{}\).txt}, 3.248 +упоминавшихся выше. 3.249 + 3.250 +\begin{verbatim} 3.251 + # administration ips of the nodes: 3.252 + left=10.0.0.1 3.253 + right=10.0.0.2 3.254 + 3.255 + vi drbd.conf 3.256 + # double check. 3.257 + scp drbd.conf $left:/etc/drbd.conf 3.258 + scp drbd.conf $right:/etc/drbd.conf 3.259 + 3.260 + cmd='modprobe drbd; drbdadm up all; dmesg | tail; cat /proc/drbd' 3.261 + ssh root@$left -- "$cmd" 3.262 + ssh root@$right -- "$cmd" 3.263 +\end{verbatim} 3.264 + 3.265 +Фрагмент из dmesg (или syslog) должен выглядеть так 3.266 +(в примере хранилище размером 5М). 3.267 +\begin{verbatim} 3.268 + drbd: initialised. Version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74) 3.269 + drbd: registered as block device major 147 3.270 + 3.271 + nb: to have it register as 43 (NBD) you can say 3.272 + modprobe drbd use_nbd_major 3.273 + 3.274 + drbd0: Creating state block 3.275 + drbd0: resync bitmap: bits=1250 words=40 3.276 + drbd0: size = 5000 KB 3.277 + drbd0: Assuming that all blocks are out of sync (aka FullSync) 3.278 + drbd0: 5000 KB now marked out-of-sync by on disk bit-map. 3.279 + drbd0: Handshake successful: DRBD Network Protocol version 74 3.280 + drbd0: Connection established. 3.281 + drbd0: I am inconsistent, but there is no sync? BOTH nodes inconsistent! 3.282 + drbd0: Secondary/Unknown --> Secondary/Secondary 3.283 +\end{verbatim} 3.284 + 3.285 +Файл /proc/drbd должен выглядеть так: 3.286 +\begin{verbatim} 3.287 + %# cat /proc/drbd 3.288 + version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74) 3.289 + 3.290 + 0: cs:Connected st:Secondary/Secondary ld:Inconsistent 3.291 + ns:0 nr:0 dw:0 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 3.292 +\end{verbatim} 3.293 + 3.294 +Пусть \texttt{\$left} будет \textit{primary}: 3.295 +\begin{verbatim} 3.296 + %# ssh root@$left -- "drbdadm primary all" 3.297 + ioctl(,SET_STATE,) failed: Input/output error 3.298 + Local replica is inconsistent (--do-what-I-say ?) 3.299 + Command line was '/sbin/drbdsetup /dev/drbd0 primary' 3.300 + drbdsetup exited with code 21 3.301 +\end{verbatim} 3.302 + 3.303 +Замечание: Это приведёт к перезагрузке системы (!) 3.304 + 3.305 +В действительности drbdadm просто выполняет команду \dq{}incon-degr-cmd\dq{}. 3.306 +Поскольку в примере был \dq{}halt -f\dq{}, 3.307 +вы сами попросили о перезапуске. 3.308 +Возможно, лучше указать что-то менее жётское. 3.309 +Это можно сделать, указав в файле \texttt{drbd.conf}: 3.310 + 3.311 +\begin{verbatim} 3.312 +incon-degr-cmd "echo 'DRBD: primary requested but inconsistent!' \ 3.313 + | wall; sleep 300000"; 3.314 +\end{verbatim} 3.315 + 3.316 +Ещё одна хорошая команда: 3.317 + 3.318 +\begin{verbatim} 3.319 +killall -9 heartbeat ipfail ccm 3.320 +\end{verbatim} 3.321 + 3.322 +Продолжаем. 3.323 + 3.324 +\begin{verbatim} 3.325 +# ok, this was expected. 3.326 +# so double check that $left is the correct node. 3.327 +# then force it: 3.328 +ssh root@$left -- "drbdadm -- --do-what-I-say primary all" 3.329 +# which will succeed silently. 3.330 + 3.331 +## Bryce Porter suggests that: 3.332 +## At this point, you need to connect the resource(s) 3.333 +# ssh root@$left -- "drbdadm -- connect all" 3.334 +# 3.335 +## well, they should have been connected all along, see /proc/drbd excerpt above, 3.336 +## so if this was neccessary, something "unexpected" happend already... 3.337 +## -- lge 3.338 + 3.339 +ssh $left -- 'dmesg | tail ; cat /proc/drbd' 3.340 +# output is: 3.341 +drbd0: Resync started as SyncSource (need to sync 5000 KB [1250 bits set]). 3.342 + 3.343 +version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74) 3.344 + 3.345 + 0: cs:SyncSource st:Primary/Secondary ld:Consistent 3.346 + ns:9276 nr:0 dw:0 dr:9404 al:0 bm:2 lo:0 pe:915 ua:32 ap:0 3.347 + [=========>..........] sync'ed: 50.0% (4380/5000)K 3.348 + finish: 0:00:05 speed: 620 (620) K/sec 3.349 + 3.350 +# or, to give an example from a larger device: 3.351 + 0: cs:SyncSource st:Primary/Secondary ld:Consistent 3.352 + ns:12940824 nr:0 dw:87492 dr:13690591 al:109 bm:1668 lo:1000 pe:1876 ua:1000 ap:0 3.353 + [========>...........] sync'ed: 44.4% (15858/28487)M 3.354 + finish: 0:09:20 speed: 28,933 (25,160) K/sec 3.355 + 3.356 +# whereas on the other node: 3.357 +ssh $right -- 'dmesg | tail ; cat /proc/drbd' 3.358 +drbd0: Resync started as SyncTarget (need to sync 5000 KB [1250 bits set]). 3.359 + 3.360 +version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74) 3.361 + 3.362 + 0: cs:SyncTarget st:Secondary/Primary ld:Inconsistent 3.363 + ns:0 nr:15000 dw:15000 dr:0 al:0 bm:6 lo:0 pe:0 ua:0 ap:0 3.364 + [=========>..........] sync'ed: 50.0% (5000/5000)K 3.365 + finish: 0:00:12 speed: 5 (5) K/sec 3.366 + 3.367 +# or, to give an example from a larger device: 3.368 + 0: cs:SyncTarget st:Secondary/Primary ld:Inconsistent 3.369 + ns:0 nr:27311780 dw:27311780 dr:0 al:0 bm:3447 lo:134 pe:493 ua:134 ap:0 3.370 + [==================>.] sync'ed: 93.7% (1818/28487)M 3.371 + finish: 0:01:07 speed: 27,482 (25,008) K/sec 3.372 +\end{verbatim} 3.373 + 3.374 +Убедимся, что всё работает: 3.375 + 3.376 +\begin{verbatim} 3.377 +# if you have no file system yet, create one 3.378 +# ssh root@$left -- 'mkreiserfs /dev/drbd0' 3.379 + 3.380 +ssh root@$left -- \ 3.381 + 'mkdir -p /mnt/ha0; mount /dev/drbd0 /mnt/ha0 && touch /mnt/ha0/been_there' 3.382 + 3.383 +# 'switch over' 3.384 +ssh root@$left -- \ 3.385 + 'umount /mnt/ha0 && drbdadm secondary all' 3.386 +# even during sync! 3.387 +ssh root@$right -- \ 3.388 + 'drbdadm primary all' 3.389 +ssh root@$right -- \ 3.390 + 'mkdir -p /mnt/ha0; mount /dev/drbd0 /mnt/ha0 && ls -l /mnt/ha0/been_there' 3.391 +\end{verbatim} 3.392 + 3.393 +Обратите внимание, что хотя ошибки и не будет, но лучше так не делать: 3.394 +\textit{SyncTarget} можно сделать \textit{primary}, но в случае проблем с сетью будет паника из-за отсутствия доступа к правильным данным. 3.395 +Поэтому лучше так не делать никогда. 3.396 + 3.397 +\subsection{Дополнительная информация} 3.398 +\begin{itemize} 3.399 +\item \htmladdnormallinkfoot{DRBD}{http://xgu.ru/wiki/DRBD} (рус.) 3.400 +\item \htmladdnormallinkfoot{DRBD}{http://www.drbd.org/} (англ.) — домашняя страница проекта DRBD 3.401 +\item \htmladdnormallinkfoot{DRBD FAQ}{http://www.linux-ha.org/DRBD/FAQ} (англ.) 3.402 +\item \htmladdnormallinkfoot{Howto Build and Install DRBD}{http://www.linux-ha.org/DRBD/HowTo/Install} (англ.) — процедура подготовки DRBD, в частности модуля ядра Linux 3.403 +\item \htmladdnormallinkfoot{Data Redundancy with DRBD}{http://www.drbd.org/drbd-article.html} (англ.) — статья о DRBD 0.6 3.404 +\item \htmladdnormallinkfoot{DRBD How To in the IBB Wiki}{https://services.ibb.gatech.edu/wiki/index.php/Howto:Software:DRBD} (англ.) — специфичное для RedHat (Fedora, RHEL, CentOS и других RedHat-based) описание процедуры поднятия DRBD 3.405 +\item \htmladdnormallinkfoot{Xen with DRBD, GNBD and OCFS2 HOWTO}{http://xenamo.sourceforge.net/index.html} (англ.) 3.406 +\item \htmladdnormallinkfoot{CLVM Project Page}{http://sources.redhat.com/cluster/clvm/} (англ.) - кластерный LVM 3.407 +\item \htmladdnormallinkfoot{(openvz-wiki) HA cluster with DRBD and Heartbeat}{http://wiki.openvz.org/HA\_cluster\_with\_DRBD\_and\_Heartbeat} HA cluster with DRBD and Heartbeat (англ.) 3.408 +\item \htmladdnormallinkfoot{DRBD, Xen und Heartbeat}{http://www.pro-linux.de/work/virtual-ha/virtual-ha5.html} (нем.) 3.409 +\item http://te.to/~ts1/xen\_cluster.html (англ.) 3.410 + 3.411 +\subsubsection{Обсуждения} 3.412 +\item \htmladdnormallinkfoot{Sensible maximum number of drbd devices}{http://www.gossamer-threads.com/lists/drbd/users/10007} (англ.) - вопросы использования Xen и DRBD 3.413 +\item \htmladdnormallinkfoot{(DRBD-user) DRBD 8.0, how to manage a split-brain on Master-Master}{http://lists.linbit.com/pipermail/drbd-user/2005-September/003779.html} (англ.) 3.414 +\item \htmladdnormallinkfoot{(Xen-devel) Debian, Xen and DRBD: Enabling true server redundancy}{http://lists.xensource.com/archives/html/xen-devel/2005-06/msg00544.html} (англ.) 3.415 +\end{itemize} 3.416 +
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/evms.tex Tue Jul 01 16:16:44 2008 +0300 4.3 @@ -0,0 +1,68 @@ 4.4 +\section{Система управления томами EVMS} 4.5 + 4.6 +\textbf{EVMS} (Enterprise Volume Management System) --- система управления томами 4.7 +для ОС Linux. 4.8 +EVMS предлагает единые унифицированные механизмы 4.9 +для управления дисками, дисковыми разделами, файловыми системами, физическими томами LVM, группами томов LVM, логическими томами LVM и RAID-массивами. 4.10 +Проект EVMS изначально развивался компанией IBM. 4.11 + 4.12 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/6/63/Evm_ncurses.png}}\\ \textit{Ncurses-интерфейс EVMS}\end{center} 4.13 + 4.14 +EVMS не интегрирован в ядро Linux (vanilla) 4.15 +и требует наложения внешнего патча 4.16 +\url{http://evms.sourceforge.net/install/kernel.html\#bdclaim}. 4.17 +Когда нужно было выбирать какую систему управления томами (LVM или EVMS) 4.18 +включать в ядро, был выбран LVM \url{http://lwn.net/Articles/14816/}. 4.19 + 4.20 +В результате развитие проекта замедлилось, а потом и практически полностью 4.21 +прекратилось. 4.22 +В настоящее время проект развивается очень медленно: основная команда разработчиков от IBM распущена, 4.23 +хотя небольшая работа вестись \url{http://marc.info/?l=evms-devel\&m=118256847901628\&w=2}. 4.24 + 4.25 +Когда стало известно, что в ядро Linux будет включен LVM, а не EVMS 4.26 +у разработчиков возникла 4.27 +идея использовать развитый userland-инструментарий 4.28 +EVMS и приспособить его к работе с LVM и прочими технологиями \url{http://lwn.net/Articles/14714/}. 4.29 +Однако с ноября 2002 года, когда эта идея была высказана, 4.30 +никаких особых результатов нет. 4.31 + 4.32 +\subsection{Технические возможности} 4.33 +Дополнительные возможности, которые есть у EVMS: 4.34 +\begin{itemize} 4.35 +\item Перемещение испорченных блоков; 4.36 +\item Объединение дисков; 4.37 +\item Поддержка снапшотов. 4.38 +\end{itemize} 4.39 + 4.40 +EVMS может самостоятельно выполнять такие операции 4.41 +как проверка целостности и создание файловых систем. 4.42 +Поддерживаются такие файловые системы: 4.43 +\begin{itemize} 4.44 +\item Ext2/3 4.45 +\item JFS 4.46 +\item ReiserFS 4.47 +\item XFS 4.48 +\item Swap 4.49 +\item OCFS2 4.50 +\item NTFS 4.51 +\item FAT 4.52 +\end{itemize} 4.53 + 4.54 +Поддерживаются три вида пользовательских интерфейсов: 4.55 +\begin{itemize} 4.56 +\item GUI (GTK-based) 4.57 +\item Псевдографический интерфейс (Ncurses) 4.58 +\item Интерфейс командной строки (для написания скриптов) 4.59 +\end{itemize} 4.60 + 4.61 +\subsection{Дополнительная информация} 4.62 +\begin{itemize} 4.63 +\item \htmladdnormallinkfoot{EVMS}{http://xgu.ru/wiki/EVMS} 4.64 +\item \htmladdnormallinkfoot{Enterprise Volume Management System}{http://evms.sourceforge.net/} (англ.) --- домашняя страница проекта 4.65 +\item \htmladdnormallinkfoot{Mastering the Enterprise Volume Management System}{http://www.osnews.com/story.php/10288/Mastering-the-Enterprise-Volume-Management-System/page1/} (англ.) 4.66 +\item \htmladdnormallinkfoot{Supercharge Volume Management With EVMS For Linux}{http://www.enterprisenetworkingplanet.com/netsysm/article.php/3519641} (англ.) 4.67 +\item \htmladdnormallinkfoot{Re: (zfs-discuss) Re: ZFS LVM and EVMS}{http://www.mail-archive.com/zfs-discuss@opensolaris.org/msg02200.html} (англ.) 4.68 +\item \htmladdnormallinkfoot{Evms - Ubuntu Wiki}{https://wiki.ubuntu.com/Evms} 4.69 +\item \htmladdnormallinkfoot{Несколько слов о судьбе проекта}{http://www.linux.org.ru/jump-message.jsp?msgid=2392856\&cid=2394392} 4.70 +\end{itemize} 4.71 +
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/lvm.tex Tue Jul 01 16:16:44 2008 +0300 5.3 @@ -0,0 +1,1342 @@ 5.4 +\section{Система управления томами LVM} 5.5 + 5.6 +Система управления логическими томами особенно полезна в работе с серверами, поскольку обеспечивает масштабируемость и удобное управление дисковым пространством. Она упрощает планирование дискового пространства и предотвращает проблемы, возникающие при неожиданно быстром росте занятого места в разделах. LVM не предназначен для обеспечения отказоустойчивости или высокой производительности. Потому он часто используется в сочетании с системами RAID. 5.7 + 5.8 +Здесь описывается процесс установки и использования менеджера логических томов на Linux-системе. LVM (Logical Volume Manager), менеджер логических томов -- это система управления дисковым пространством, абстрагирующаяся от физических устройств. Она позволяет эффективно использовать и легко управлять дисковым пространством. LVM обладает хорошей масштабируемостью, уменьшает общую сложность системы. У логических томов, созданных с помощью LVM, можно легко изменить размер, а их названия могут нести большую смысловую нагрузку, в отличие от традиционных /dev/sda, /dev/hda {\dots} 5.9 + 5.10 +Реализации менеджеров логических томов существуют практически во всех UNIX-подобных операционных системах. Зачастую они сильно отличаются в реализации, но все они основаны на одинаковой идее и преследуют аналогичные цели. Одна из основных реализаций была выполнена Open Software Foundation (OSF) и сейчас входит в состав многих систем, например IBM AIX, DEC Tru64, HP/UX. Она же послужила и основой для Linux-реализации LVM. 5.11 + 5.12 +Помимо собственно системы LVM и основных операций по её использованию, 5.13 +рассмотрены несколько более углублённых вопросов. 5.14 + 5.15 +Один из вопросов это использование \textbf{kpartx} из 5.16 +пакета \textbf{multipath-tools} для построения карты устройства (device map) 5.17 +и \textit{рекурсивного доступа к томам LVM} (когда LVM развёрнут на разделах, созданных внутри 5.18 +логического тома LVM более низкого уровня). Это может быть полезно 5.19 +при использовании LVM совместно с системами виртуализации. 5.20 + 5.21 +Второй вопрос --- это использование постоянных снимков 5.22 +(persistent snapshot) для быстрого \textit{клонирования разделов}. 5.23 +Эта возможность может быть полезна как при выполнении резервного копирования, 5.24 +так и при быстром создании виртуальных машин в системах виртуализации 5.25 +(вопрос создания снапшотов затрагивался и в \textit{повести}, но здесь он рассмотрен более детально). 5.26 + 5.27 +Третий вопрос --- это \textit{сравнение LVM и файловой системой ZFS}, набирающей 5.28 +в последнее время большую популярность. 5.29 +На первый взгляд такое сравнение может показаться странным, ведь ZFS -- это файловая система, 5.30 +а LVM -- система управления томами, то есть нечто, что находится на уровень ниже файловой системы. 5.31 +В действительности, сравнение вполне имеет право на существование, поскольку ZFS это не просто файловая система, 5.32 +а нечто большее. В ней присутствует уровень \dq{}storage pool\dq{}, который берёт на себя те же задачи, что и LVM. 5.33 + 5.34 +% Шифрование LVM-томов и замер скорости обращения к LVM-томам. 5.35 + 5.36 +\subsection{Введение} 5.37 + 5.38 + 5.39 +\subsubsection{Терминология.} 5.40 +Поскольку система управления логическими томами использует собственную модель представления дискового пространства, нам будет необходимо определиться с терминами и взаимосвязями понятий. Рассмотрим схему, основанную на диаграмме Эрика Бегфорса (Erik Bеgfors), приведенную им в списке рассылки linux-lvm. Она демонстрирует взаимосвязь понятий системы LVM: 5.41 + 5.42 +\begin{verbatim} 5.43 + sda1 sda2 sdb sdc <-- PV 5.44 + | | | | 5.45 + | | | | 5.46 + +--------+- VG00 -+-------+ <-- VG 5.47 + | 5.48 + +-------+-------+---------+ 5.49 + | | | | 5.50 + root usr home var <-- LV 5.51 + | | | | 5.52 + ext3 reiserfs reiserfs xfs <-- Файловые системы 5.53 +\end{verbatim} 5.54 + 5.55 +Обозначения и понятия: 5.56 + 5.57 +\begin{itemize} 5.58 +\item \textit{PV, Physical volume, физический том.} Обычно это раздел на диске или весь диск. В том числе, устройства программного и аппаратного RAID (которые уже могут включать в себя несколько физических дисков). Физические тома входят в состав группы томов. 5.59 +\item \textit{VG, Volume group, группа томов.} Это самый верхний уровень абстрактной модели, используемой системой LVM. С одной стороны группа томов состоит из физических томов, с другой -- из логических и представляет собой единую административную единицу. 5.60 +\item \textit{LV, Logical volume, логический том.} Раздел группы томов, эквивалентен разделу диска в не-LVM системе. Представляет собой блочное устройство и, как следствие, может содержать файловую систему. 5.61 +\item \textit{PE, Physical extent, физический экстент.} Каждый физический том делится на порции данных, называющиеся физическими экстентами. Их размеры те же, что и у логических экстентов. 5.62 +\item \textit{LE, Logical extent, логический экстент.} Каждый логический том делится на порции данных, называющиеся логическими экстентами. Размер логических экстентов не меняется в пределах группы томов. 5.63 +\end{itemize} 5.64 + 5.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. 5.66 + 5.67 +Администратор может выбрать алгоритм отображения логических экстентов в физические. На данный момент доступны два алгоритма: 5.68 +\begin{enumerate} 5.69 +\item Линейное отображение последовательно назначает набор физических экстентов области логического тома, т.е. LE 1 -- 99 отображаются на PV1, а LE 100 -- 347 -- на PV2. 5.70 +\item "Расслоенное" (striped) отображение разделяет порции данных логических экстентов на определенное количество физических томов. То есть: 5.71 +\end{enumerate} 5.72 + 5.73 +\begin{verbatim} 5.74 + 1-я порция данных LE[1] -> PV1[1], 5.75 + 2-я порция данных LE[1] -> PV2[1], 5.76 + 3-я порция данных LE[1] -> PV3[1], 5.77 + 4-я порция данных LE[1] -> PV1[2], и т.д. 5.78 +\end{verbatim} 5.79 + 5.80 +Похожая схема используется в работе RAID нулевого уровня. В некоторых ситуациях этот алгоритм отображения позволяет увеличить производительность логического тома. Однако он имеет значительное ограничение: логический том с данным отображением не может быть расширен за пределы физических томов, на которых он изначально и создавался. 5.81 + 5.82 +Великолепная возможность, предоставляемая системой LVM -- это \dq{}снапшоты\dq{}. Они позволяют администратору создавать новые блочные устройства с точной копией логического тома, \dq{}замороженного\dq{} в какой-то момент времени. Обычно это используется в пакетных режимах. Например, при создании резервной копии системы. Однако при этом вам не будет нужно останавливать работающие задачи, меняющие данные на файловой системе. Когда необходимые процедуры будут выполнены, системный администратор может просто удалить устройство-\dq{}снапшот\dq{}. Ниже мы рассмотрим работу с таким устройством. 5.83 +Работа с LVM 5.84 + 5.85 +Давайте теперь рассмотрим задачи, стоящие перед администратором LVM системы. Помните, что для работы с системой LVM ее нужно инициализировать командами: 5.86 +\begin{verbatim} 5.87 + %# vgscan 5.88 + %# vgchange -ay 5.89 +\end{verbatim} 5.90 + 5.91 +Первая команда сканирует диски на предмет наличия групп томов, вторая активирует все найденные группы томов. Аналогично для завершения всех работ, связанных с LVM, нужно выполнить деактивацию групп: 5.92 +\begin{verbatim} 5.93 + %# vgchange -an 5.94 +\end{verbatim} 5.95 + 5.96 +Первые две строки нужно будет поместить в скрипты автозагрузки (если их там нет), а последнюю можно дописать в скрипт shutdown. 5.97 + 5.98 +\subsubsection{Инициализация дисков и разделов} 5.99 +Перед использованием диска или раздела в качестве физического тома необходимо его инициализировать: 5.100 + 5.101 +Для целого диска: 5.102 +\begin{verbatim} 5.103 + %# pvcreate /dev/hdb 5.104 +\end{verbatim} 5.105 + 5.106 +Эта команда создает в начале диска дескриптор группы томов. 5.107 + 5.108 +Если вы получили ошибку инициализации диска с таблицей разделов -- проверьте, что работаете именно с нужным диском, и когда полностью будете уверены в том, что делаете, выполните следующие команды 5.109 +\begin{verbatim} 5.110 + %# dd if=/dev/zero of=/dev/diskname bs=1k count=1 5.111 + %# blockdev --rereadpt /dev/diskname 5.112 +\end{verbatim} 5.113 + 5.114 +Эти команды уничтожат таблицу разделов на целевом диске. 5.115 + 5.116 +Для разделов: 5.117 + 5.118 +Установите программой fdisk тип раздела в 0x8e. 5.119 +\begin{verbatim} 5.120 + %# pvcreate /dev/hdb1 5.121 +\end{verbatim} 5.122 + 5.123 +Команда создаст в начале раздела /dev/hdb1 дескриптор группы томов. 5.124 + 5.125 +\subsubsection{Создание группы томов} 5.126 +Для создания группы томов используется команда \rq{}vgcreate\rq{} 5.127 +\begin{verbatim} 5.128 + %# vgcreate vg00 /dev/hda1 /dev/hdb1 5.129 +\end{verbatim} 5.130 + 5.131 +Если вы используете devfs важно указывать полное имя в devfs, а не ссылку в каталоге /dev. Таким образом приведенная команда должна выглядеть в системе с devfs так: 5.132 +\begin{verbatim} 5.133 + %# vgcreate vg00 /dev/ide/host0/bus0/target0/lun0/part1 \ 5.134 + /dev/ide/host0/bus0/target1/lun0/part1 5.135 +\end{verbatim} 5.136 + 5.137 +Кроме того, вы можете задать размер экстента при помощи ключа \dq{}-s\dq{}, если значение по умолчанию в 32Мб вас не устраивает. Можно, также, указать ограничения возможного количества физических и логических томов. 5.138 + 5.139 +\subsubsection{Активация группы томов} 5.140 +После перезагрузки системы или выполнения команды vgchange -an, ваши группы томов и логические тома находятся в неактивном состоянии. Для их активации необходимо выполнить команду 5.141 +\begin{verbatim} 5.142 + %# vgchange -a y vg00 5.143 +\end{verbatim} 5.144 + 5.145 +\subsubsection{Удаление группы томов} 5.146 +Убедитесь, что группа томов не содержит логических томов. Как это сделать, показано в следующих разделах. 5.147 + 5.148 +Деактивируйте группу томов: 5.149 +\begin{verbatim} 5.150 + %# vgchange -a n vg00 5.151 +\end{verbatim} 5.152 + 5.153 +Теперь можно удалить группу томов командой: 5.154 +\begin{verbatim} 5.155 + %# vgremove vg00 5.156 +\end{verbatim} 5.157 + 5.158 +\subsubsection{Добавление физических томов в группу томов} 5.159 +Для добавления предварительно инициализированного физического тома в существующую группу томов используется команда \rq{}vgextend\rq{}: 5.160 + 5.161 +\begin{verbatim} 5.162 +%# vgextend vg00 /dev/hdc1 5.163 + ^^^^^^^^^ новый физический том 5.164 +\end{verbatim} 5.165 + 5.166 +\subsubsection{Удаление физических томов из группы томов} 5.167 +Убедитесь, что физический том не используется никакими логическими томами. Для этого используйте команду \rq{}pvdisplay\rq{}: 5.168 + 5.169 +\begin{verbatim} 5.170 +%# pvdisplay /dev/hda1 5.171 + 5.172 +--- Physical volume --- 5.173 + PV Name /dev/hda1 5.174 + VG Name vg00 5.175 + PV Size 1.95 GB / NOT usable 4 MB [LVM: 122 KB] 5.176 + PV# 1 5.177 + PV Status available 5.178 + Allocatable yes (but full) 5.179 + Cur LV 1 5.180 + PE Size (KByte) 4096 5.181 + Total PE 499 5.182 + Free PE 0 5.183 + Allocated PE 499 5.184 + PV UUID Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7 5.185 +\end{verbatim} 5.186 + 5.187 +Если же физический том используется, вам нужно будет перенести данные на другой физический том. Эта процедура будет описана в следующих разделах. 5.188 + 5.189 +После этого можно использовать \rq{}vgreduce\rq{} для удаления физических томов: 5.190 +\begin{verbatim} 5.191 + %# vgreduce vg00 /dev/hda1 5.192 +\end{verbatim} 5.193 + 5.194 +\subsubsection{Создание логического тома} 5.195 +Для того, чтобы создать логический том \dq{}lv00\dq{}, размером 1500Мб, выполните команду: 5.196 +\begin{verbatim} 5.197 + %# lvcreate -L1500 -nlv00 vg00 5.198 +\end{verbatim} 5.199 + 5.200 +Для создания логического тома размером в 100 логических экстентов с расслоением по двум физическим томам и размером блока данных 4 KB: 5.201 +\begin{verbatim} 5.202 + %# lvcreate -i2 -I4 -l100 -nlv01 vg00 5.203 +\end{verbatim} 5.204 + 5.205 +Если вы хотите создать логический том, полностью занимающий группу томов, выполните команду vgdisplay, чтобы узнать полные размер группы томов, после чего используйте команду lvcreate. 5.206 +\begin{verbatim} 5.207 + %# vgdisplay vg00 | grep "Total PE" 5.208 + Total PE 10230 5.209 + %# lvcreate -l 10230 vg00 -n lv02 5.210 +\end{verbatim} 5.211 + 5.212 +Эти команды создают логический том testvg, полностью заполняющий группу томов. 5.213 + 5.214 +\subsubsection{Удаление логических томов} 5.215 +Логический том должен быть размонтирован перед удалением: 5.216 +\begin{verbatim} 5.217 + # umount /home 5.218 + # resize2fs /dev/vg00/home 524288 5.219 + # lvreduce -L-1G /dev/vg00/home 5.220 + # mount /home 5.221 +\end{verbatim} 5.222 + 5.223 +\subsubsection{Увеличение логических томов} 5.224 +Для увеличения логического тома вам нужно просто указать команде lvextend до какого размера вы хотите увеличить том: 5.225 + 5.226 +\begin{verbatim} 5.227 + %# lvextend -L12G /dev/vg00/home 5.228 + lvextend -- extending logical volume "/dev/vg00/home" to 12 GB 5.229 + lvextend -- doing automatic backup of volume group "vg00" 5.230 + lvextend -- logical volume "/dev/vg00/home" successfully extended 5.231 +\end{verbatim} 5.232 + 5.233 +В результате /dev/vg00/home увеличится до 12Гбайт. 5.234 + 5.235 +\begin{verbatim} 5.236 + # umount /home 5.237 + # resize_reiserfs -s-1G /dev/vg00/home 5.238 + # lvreduce -L-1G /dev/vg00/home 5.239 + # mount -treiserfs /dev/vg00/home /home 5.240 +\end{verbatim} 5.241 + 5.242 +Эта команда увеличивает размер логического тома на 1Гб. 5.243 + 5.244 +После того как вы увеличили логический том, необходимо соответственно увеличить размер файловой системы. Как это сделать зависит от типа используемой файловой системы. 5.245 + 5.246 +По умолчанию большинство утилит изменения размера файловой системы увеличивают ее размер до размера соответствующего логического тома. Так что вам не нужно беспокоится об указании одинаковых размеров для всех команд. 5.247 + 5.248 +\paragraph{ext2} 5.249 + 5.250 +Если вы не пропатчили ваше ядро патчем ext2online, вам будет необходимо размонтировать файловую систему перед изменением размера. 5.251 +В современных ядрах этот патч не требуется. Точнее, он уже и так присутсвуетв коде ядра. 5.252 +\begin{verbatim} 5.253 + # umount /dev/vg00/home 5.254 + # resize2fs /dev/vg00/home 5.255 + # mount /dev/vg00/home /home 5.256 +\end{verbatim} 5.257 + 5.258 +Для файловой системы ext2 есть и другой путь. В состав LVM входит утилита e2fsadm, которая выполняет и lvextend, и resize2fs (она также выполняет и уменьшение размера файловой системы, это описано в следующем разделе). Так что можно использовать одну команду: 5.259 +\begin{verbatim} 5.260 + %# e2fsadm -L+1G /dev/vg00/home 5.261 +\end{verbatim} 5.262 +что эквивалентно двум следующим: 5.263 +\begin{verbatim} 5.264 + %# lvextend -L+1G /dev/vg00/home 5.265 + %# resize2fs /dev/vg00/home 5.266 +\end{verbatim} 5.267 + 5.268 +\paragraph{reiserfs} 5.269 + 5.270 +Увеличивать размер файловых систем Reiserfs можно как в смонтированном, так и в размонтированном состоянии. 5.271 + 5.272 +Увеличить размер смонтированной файловой системы: 5.273 +\begin{verbatim} 5.274 + %# resize_reiserfs -f /dev/vg00/home 5.275 +\end{verbatim} 5.276 + 5.277 +Увеличить размер размонтированной файловой системы: 5.278 +\begin{verbatim} 5.279 + %# umount /dev/vg00/homevol 5.280 + %# resize_reiserfs /dev/vg00/homevol 5.281 + %# mount -treiserfs /dev/vg00/homevol /home 5.282 +\end{verbatim} 5.283 + 5.284 +\paragraph{xfs} 5.285 + 5.286 +Размер файловой системы XFS можно увеличить только в смонтированном состоянии. 5.287 +Кроме того, утилите в качестве параметра нужно передать точку монтирования, а не имя устройства: 5.288 +\begin{verbatim} 5.289 + %# xfs_growfs /home 5.290 +\end{verbatim} 5.291 + 5.292 +\subsubsection{Уменьшение размера логического тома} 5.293 +Логические тома могут быть уменьшены в размере, точно также как и увеличены. Однако очень важно помнить, что нужно в первую очередь уменьшить размер файловой системы, и только после этого уменьшать размер логического тома. Если вы нарушите последовательность, вы можете потерять данные. 5.294 + 5.295 +\paragraph{ext2} 5.296 + 5.297 +При использовании файловой системы ext2, как уже указывалось ранее, можно использовать команду e2fsadm: 5.298 + 5.299 +\begin{verbatim} 5.300 + # umount /home 5.301 + # e2fsadm -L-1G /dev/vg00/home 5.302 + # mount /home 5.303 +\end{verbatim} 5.304 + 5.305 +Если вы хотите выполнить операцию по уменьшению логического тома вручную, вам нужно знать размер тома в блоках: 5.306 +\begin{verbatim} 5.307 + # umount /home 5.308 + # resize2fs /dev/vg00/home 524288 5.309 + # lvreduce -L-1G /dev/vg00/home 5.310 + # mount /home 5.311 +\end{verbatim} 5.312 + 5.313 +\paragraph{reiserfs} 5.314 + 5.315 +При уменьшении размера файловой системы Reiserfs, ее нужно размонтировать: 5.316 +\begin{verbatim} 5.317 + # umount /home 5.318 + # resize_reiserfs -s-1G /dev/vg00/home 5.319 + # lvreduce -L-1G /dev/vg00/home 5.320 + # mount -treiserfs /dev/vg00/home /home 5.321 +\end{verbatim} 5.322 + 5.323 +\paragraph{xfs} 5.324 + 5.325 +Уменьшить размер файловой системы XFS нельзя. 5.326 + 5.327 +Примечание: обратите внимание на то, что для уменьшения размера файловых систем, необходимо их размонтировать. Это вносит определенные трудности, если вы желаете уменьшить размер корневой файловой системы. В этом случае можно применить следующий метод: загрузится с CD дистрибутива, поддерживающего LVM. Перейти в командный режим (обычно это делается нажатием клавиш Alt+F2) и выполнить команды сканирования и активации группы томов: 5.328 + 5.329 +\begin{verbatim} 5.330 +%# vgscan 5.331 +%# vgchange -a y 5.332 +\end{verbatim} 5.333 + 5.334 +Теперь вы имеете доступ к логическим томам и можете изменять их размеры: 5.335 + 5.336 +\begin{verbatim} 5.337 +%# resize_reiserfs -s-500M /dev/vg00/root 5.338 +%# lvreduce -L-500M /dev/vg00/root 5.339 +%# reboot 5.340 +\end{verbatim} 5.341 + 5.342 + 5.343 +\subsubsection{Перенос данных с физического тома} 5.344 + 5.345 +Для того, чтобы можно было удалить физический том из группы томов, необходимо освободить все занятые на нем физические экстенты. Это делается путем перераспределения занятых физических экстентов на другие физические тома. Следовательно, в группе томов должно быть достаточно свободных физических экстентов. Описание операции удаления физического тома приведено в разделе примеров. 5.346 + 5.347 +\subsection{Примеры} 5.348 +\subsubsection{Настройка LVM на трех SCSI дисках} 5.349 +В первом примере мы настроим логический том из трех SCSI дисков. Устройства дисков: /dev/sda, /dev/sdb и /dev/sdc. 5.350 + 5.351 +Перед добавлением в группу томов диски нужно инициализировать: 5.352 + 5.353 +\begin{verbatim} 5.354 +%# pvcreate /dev/sda 5.355 +%# pvcreate /dev/sdb 5.356 +%# pvcreate /dev/sdc 5.357 +\end{verbatim} 5.358 + 5.359 +После выполнения этих команд в начале каждого диска создастся область дескрипторов группы томов. 5.360 + 5.361 +Теперь создадим группу томов vg01, состоящую из этих дисков: 5.362 + 5.363 +\begin{verbatim} 5.364 +%# vgcreate vg01 /dev/sda /dev/sdb /dev/sdc/ 5.365 +\end{verbatim} 5.366 + 5.367 +Проверим статус группы томов командой vgdisplay: 5.368 + 5.369 +\begin{verbatim} 5.370 +%# vgdisplay 5.371 +--- Volume Group --- 5.372 +VG Name vg01 5.373 +VG Access read/write 5.374 +VG Status available/resizable 5.375 +VG # 1 5.376 +MAX LV 256 5.377 +Cur LV 0 5.378 +Open LV 0 5.379 +MAX LV Size 255.99 GB 5.380 +Max PV 256 5.381 +Cur PV 3 5.382 +Act PV 3 5.383 +VG Size 1.45 GB 5.384 +PE Size 4 MB 5.385 +Total PE 372 5.386 +Alloc PE / Size 0 / 0 5.387 +Free PE / Size 372/ 1.45 GB 5.388 +VG UUID nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y 5.389 +\end{verbatim} 5.390 + 5.391 +Обратите внимание на первые три строки и строку с общим размером группы томов. Она должна соответствовать сумме всех трех дисков. Если всё в порядке, можно переходить к следующей задаче. 5.392 + 5.393 +\subsubsection{Создание логического тома} 5.394 +После успешного создания группы томов, можно начать создавать логические тома в этой группе. Размер тома может быть любым, но, естественно, не более всего размера группы томов. В этом примере мы создадим один логический том размером 1 Гб. Мы не будем использовать \dq{}расслоение\dq{}, поскольку при этом невозможно добавить диск в группу томов после создания логического тома, использующего данный алгоритм. 5.395 + 5.396 +\begin{verbatim} 5.397 +%# lvcreate -L1G -nusrlv vg01 5.398 +lvcreate -- doing automatic backup of "vg01" 5.399 +lvcreate -- logical volume "/dev/vg01/usrlv" successfully created 5.400 +\end{verbatim} 5.401 + 5.402 +\subsubsection{Создание файловой системы} 5.403 +Создадим на логическом томе файловую систему ext2: 5.404 + 5.405 +\begin{verbatim} 5.406 +%# mke2fs /dev/vg01/usrlv 5.407 +mke2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09 5.408 +Filesystem label= 5.409 +OS type: Linux 5.410 +Block size=4096 (log=2) 5.411 +Fragment size=4096 (log=2) 5.412 +131072 inodes, 262144 blocks 5.413 +13107 blocks (5.00%) reserved for the super user 5.414 +First data block=0 5.415 +9 block groups 5.416 +32768 blocks per group, 32768 fragments per group 5.417 +16384 inodes per group 5.418 +Superblock backups stored on blocks: 5.419 +32768, 98304, 163840, 229376 5.420 + 5.421 +Writing inode tables: done 5.422 +Writing superblocks and filesystem accounting information: done 5.423 +\end{verbatim} 5.424 + 5.425 +\subsubsection{Тестирование файловой системы} 5.426 +Смонтируйте логический том и проверьте все ли в порядке: 5.427 + 5.428 +\begin{verbatim} 5.429 +%# mount /dev/vg01/usrlv /mnt 5.430 +%# df 5.431 +Filesystem 1k-blocks Used Available Use% Mounted on 5.432 +/dev/hda1 1311552 628824 616104 51% / 5.433 +/dev/vg01/usrlv 1040132 20 987276 0% /mnt 5.434 +\end{verbatim} 5.435 + 5.436 +Если вы все сделали правильно, у вас должен появиться логический том с файловой системой ext2, смонтированный в точке /mnt. 5.437 + 5.438 +\subsubsection{Создание логического тома с \dq{}расслоением\dq{}} 5.439 +Рассмотрим теперь вариант логического тома, использующего алгоритм \dq{}расслоения\dq{}. Как уже указывалось выше, минусом этого решения является невозможность добавления дополнительного диска. 5.440 + 5.441 +Процедура создания данного типа логического тома также требует инициализации устройств и добавления их в группу томов, как это уже было показано. 5.442 + 5.443 +Для создания логического тома с \dq{}расслоением\dq{} на три физических тома с блоком данных 4Кб выполните команду: 5.444 + 5.445 +\begin{verbatim} 5.446 +%# lvcreate -i3 -I4 -L1G -nvarlv vg01 5.447 +lvcreate -- rounding 1048576 KB to stripe boundary size 1056768 KB / 258 PE 5.448 +lvcreate -- doing automatic backup of "vg01" 5.449 +lvcreate -- logical volume "/dev/vg01/varlv" successfully created 5.450 +\end{verbatim} 5.451 + 5.452 +После чего можно создавать файловую систему на логическом томе. 5.453 + 5.454 +\subsubsection{Добавление нового диска} 5.455 +Рассмотрим систему со следующей конфигурацией: 5.456 + 5.457 +\begin{verbatim} 5.458 +%# pvscan 5.459 +pvscan -- ACTIVE PV "/dev/sda" of VG "dev" [1.95 GB / 0 free] 5.460 +pvscan -- ACTIVE PV "/dev/sdb" of VG "sales" [1.95 GB / 0 free] 5.461 +pvscan -- ACTIVE PV "/dev/sdc" of VG "ops" [1.95 GB / 44 MB free] 5.462 +pvscan -- ACTIVE PV "/dev/sdd" of VG "dev" [1.95 GB / 0 free] 5.463 +pvscan -- ACTIVE PV "/dev/sde1" of VG "ops" [996 MB / 52 MB free] 5.464 +pvscan -- ACTIVE PV "/dev/sde2" of VG "sales" [996 MB / 944 MB free] 5.465 +pvscan -- ACTIVE PV "/dev/sdf1" of VG "ops" [996 MB / 0 free] 5.466 +pvscan -- ACTIVE PV "/dev/sdf2" of VG "dev" [996 MB / 72 MB free] 5.467 +pvscan -- total: 8 [11.72 GB] / in use: 8 [11.72 GB] / in no VG: 0 [0] 5.468 + 5.469 +%# df 5.470 +Filesystem 1k-blocks Used Available Use% Mounted on 5.471 +/dev/dev/cvs 1342492 516468 757828 41% /mnt/dev/cvs 5.472 +/dev/dev/users 2064208 2060036 4172 100% /mnt/dev/users 5.473 +/dev/dev/build 1548144 1023041 525103 66% /mnt/dev/build 5.474 +/dev/ops/databases 2890692 2302417 588275 79% /mnt/ops/databases 5.475 +/dev/sales/users 2064208 871214 1192994 42% /mnt/sales/users 5.476 +/dev/ops/batch 1032088 897122 134966 86% /mnt/ops/batch 5.477 +\end{verbatim} 5.478 + 5.479 +Как видно из листинга, группы томов \dq{}dev\dq{} и \dq{}ops\dq{} практически заполнены. В систему добавили новый диск /dev/sdg. Его необходимо разделить между группами \dq{}ops\dq{} и \dq{}dev\dq{}, поэтому разобьем его на разделы: 5.480 + 5.481 +\begin{verbatim} 5.482 +%# fdisk /dev/sdg 5.483 +Device contains neither a valid DOS partition table, nor Sun or SGI 5.484 +disklabel Building a new DOS disklabel. Changes will remain in memory 5.485 +only, until you decide to write them. After that, of course, the 5.486 +previous content won't be recoverable. 5.487 + 5.488 +Command (m for help): n 5.489 +Command action 5.490 + e extended 5.491 + p primary partition (1-4) 5.492 +p 5.493 +Partition number (1-4): 1 5.494 +First cylinder (1-1000, default 1): 5.495 +Using default value 1 5.496 +Last cylinder or +size or +sizeM or +sizeK (1-1000, default 1000): 500 5.497 + 5.498 +Command (m for help): n 5.499 +Command action 5.500 + e extended 5.501 + p primary partition (1-4) 5.502 +p 5.503 +Partition number (1-4): 2 5.504 +First cylinder (501-1000, default 501): 5.505 +Using default value 501 5.506 +Last cylinder or +size or +sizeM or +sizeK (501-1000, default 1000): 5.507 +Using default value 1000 5.508 + 5.509 +Command (m for help): t 5.510 +Partition number (1-4): 1 5.511 +Hex code (type L to list codes): 8e 5.512 +Changed system type of partition 1 to 8e (Unknown) 5.513 + 5.514 +Command (m for help): t 5.515 +Partition number (1-4): 2 5.516 +Hex code (type L to list codes): 8e 5.517 +Changed system type of partition 2 to 8e (Unknown) 5.518 + 5.519 +Command (m for help): w 5.520 +The partition table has been altered! 5.521 + 5.522 +Calling ioctl() to re-read partition table. 5.523 + 5.524 +WARNING: If you have created or modified any DOS 6.x partitions, 5.525 +please see the fdisk manual page for additional information. 5.526 +\end{verbatim} 5.527 + 5.528 +Перед тем как добавить разделы в группу томов, их необходимо инициализировать: 5.529 + 5.530 +\begin{verbatim} 5.531 +%# pvcreate /dev/sdg1 5.532 +pvcreate -- physical volume "/dev/sdg1" successfully created 5.533 + 5.534 +# pvcreate /dev/sdg2 5.535 +pvcreate -- physical volume "/dev/sdg2" successfully created 5.536 +\end{verbatim} 5.537 + 5.538 +Теперь можно добавлять физические тома в группы томов: 5.539 + 5.540 +\begin{verbatim} 5.541 +%# vgextend ops /dev/sdg1 5.542 +vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte 5.543 +vgextend -- doing automatic backup of volume group "ops" 5.544 +vgextend -- volume group "ops" successfully extended 5.545 + 5.546 +# vgextend dev /dev/sdg2 5.547 +vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte 5.548 +vgextend -- doing automatic backup of volume group "dev" 5.549 +vgextend -- volume group "dev" successfully extended 5.550 + 5.551 +# pvscan 5.552 +pvscan -- reading all physical volumes (this may take a while...) 5.553 +pvscan -- ACTIVE PV "/dev/sda" of VG "dev" [1.95 GB / 0 free] 5.554 +pvscan -- ACTIVE PV "/dev/sdb" of VG "sales" [1.95 GB / 0 free] 5.555 +pvscan -- ACTIVE PV "/dev/sdc" of VG "ops" [1.95 GB / 44 MB free] 5.556 +pvscan -- ACTIVE PV "/dev/sdd" of VG "dev" [1.95 GB / 0 free] 5.557 +pvscan -- ACTIVE PV "/dev/sde1" of VG "ops" [996 MB / 52 MB free] 5.558 +pvscan -- ACTIVE PV "/dev/sde2" of VG "sales" [996 MB / 944 MB free] 5.559 +pvscan -- ACTIVE PV "/dev/sdf1" of VG "ops" [996 MB / 0 free] 5.560 +pvscan -- ACTIVE PV "/dev/sdf2" of VG "dev" [996 MB / 72 MB free] 5.561 +pvscan -- ACTIVE PV "/dev/sdg1" of VG "ops" [996 MB / 996 MB free] 5.562 +pvscan -- ACTIVE PV "/dev/sdg2" of VG "dev" [996 MB / 996 MB free] 5.563 +pvscan -- total: 10 [13.67 GB] / in use: 10 [13.67 GB] / in no VG: 0 [0] 5.564 +\end{verbatim} 5.565 + 5.566 +Наконец, увеличим размеры логических томов и расширим файловые системы до размеров логических томов: 5.567 + 5.568 +\begin{verbatim} 5.569 +%# umount /mnt/ops/batch 5.570 +%# umount /mnt/dev/users 5.571 + 5.572 +# export E2FSADM_RESIZE_CMD=ext2resize 5.573 +# e2fsadm /dev/ops/batch -L+500M 5.574 +e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09 5.575 +Pass 1: Checking inodes, blocks, and sizes 5.576 +Pass 2: Checking directory structure 5.577 +Pass 3: Checking directory connectivity 5.578 +Pass 4: Checking reference counts 5.579 +Pass 5: Checking group summary information 5.580 +/dev/ops/batch: 11/131072 files (0.0<!-- non-contiguous), 4127/262144 blocks 5.581 +lvextend -- extending logical volume "/dev/ops/batch" to 1.49 GB 5.582 +lvextend -- doing automatic backup of volume group "ops" 5.583 +lvextend -- logical volume "/dev/ops/batch" successfully extended 5.584 + 5.585 +ext2resize v1.1.15 - 2000/08/08 for EXT2FS 0.5b 5.586 +e2fsadm -- ext2fs in logical volume "/dev/ops/batch" successfully extended to 1.49 GB 5.587 + 5.588 +# e2fsadm /dev/dev/users -L+900M 5.589 +e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09 5.590 +Pass 1: Checking inodes, blocks, and sizes 5.591 +Pass 2: Checking directory structure 5.592 +Pass 3: Checking directory connectivity 5.593 +Pass 4: Checking reference counts 5.594 +Pass 5: Checking group summary information 5.595 +/dev/dev/users: 12/262144 files (0.0% non-contiguous), 275245/524288 blocks 5.596 +lvextend -- extending logical volume "/dev/dev/users" to 2.88 GB 5.597 +lvextend -- doing automatic backup of volume group "dev" 5.598 +lvextend -- logical volume "/dev/dev/users" successfully extended 5.599 + 5.600 +ext2resize v1.1.15 - 2000/08/08 for EXT2FS 0.5b 5.601 +e2fsadm -- ext2fs in logical volume "/dev/dev/users" successfully extended to 2.88 GB 5.602 +\end{verbatim} 5.603 + 5.604 +Нам осталось смонтировать системы и посмотреть их размеры: 5.605 + 5.606 +\begin{verbatim} 5.607 +%# mount /dev/ops/batch 5.608 +%# mount /dev/dev/users 5.609 +%# df 5.610 +Filesystem 1k-blocks Used Available Use% Mounted on 5.611 +/dev/dev/cvs 1342492 516468 757828 41% /mnt/dev/cvs 5.612 +/dev/dev/users 2969360 2060036 909324 69% /mnt/dev/users 5.613 +/dev/dev/build 1548144 1023041 525103 66% /mnt/dev/build 5.614 +/dev/ops/databases 2890692 2302417 588275 79% /mnt/ops/databases 5.615 +/dev/sales/users 2064208 871214 1192994 42% /mnt/sales/users 5.616 +/dev/ops/batch 1535856 897122 638734 58% /mnt/ops/batch 5.617 +\end{verbatim} 5.618 + 5.619 +\subsubsection{Резервное копирование при помощи \dq{}снапшотов\dq{}} 5.620 +Развивая приведенный пример, предположим, что нам нужно выполнить резервирование базы данных. Для этой задачи мы будем использовать устройство-\dq{}снапшот\dq{}. 5.621 + 5.622 +Этот тип устройства представляет собой доступную только на чтение копию другого тома на момент выполнения процедуры \dq{}снапшот\dq{}. Это дает возможность продолжать работу не заботясь о том, что данные могут измениться в момент резервного копирования. Следовательно, нам не нужно останавливать работу базы данных на время выполнения резервного копирования. Останов нужен только на момент создания устройства-\dq{}снапшот\dq{}, который значительно короче самого копированя. 5.623 + 5.624 +В группе томов ops у нас осталось около 600Мб свободного места, его мы и задействуем для \dq{}снапшот\dq{}-устройства. Размер \dq{}снапшот\dq{}-устройства не регламентируется, но должен быть достаточен для сохранения всех изменений, которые могут произойти с томом, с которого он сделан, за время жизни снапшота. 600Мб должно хватить для наших целей: 5.625 + 5.626 +\begin{verbatim} 5.627 +%# lvcreate -L592M -s -n dbbackup /dev/ops/databases 5.628 +lvcreate -- WARNING: the snapshot must be disabled if it gets full 5.629 +lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/ops/dbbackup" 5.630 +lvcreate -- doing automatic backup of "ops" 5.631 +lvcreate -- logical volume "/dev/ops/dbbackup" successfully create 5.632 +\end{verbatim} 5.633 + 5.634 +Если вы делаете \dq{}снапшот\dq{} файловой системы XFS, нужно выполнить на смонтированной файловой системе команду xfs\_freeze, и лишь после этого создавать \dq{}снапшот\dq{}: 5.635 + 5.636 +\begin{verbatim} 5.637 +%# xfs_freeze -f /mnt/point; lvcreate -L592M -s -n dbbackup /dev/ops/databases; xfs_freeze -u /mnt/point 5.638 +\end{verbatim} 5.639 + 5.640 +Если устройство-\dq{}снапшот\dq{} полностью заполняется, оно автоматически деактивируется. В этом случае \dq{}снапшот\dq{} не может более использоваться, потому крайне важно выделять достаточное пространство для него. 5.641 + 5.642 +После того как мы создали \dq{}снапшот\dq{}, его нужно смонтировать: 5.643 + 5.644 +\begin{verbatim} 5.645 +%# mkdir /mnt/ops/dbbackup 5.646 +%# mount /dev/ops/dbbackup /mnt/ops/dbbackup 5.647 +mount: block device /dev/ops/dbbackup is write-protected, mounting read-only 5.648 +\end{verbatim} 5.649 + 5.650 +Если вы работаете с файловой системой XFS, вам будет нужно при монтировании указать опцию nouuid: 5.651 + 5.652 +\begin{verbatim} 5.653 +%# mount -o nouuid,ro /dev/ops/dbbackup /mnt/ops/dbbackup 5.654 +\end{verbatim} 5.655 + 5.656 +Выполним резервное копирование раздела: 5.657 + 5.658 +\begin{verbatim} 5.659 +%# tar -cf /dev/rmt0 /mnt/ops/dbbackup 5.660 +tar: Removing leading `/' from member names 5.661 +\end{verbatim} 5.662 + 5.663 +После выполнения необходимых процедур, нужно удалить устройство-\dq{}снапшот\dq{}: 5.664 + 5.665 +\begin{verbatim} 5.666 +%# umount /mnt/ops/dbbackup 5.667 +%# lvremove /dev/ops/dbbackup 5.668 +lvremove -- do you really want to remove "/dev/ops/dbbackup"? [y/n]: y 5.669 +lvremove -- doing automatic backup of volume group "ops" 5.670 +lvremove -- logical volume "/dev/ops/dbbackup" successfully removed 5.671 +\end{verbatim} 5.672 + 5.673 +Подробнее: 5.674 +\begin{itemize} 5.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} (англ.) 5.676 +\item \htmladdnormallinkfoot{Back Up (And Restore) LVM Partitions With LVM Snapshots}{http://www.howtoforge.com/linux\_lvm\_snapshots} (англ.) 5.677 +\item \htmladdnormallinkfoot{Linux Kernel Documentation: device-mapper/snapshot.txt}{http://www.mjmwired.net/kernel/Documentation/device-mapper/snapshot.txt} (англ.) 5.678 +\end{itemize} 5.679 + 5.680 +Резервное копирование MySQL и LVM: 5.681 +\begin{itemize} 5.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/} (англ.) 5.683 +\item \htmladdnormallinkfoot{MySQL Backups using LVM Snapshots}{http://mike.kruckenberg.com/archives/2006/05/mysql\_backups\_u.html} (англ.) 5.684 +\item \htmladdnormallinkfoot{mylvmbackup}{http://lenz.homelinux.org/mylvmbackup/} (англ.) 5.685 +\end{itemize} 5.686 + 5.687 +\subsubsection{Удаление диска из группы томов} 5.688 +Скажем, вы хотите освободить один диск из группы томов. Для этого необходимо выполнить процедуру переноса использующихся физических экстентов. Естественно, что на других физических томах должно быть достаточно свободных физических экстентов. 5.689 + 5.690 +Выполните команду: 5.691 + 5.692 +\begin{verbatim} 5.693 +%# pvmove /dev/hdb 5.694 +pvmove -- moving physical extents in active volume group "dev" 5.695 +pvmove -- WARNING: moving of active logical volumes may cause data loss! 5.696 +pvmove -- do you want to continue? [y/n] y 5.697 +pvmove -- 249 extents of physical volume "/dev/hdb" successfully moved 5.698 +\end{verbatim} 5.699 + 5.700 +Учтите, что операция переноса физических экстентов занимает много времени. Если вы хотите наблюдать за процессом переноса экстентов, укажите в команде ключ -v . 5.701 + 5.702 +После окончания процедуры переноса, удалите физический том из группы томов: 5.703 + 5.704 +\begin{verbatim} 5.705 +%# vgreduce dev /dev/hdb 5.706 +vgreduce -- doing automatic backup of volume group "dev" 5.707 +vgreduce -- volume group "dev" successfully reduced by physical volume: 5.708 +vgreduce -- /dev/hdb 5.709 +\end{verbatim} 5.710 + 5.711 +Теперь данный диск может быть физически удален из системы или использован в других целях. Например, добавлен в другую группу томов. 5.712 + 5.713 +\subsubsection{Перенос группы томов на другую систему} 5.714 +Физический перенос группы томов на другую систему организовывается при помощи команд vgexport и vgimport. 5.715 + 5.716 +Сперва необходимо размонтировать все логические тома группы томов и деактивировать группу: 5.717 + 5.718 +\begin{verbatim} 5.719 +%# unmount /mnt/design/users 5.720 +%# vgchange -an design 5.721 +vgchange -- volume group "design" successfully deactivated 5.722 +\end{verbatim} 5.723 + 5.724 +После этого экспортируем группу томов. Процедура экспорта запрещает доступ к группе на данной системе и готовит ее к удалению: 5.725 + 5.726 +\begin{verbatim} 5.727 +%# vgexport design 5.728 +vgexport -- volume group "design" sucessfully exported 5.729 +\end{verbatim} 5.730 + 5.731 +Теперь можно выключить машину, отсоединить диски, составляющие группу томов и подключить их к новой системе. Остается импортировать группу томов на новой машине и смонтировать логические тома: 5.732 + 5.733 +\begin{verbatim} 5.734 +%# pvscan 5.735 +pvscan -- reading all physical volumes (this may take a while...) 5.736 +pvscan -- inactive PV "/dev/sdb1" is in EXPORTED VG "design" [996 MB / 996 MB free] 5.737 +pvscan -- inactive PV "/dev/sdb2" is in EXPORTED VG "design" [996 MB / 244 MB free] 5.738 +pvscan -- total: 2 [1.95 GB] / in use: 2 [1.95 GB] / in no VG: 0 [0] 5.739 +# vgimport design /dev/sdb1 /dev/sdb2 5.740 +vgimport -- doing automatic backup of volume group "design" 5.741 +vgimport -- volume group "design" successfully imported and activated 5.742 + 5.743 +%# mkdir -p /mnt/design/users 5.744 +%# mount /dev/design/users /mnt/design/users 5.745 +\end{verbatim} 5.746 + 5.747 +Все! Группа томов готова к использованию на новой системе. 5.748 + 5.749 +\subsubsection{Конвертация корневой файловой системы в LVM} 5.750 +В данном примере имеется установленная система на двух разделах: корневом и /boot. Диск размером 2Гб разбит на разделы следующим образом: 5.751 + 5.752 +\begin{verbatim} 5.753 +/dev/hda1 /boot 5.754 +/dev/hda2 swap 5.755 +/dev/hda3 / 5.756 +\end{verbatim} 5.757 + 5.758 +Корневой раздел занимает все пространство, оставшееся после выделения swap и /boot разделов. Главное требование, предъявляемое к корневому разделу в нашем примере: он должен быть более чем на половину пуст. Это нужно, чтобы мы могли создать его копию. Если это не так, нужно будет использовать дополнительный диск. Процесс при этом останется тот же, но уменьшать корневой раздел будет не нужно. 5.759 + 5.760 +Для изменения размера файловой системы мы будем использовать утилиту GNU parted. 5.761 + 5.762 +Загрузитесь в однопользовательском режиме, это важно. Запустите программу parted для уменьшения размера корневого раздела. Ниже приведен пример диалога с утилитой parted: 5.763 + 5.764 +\begin{verbatim} 5.765 +# parted /dev/hda 5.766 +(parted) p 5.767 +. 5.768 +. 5.769 +. 5.770 +\end{verbatim} 5.771 + 5.772 +Изменим размер раздела: 5.773 + 5.774 +\begin{verbatim} 5.775 +(parted) resize 3 145 999 5.776 +\end{verbatim} 5.777 + 5.778 +Первое число -- это номер раздела (hda3), второе -- начало раздела hda3, не меняйте его. Последнее число -- это конец раздела. Укажите приблизительно половину текущего размера раздела. 5.779 + 5.780 +Создадим новый раздел: 5.781 + 5.782 +\begin{verbatim} 5.783 +(parted) mkpart primary ext2 1000 1999 5.784 +\end{verbatim} 5.785 + 5.786 +Этот раздел будет содержать LVM. Он должен начинаться после раздела hda3 и заканчиваться в конце диска. 5.787 + 5.788 +Выйдите из утилиты parted: 5.789 + 5.790 +\begin{verbatim} 5.791 +(parted) q 5.792 +\end{verbatim} 5.793 + 5.794 +Перезагрузите систему. Убедитесь, что ваше ядро содержит необходимые установки. Для поддержки LVM должны быть включены параметры CONFIG\_BLK\_DEV\_RAM и CONFIG\_BLK\_DEV\_INITRD. 5.795 + 5.796 +Для созданного раздела необходимо изменить тип на LVM (8e). Поскольку parted не знает такого типа, воспользуемся утилитой fdisk: 5.797 + 5.798 +\begin{verbatim} 5.799 +%# fdisk /dev/hda 5.800 +Command (m for help): t 5.801 +Partition number (1-4): 4 5.802 +Hex code (type L to list codes): 8e 5.803 +Changed system type of partition 4 to 8e (Unknown) 5.804 +Command (m for help): w 5.805 +\end{verbatim} 5.806 + 5.807 +Инициализируем LVM, физический том; создаем группу томов и логический том для корневого раздела: 5.808 + 5.809 +\begin{verbatim} 5.810 +%# vgscan 5.811 +%# pvcreate /dev/hda4 5.812 +%# vgcreate vg /dev/hda4 5.813 +%# lvcreate -L250M -n root vg 5.814 +\end{verbatim} 5.815 + 5.816 +Создадим теперь файловую систему на логическом томе и перенесем туда содержимое корневого каталога: 5.817 + 5.818 +\begin{verbatim} 5.819 +%# mke2fs /dev/vg/root 5.820 +%# mount /dev/vg/root /mnt/ 5.821 +%# find / -xdev | cpio -pvmd /mnt 5.822 +\end{verbatim} 5.823 + 5.824 +Отредактируйте файл /mnt/etc/fstab на логическом томе соответствующем образом. Например, строку: 5.825 + 5.826 +\begin{verbatim} 5.827 +/dev/hda3 / ext2 defaults 1 1 5.828 +\end{verbatim} 5.829 + 5.830 +замените на: 5.831 + 5.832 +\begin{verbatim} 5.833 +/dev/vg/root / ext2 defaults 1 1 5.834 +\end{verbatim} 5.835 + 5.836 +Создаем образ initrd, поддерживающий LVM: 5.837 + 5.838 +\begin{verbatim} 5.839 +%# lvmcreate_initrd 5.840 +Logical Volume Manager 1.0.6 by Heinz Mauelshagen 25/10/2002 5.841 +lvmcreate_initrd -- make LVM initial ram disk /boot/initrd-lvm-2.4.20-inp1-up-rootlvm.gz 5.842 + 5.843 +lvmcreate_initrd -- finding required shared libraries 5.844 +lvmcreate_initrd -- stripping shared libraries 5.845 +lvmcreate_initrd -- calculating initrd filesystem parameters 5.846 +lvmcreate_initrd -- calculating loopback file size 5.847 +lvmcreate_initrd -- making loopback file (6491 kB) 5.848 +lvmcreate_initrd -- making ram disk filesystem (19125 inodes) 5.849 +lvmcreate_initrd -- mounting ram disk filesystem 5.850 +lvmcreate_initrd -- creating new /etc/modules.conf 5.851 +lvmcreate_initrd -- creating new modules.dep 5.852 +lvmcreate_initrd -- copying device files to ram disk 5.853 +lvmcreate_initrd -- copying initrd files to ram disk 5.854 +lvmcreate_initrd -- copying shared libraries to ram disk 5.855 +lvmcreate_initrd -- creating new /linuxrc 5.856 +lvmcreate_initrd -- creating new /etc/fstab 5.857 +lvmcreate_initrd -- ummounting ram disk 5.858 +lvmcreate_initrd -- creating compressed initrd /boot/initrd-lvm-2.4.20-inp1-up-rootlvm.gz 5.859 +\end{verbatim} 5.860 + 5.861 +Внимательно изучите вывод команды. Обратите внимание на имя 5.862 +нового образа и его размер. Отредактируйте файл /etc/lilo.conf. Он 5.863 +должен выглядеть приблизительно следующим образом: 5.864 + 5.865 +\begin{verbatim} 5.866 +image = /boot/KERNEL_IMAGE_NAME 5.867 +label = lvm 5.868 +root = /dev/vg/root 5.869 +initrd = /boot/INITRD_IMAGE_NAME 5.870 +ramdisk = 8192 5.871 +\end{verbatim} 5.872 + 5.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). 5.874 + 5.875 +После этого файл lilo.conf нужно скопировать и на логический том: 5.876 + 5.877 +\begin{verbatim} 5.878 +%# cp /etc/lilo.conf /mnt/etc/ 5.879 +\end{verbatim} 5.880 + 5.881 +Выполните команду lilo: 5.882 + 5.883 +\begin{verbatim} 5.884 +%# lilo 5.885 +\end{verbatim} 5.886 + 5.887 +Перезагрузитесь и выберите образ lvm. Для этого введите \dq{}lvm\dq{} в ответ на приглашение LILO. Система должна загрузится, а корневой раздел будет находиться на логическом томе. 5.888 + 5.889 +После того как вы убедитесь, что все работает нормально, образ lvm нужно сделать загружаемым по умолчанию. Для этого укажите в конфигурационном файле LILO строку default=lvm, и выполните команду lilo. 5.890 + 5.891 +Наконец, добавьте оставшийся старый корневой раздел в группу томов. Для этого измените тип раздела утилитой fdisk на 8е, и выполните команды: 5.892 + 5.893 +\begin{verbatim} 5.894 +%# pvcreate /dev/hda3 5.895 +%# vgextend vg /dev/hda3 5.896 +\end{verbatim} 5.897 + 5.898 + 5.899 + 5.900 +\subsection{Дополнительные вопросы по LVM} 5.901 + 5.902 +\subsubsection{Дисковые разделы и LVM внутри LVM} 5.903 +LVM может находиться рекурсивно внутри логического 5.904 +тома LVM. 5.905 + 5.906 +Например, пусть есть три логических тома: \textit{LV1}, \textit{LV2} и \textit{LV3}. 5.907 +Один из которых, LV2 разбит на разделы, 5.908 +каждый из которых является физическим томом LVM, 5.909 +который в свою очередь объединены в группу томов, 5.910 +на которых созданы логические тома и так далее. 5.911 + 5.912 +\begin{verbatim} 5.913 + LV1 LV2 LV3 5.914 + ...--++----------------------------+ +--.... 5.915 + ||+-------------------------+ | | 5.916 + ||| LVM | | | 5.917 + ||+-------------------------+ | | 5.918 + ...--++----------------------------+ +--..... 5.919 +\end{verbatim} 5.920 + 5.921 +Такая ситуация очень легко может возникнуть 5.922 +при использовании виртуальных машин, 5.923 +например в том случае, если том LV2 5.924 +выдан как диск виртуальной машине Xen или эмулятору QEMU. 5.925 + 5.926 +Может возникнуть необходимость залезть 5.927 +внутрь системы томов, которые установлены внутрь логического тома. 5.928 +Например, это может произойти в случае, когда 5.929 +виртуальная машина в результате сбоя или по какой-то другой причине 5.930 +не загружается, а нужно добраться до её данных 5.931 +(напомним, что всё это при условии, что LVM используется не только 5.932 +снуражи, то есть в домене 0, но и внутри, то есть в домене U). 5.933 + 5.934 +Решение, если говорить кратко, заключается в том, 5.935 +что бы использовать программу \textbf{kpartx} из пакета \textbf{multipath-tools}, 5.936 +которая даёт возможность строить карты устройств 5.937 +(device maps) для разделов. 5.938 + 5.939 +Далее процедура использования \textbf{kpartx} 5.940 +описывается подробно. 5.941 + 5.942 +Блочное устройство, внутри которого находятся 5.943 +тома LVM может быть любым, в частности, 5.944 +это может быть том LVM, том EVMS, простой дисковый раздел или физическое устройство. 5.945 + 5.946 +Убедитесь что пакет multipath-tools установлен: 5.947 + 5.948 +\begin{verbatim} 5.949 +%# apt-get install multipath-tools 5.950 +\end{verbatim} 5.951 + 5.952 +Посмотрите как выполнено разбинение на разделы: 5.953 + 5.954 +\begin{verbatim} 5.955 +dom0:~ # fdisk -l /dev/evms/san2/vm3 5.956 +Disk /dev/evms/san2/vm3: 5368 MB, 5368708096 bytes 5.957 +255 heads, 63 sectors/track, 652 cylinders 5.958 +Units = cylinders of 16065 * 512 = 8225280 bytes 5.959 + 5.960 + Device Boot Start End Blocks Id System 5.961 +/dev/evms/san2/vm3p1 * 1 9 72261 83 Linux 5.962 +/dev/evms/san2/vm3p2 10 652 5164897+ f W95 Ext'd (LBA) 5.963 +/dev/evms/san2/vm3p5 10 75 530113+ 82 Linux swap / Solaris 5.964 +/dev/evms/san2/vm3p6 76 493 3357553+ 83 Linux 5.965 +/dev/evms/san2/vm3p7 494 652 1277136 83 Linux 5.966 +\end{verbatim} 5.967 + 5.968 +Создайте карту устройств для блочного устройства: 5.969 + 5.970 +\begin{verbatim} 5.971 +dom0:~ # kpartx -a /dev/evms/san2/vm3 5.972 +\end{verbatim} 5.973 + 5.974 +Карты находятся здесь: 5.975 + 5.976 +\begin{verbatim} 5.977 +%# ls -l /dev/mapper 5.978 +total 0 5.979 +lrwxrwxrwx 1 root root 16 Aug 26 16:28 control -> ../device-mapper 5.980 +brw------- 1 root root 253, 1 Aug 26 16:28 mpath1 5.981 +brw------- 1 root root 253, 0 Aug 26 16:28 mpath2 5.982 +brw------- 1 root root 253, 13 Aug 29 08:55 san2|vm3p1 5.983 +brw------- 1 root root 253, 14 Aug 29 08:55 san2|vm3p2 5.984 +brw------- 1 root root 253, 15 Aug 29 08:55 san2|vm3p5 5.985 +brw------- 1 root root 253, 16 Aug 29 08:55 san2|vm3p6 5.986 +brw------- 1 root root 253, 17 Aug 29 08:55 san2|vm3p7 5.987 +\end{verbatim} 5.988 + 5.989 +Имена выглядят несколько странно, но вообще это нормально. 5.990 + 5.991 +Можно попробовать смонтировать раздел: 5.992 + 5.993 +\begin{verbatim} 5.994 +%# mount -o rw /dev/mapper/san2\|vm3p6 /mnt 5.995 +\end{verbatim} 5.996 + 5.997 +В данном случае была смонтирована корневая файловая система 5.998 +виртуальной машины: 5.999 + 5.1000 +\begin{verbatim} 5.1001 +%# ls -l /mnt 5.1002 +total 96 5.1003 +dr-xr-xr-x 3 root root 4096 Aug 28 10:12 automount 5.1004 +drwxr-xr-x 2 root root 4096 Aug 25 16:51 bin 5.1005 +drwxr-xr-x 2 root root 4096 Aug 25 16:45 boot 5.1006 +drwxr-xr-x 5 root root 4096 Aug 25 16:45 dev 5.1007 +drwxr-xr-x 69 root root 8192 Aug 29 08:53 etc 5.1008 +drwxr-xr-x 2 root root 4096 May 4 01:43 home 5.1009 +drwxr-xr-x 11 root root 4096 Aug 25 17:10 lib 5.1010 +drwx------ 2 root root 16384 Aug 25 16:45 lost+found 5.1011 +drwxr-xr-x 2 root root 4096 May 4 01:43 media 5.1012 +drwxr-xr-x 3 root root 4096 Aug 28 15:08 mnt 5.1013 +drwxr-xr-x 4 root root 4096 Aug 25 16:49 opt 5.1014 +drwxr-xr-x 2 root root 4096 Aug 25 16:45 proc 5.1015 +drwx------ 10 root root 4096 Aug 28 14:56 root 5.1016 +drwxr-xr-x 3 root root 8192 Aug 25 16:52 sbin 5.1017 +drwxr-xr-x 4 root root 4096 Aug 25 16:45 srv 5.1018 +-rw-r--r-- 1 root root 0 Aug 29 08:53 success 5.1019 +drwxr-xr-x 3 root root 4096 Aug 25 16:45 sys 5.1020 +drwxrwxrwt 6 root root 4096 Aug 29 08:49 tmp 5.1021 +drwxr-xr-x 12 root root 4096 Aug 25 16:50 usr 5.1022 +drwxr-xr-x 3 root root 4096 Aug 25 16:54 var 5.1023 +\end{verbatim} 5.1024 + 5.1025 +Аналогичным образом монтируем остальные разделы: 5.1026 + 5.1027 +\begin{verbatim} 5.1028 +%# mount -o rw /dev/mapper/san2\|vm3p1 /mnt/boot 5.1029 +%# mount -o rw /dev/mapper/san2\|vm3p7 /mnt/var 5.1030 +\end{verbatim} 5.1031 + 5.1032 +С разделами можно работать как обычно. 5.1033 + 5.1034 +По завершению работы нужно 5.1035 +\begin{itemize} 5.1036 +\item размонтировать разделы; 5.1037 +\item удалить карты устройств. 5.1038 +\end{itemize} 5.1039 + 5.1040 +Произвести эти действия 5.1041 +особенно важно, если разделы принадлежат какой-либо виртуальной 5.1042 +машине, которую вы собираетесь запускать. 5.1043 + 5.1044 +\begin{verbatim} 5.1045 +%# umount /mnt/var 5.1046 +%# umount /mnt/boot 5.1047 +%# umount /mnt 5.1048 +%# kpartx -d /dev/evms/san2/vm3 5.1049 + 5.1050 +%# ls -l /dev/mapper 5.1051 +total 0 5.1052 +lrwxrwxrwx 1 root root 16 Aug 26 16:28 control > ../device-mapper 5.1053 +brw------- 1 root root 253, 1 Aug 26 16:28 mpath1 5.1054 +brw------- 1 root root 253, 0 Aug 26 16:28 mpath2 5.1055 +\end{verbatim} 5.1056 + 5.1057 +При условии что разделы находятся не на блочном устройстве, 5.1058 +а в обычно файле, сначала нужно воспользоваться 5.1059 +программой \textit{losetup}. 5.1060 + 5.1061 +В данном примере \textit{loop0} это первое свободное loopback-устройство, 5.1062 +но возможно, что оно будет занято, и тогда вместо loop0 нужно будет использовать \textit{loopX} с более выскоим номерм X: 5.1063 + 5.1064 +\begin{verbatim} 5.1065 +%# cd /etc/xen/images 5.1066 +%# losetup /dev/loop0 /xen/images/vm1.img 5.1067 +%# losetup -a 5.1068 +/dev/loop0: [6806]:318859 (vm1.img) 5.1069 + 5.1070 +%# fdisk -l /dev/loop0 5.1071 +Disk /dev/loop0: 1638 MB, 1638400000 bytes 5.1072 +255 heads, 63 sectors/track, 199 cylinders 5.1073 +Units = cylinders of 16065 * 512 = 8225280 bytes 5.1074 + Device Boot Start End Blocks Id System 5.1075 +/dev/loop0p1 * 1 9 72261 83 Linux 5.1076 +/dev/loop0p2 10 199 1526175 5 Extended 5.1077 +/dev/loop0p5 10 26 136521 82 Linux swap / Solaris 5.1078 +/dev/loop0p6 27 151 1004031 83 Linux 5.1079 +/dev/loop0p7 152 199 385528+ 83 Linux 5.1080 + 5.1081 +%# kpartx -a /dev/loop0 5.1082 +%# ls -l /dev/mapper/ 5.1083 +total 0 5.1084 +lrwxrwxrwx 1 root root 16 Sep 12 15:38 control -> ../device-mapper 5.1085 +brw------- 1 root root 253, 15 Sep 30 13:19 loop0p1 5.1086 +brw------- 1 root root 253, 16 Sep 30 13:19 loop0p2 5.1087 +brw------- 1 root root 253, 17 Sep 30 13:19 loop0p5 5.1088 +brw------- 1 root root 253, 18 Sep 30 13:19 loop0p6 5.1089 +brw------- 1 root root 253, 19 Sep 30 13:19 loop0p7 5.1090 +\end{verbatim} 5.1091 + 5.1092 +Можно монтировать, копировать, восстанаивливать, форматировать 5.1093 +эти разделы, короче, делать с ними всё, что делается с обучными дисковыми разделами. 5.1094 + 5.1095 +\begin{verbatim} 5.1096 +%# mount /dev/mapper/loop0p6 /mnt 5.1097 +%# mount /dev/mapper/loop0p1 /mnt/boot 5.1098 +%# mount /dev/mapper/loop0p7 /mnt/var 5.1099 +%# mount 5.1100 +-snip- 5.1101 +/dev/mapper/loop0p6 on /mnt type ext3 (rw) 5.1102 +/dev/mapper/loop0p1 on /mnt/boot type ext2 (rw) 5.1103 +/dev/mapper/loop0p7 on /mnt/var type ext3 (rw) 5.1104 +\end{verbatim} 5.1105 + 5.1106 +Другое решение: 5.1107 + 5.1108 +\begin{verbatim} 5.1109 +%# lomount -diskimage vm1.img -partition 1 /mnt 5.1110 +%# mount 5.1111 +-snip- 5.1112 +/xen/images/vm1.img on /mnt type ext2 (rw,loop=/dev/loop0,offset=32256) 5.1113 +\end{verbatim} 5.1114 + 5.1115 +С одной стороны при таком подходе: 5.1116 +\begin{itemize} 5.1117 +\item не нужно вручную подключать loopback-устройства; 5.1118 +\item не нужно использовать \textit{kpartx}; 5.1119 +\end{itemize} 5.1120 +Но с другой стороны: 5.1121 +\begin{itemize} 5.1122 +\item это решение позволяет смонтировать только простые разделы, размещённые внутри тома LVM. 5.1123 +\end{itemize} 5.1124 + 5.1125 +Если внутри логического тома выполнено другое разбиение, 5.1126 +такой подход не поможет. 5.1127 + 5.1128 +Если внутри тома находится расширенный раздел, подход работает, 5.1129 +но требует дополнительных манипуляций: 5.1130 + 5.1131 +\begin{verbatim} 5.1132 +%# fdisk -l -u /xen/images/vm1.img 5.1133 +You must set cylinders. 5.1134 +You can do this from the extra functions menu. 5.1135 +Disk vm1.img: 0 MB, 0 bytes 5.1136 +255 heads, 63 sectors/track, 0 cylinders, total 0 sectors 5.1137 +Units = sectors of 1 * 512 = 512 bytes 5.1138 + Device Boot Start End Blocks Id System 5.1139 +vm1.img1 * 63 144584 72261 83 Linux 5.1140 +vm1.img2 144585 3196934 1526175 5 Extended 5.1141 +vm1.img5 144648 417689 136521 83 Linux 5.1142 +vm1.img6 417753 2425814 1004031 83 Linux 5.1143 +vm1.img7 2425878 3196934 385528+ 83 Linux 5.1144 +\end{verbatim} 5.1145 + 5.1146 +Найти начало интересующего раздела можно путём 5.1147 +умножения значения поля \textit{Start} (показанного fdiks) на 512. 5.1148 + 5.1149 +417753\(\ast{}\)512=213889536 5.1150 + 5.1151 +Если мы хотим смонтировать корневой раздел: 5.1152 + 5.1153 +\begin{verbatim} 5.1154 +%# mount -o loop,offset=213889536 /xen/images/vm1.img /mnt 5.1155 +%# mount 5.1156 +-snip- 5.1157 +/xen/images/vm1.img on /mnt type ext3 (rw,loop=/dev/loop0,offset=213889536) 5.1158 +\end{verbatim} 5.1159 + 5.1160 +\subsubsection{Создание зашифрованных томов LVM} 5.1161 +Пример создания зашифрованного тома: 5.1162 + 5.1163 +\begin{verbatim} 5.1164 +%# cryptsetup -y -s 256 -c aes-cbc-essiv:sha256 luksFormat /dev/hda3 5.1165 +%# cryptsetup luksOpen /dev/hda3 lukspace 5.1166 +%# pvcreate /dev/mapper/lukspace 5.1167 +%# vgcreate vg /dev/mapper/lukspace 5.1168 +%# lvcreate -L10G -nroot vg 5.1169 +%# lvcreate -l 100%FREE -nmyspace vg 5.1170 +\end{verbatim} 5.1171 + 5.1172 +Подробнее: 5.1173 +\begin{itemize} 5.1174 +\item \htmladdnormallinkfoot{Recover Data From RAID1 LVM Partitions With Knoppix Linux LiveCD}{http://www.howtoforge.com/recover\_data\_from\_raid\_lvm\_partitions} (англ.) 5.1175 +\item \htmladdnormallinkfoot{LVM Recovery Tale}{http://codeworks.gnomedia.com/archives/2005/general/lvm\_recovery/} (англ.) 5.1176 +\item \htmladdnormallinkfoot{Recovery of RAID and LVM2 Volumes}{http://www.linuxjournal.com/article/8874} (англ.) 5.1177 +\end{itemize} 5.1178 + 5.1179 + 5.1180 +\subsubsection{Восстановления LVM после сбоя} 5.1181 +\begin{itemize} 5.1182 +\item \htmladdnormallinkfoot{Recover Data From RAID1 LVM Partitions With Knoppix Linux LiveCD}{http://www.howtoforge.com/recover\_data\_from\_raid\_lvm\_partitions}(англ.) 5.1183 +\item \htmladdnormallinkfoot{LVM Recovery Tale}{http://codeworks.gnomedia.com/archives/2005/general/lvm\_recovery/} (англ.) 5.1184 +\item \htmladdnormallinkfoot{Recovery of RAID and LVM2 Volumes}{http://www.linuxjournal.com/article/8874} (англ.) 5.1185 +\end{itemize} 5.1186 + 5.1187 + 5.1188 +\subsubsection{Определение интенсивности использования томов LVM} 5.1189 + 5.1190 +Определить интенсивность ввода/вывода на каждый том LVM 5.1191 +можно с помощью программы \textbf{iostat} (пакет \textit{sysstat}). 5.1192 + 5.1193 +Формат вызова: 5.1194 +\begin{verbatim} 5.1195 + iostat [опции] интервал повторения 5.1196 +\end{verbatim} 5.1197 + 5.1198 +Например, мы хотим наблюдать за интенсивностью ввода вывода на протяжении 5.1199 +одного часа, с интервалом в 10 секунд: 5.1200 +\begin{verbatim} 5.1201 + %# iostat 10 360 5.1202 +\end{verbatim} 5.1203 +Или в расширенном виде: 5.1204 +\begin{verbatim} 5.1205 + %# iostat -dx 10 360 5.1206 +\end{verbatim} 5.1207 + 5.1208 + 5.1209 +Программа iostat показывает 5.1210 +имена томов, которые чаще всего оказываются неинформативными 5.1211 +для администратора: 5.1212 +\begin{verbatim} 5.1213 +$ iostat -dx 5.1214 +Linux 2.6.18-4-xen-686 (cholpon... 5.1215 + 5.1216 +Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s av... 5.1217 +sda 0,44 128,55 1,77 3,36 57,23 1055,45 ... 5.1218 +sdb 0,08 0,00 0,05 0,00 0,60 0,00 ... 5.1219 +dm-0 0,00 0,00 0,03 0,00 0,22 0,00 ... 5.1220 +dm-1 0,00 0,00 0,03 0,00 0,21 0,00 ... 5.1221 +dm-2 0,00 0,00 0,28 123,53 13,62 988,24 ... 5.1222 +dm-3 0,00 0,00 0,02 0,48 1,06 3,83 ... 5.1223 +dm-4 0,00 0,00 0,00 0,00 0,01 0,00 ... 5.1224 +dm-5 0,00 0,00 0,03 0,00 0,22 0,00 ... 5.1225 +dm-6 0,00 0,00 0,20 2,48 3,52 19,85 ... 5.1226 +\end{verbatim} 5.1227 + 5.1228 +Здесь, видно, напимер, что нагрузка на \textit{dm-2} выше чем на другие LVM 5.1229 +тома, но сразу не видно, какому именно тому соответствует \textit{dm-2}. 5.1230 +Это можно выяснить вручную: 5.1231 + 5.1232 +\begin{verbatim} 5.1233 +%$ ls -l /dev/dm-2 5.1234 +brw-rw---- 1 root disk 254, 2 Фев 14 12:49 /dev/dm-2 5.1235 +%$ ls -l /dev/mapper/| grep '254,\s*2' 5.1236 +brw-rw---- 1 root disk 254, 2 Фев 14 12:49 MAIN-xen 5.1237 +\end{verbatim} 5.1238 + 5.1239 +Однако выяснять так каждый раз для каждой записи 5.1240 +неудобно. Было бы лучше, если бы имена были сразу 5.1241 +в таблице были представлены правильно. 5.1242 + 5.1243 +Функция \textbf{dm\_convert}, представленная ниже, 5.1244 +преобразует имена томов к понятной форме. 5.1245 +Она работает как фильтр: обрабатывает стандартный поток ввода, 5.1246 +и отправляет результат на поток вывода. 5.1247 +При замене учитывается то, что имена могут иметь разную 5.1248 +длину, и что данные должны сохранить форматирование. 5.1249 +\begin{verbatim} 5.1250 +dm_convert() { 5.1251 +sed "s/ / /; $( \ 5.1252 +LANG=C ls -l /dev/dm* /dev/mapper/* | grep 25[34], \ 5.1253 +| sort -n -k +6 | awk '{print $10}' \ 5.1254 +| sed 's@/dev/@@; s@mapper/@@' \ 5.1255 +| perl -ne '$a=$_;$b=<>;chomp $a; chomp $b; '\ 5.1256 + '$p=q(.)x(length($b)-length(a)-4); print qq(s/$a $p/$b/;) ')" 5.1257 +} 5.1258 +\end{verbatim} 5.1259 +\noindent теперь вы можете пропускать вывод \textbf{iostat} через \textbf{dm\_convert} 5.1260 +и получать сразу понятные результаты: 5.1261 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/0/03/Iostat-dm.png}}\\ \textit{Замер нагрузки на подсистему ввода/вывода с помощью \textit{iostat}}\end{center} 5.1262 + 5.1263 +\begin{verbatim} 5.1264 +$ iostat -dx 1 100 | dm_convert 5.1265 +Linux 2.6.18-4-xen-686 (cholpon) 14.02.2008 5.1266 + 5.1267 +Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s av... 5.1268 +sda 0,43 124,98 1,74 3,33 55,91 1026,56 ... 5.1269 +sdb 0,08 0,00 0,05 0,00 0,58 0,00 ... 5.1270 +VG2-music 0,00 0,00 0,03 0,00 0,22 0,00 ... 5.1271 +VG2-xentaur 0,00 0,00 0,03 0,00 0,20 0,00 ... 5.1272 +MAIN-xen 0,00 0,00 0,27 120,02 13,23 960,13 ... 5.1273 +MAIN-backup 0,00 0,00 0,02 0,47 1,04 3,74 ... 5.1274 +MAIN-movies 0,00 0,00 0,00 0,00 0,01 0,00 ... 5.1275 +MAIN-iso 0,00 0,00 0,03 0,00 0,21 0,00 ... 5.1276 +MAIN-home 0,00 0,00 0,19 2,47 3,43 19,74 ... 5.1277 +... 5.1278 +\end{verbatim} 5.1279 + 5.1280 +Для того чтобы смотреть статистику не в виде бесконечной, 5.1281 +бегущей по консоли полосы, а в виде постоянно обновляющегося окна (a-la top), 5.1282 +вы можете использовать программу \textbf{watch} (или \textbf{display} в FreeBSD). 5.1283 + 5.1284 +Но в этом случае \textbf{dm\_convert} должен быть оформлен не как 5.1285 +функция shell, а как отдельный скрипт: 5.1286 + 5.1287 +\begin{verbatim} 5.1288 +%$ cat /usr/local/bin/dm_convert 5.1289 +#!/bin/sh 5.1290 + 5.1291 +sed "s/ / /; $( \ 5.1292 +LANG=C ls -l /dev/dm* /dev/mapper/* | grep 25[34], \ 5.1293 +| sort -n -k +6 | awk '{print $10}' \ 5.1294 +| sed 's@/dev/@@; s@mapper/@@' \ 5.1295 +| perl -ne '$a=$_;$b=<>;chomp $a; chomp $b; '\ 5.1296 + '$p=q(.)x(length($b)-length(a)-4); print qq(s/$a $p/$b/;) ')" 5.1297 +\end{verbatim} 5.1298 + 5.1299 + 5.1300 +Скрипт должен быть исполняемым: 5.1301 +\begin{verbatim} 5.1302 +%# chmod +x /usr/local/bin/dm_convert 5.1303 +\end{verbatim} 5.1304 + 5.1305 +Теперь можно вызывать программу просмотра статистики нагрузки \textbf{iostat} 5.1306 +и смотреть на какие тома LVM наибольшая нагрузка: 5.1307 + 5.1308 +\begin{verbatim} 5.1309 +%# iostat -dx 2 2 | dm_convert 5.1310 +%# watch 'iostat -dx 2 2 | dm_convert' 5.1311 +\end{verbatim} 5.1312 + 5.1313 +Если вы используете систему виртуализации, то результаты автоматическ означают 5.1314 +какую дисковую активность создаёт тот или иной виртуальный домен. 5.1315 + 5.1316 +Собранная информация может быть отправной точкой, для того чтобы регулировать 5.1317 +приоритеты ввода/вывода для доменов с помощью \textbf{dm-band}. 5.1318 +В любом случае, это позволит выяснить какие именно задачи 5.1319 +создают на дисковую подсистему системы виртуализации наибольшую нагрузку. 5.1320 + 5.1321 +\paragraph{Графическое представление статистики ввода/вывода в Cacti}. 5.1322 + 5.1323 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/a/a4/Cacti-iostat-1.png}}\\ \textit{}\end{center} 5.1324 + 5.1325 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/8/8b/Cacti-iostat-2.png}}\\ \textit{}\end{center} 5.1326 + 5.1327 + 5.1328 +\subsection{Дополнительная информация} 5.1329 + 5.1330 +\begin{itemize} 5.1331 +\item \htmladdnormallinkfoot{LVM-HOWTO}{http://tldp.org/HOWTO/LVM-HOWTO/} (англ.) 5.1332 +\item \htmladdnormallinkfoot{LVM2 Resource Page}{http://sourceware.org/lvm2/} (англ.) 5.1333 +\item \htmladdnormallinkfoot{Повесть о Linux и LVM (Logical Volume Manager)}{http://gazette.linux.ru.net/rus/articles/taleLinuxLVM.html}, Иван Песин 5.1334 +\item \htmladdnormallinkfoot{LVM}{http://ru.wikipedia.org/wiki/LVM} в Википедии 5.1335 +\item \htmladdnormallinkfoot{LVM}{http://en.wikipedia.org/wiki/Logical\_volume\_management} в Wikipedia (англ.) 5.1336 +\end{itemize} 5.1337 + 5.1338 +Xen и LVM: 5.1339 +\begin{itemize} 5.1340 +\item \htmladdnormallinkfoot{(Xen-users) Xen with LVM}{http://lists.xensource.com/archives/html/xen-users/2007-10/msg00331.html} (англ.) 5.1341 +\item \htmladdnormallinkfoot{Mount/access Files Residing on Xen Virtual Machines}{http://www.novell.com/coolsolutions/tip/19568.html} (англ.) 5.1342 +\end{itemize} 5.1343 + 5.1344 + 5.1345 +
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/raid.tex Tue Jul 01 16:16:44 2008 +0300 6.3 @@ -0,0 +1,446 @@ 6.4 +\section{Программный RAID в Linux} 6.5 + 6.6 +Здесь рассматриваются вопросы создания и обслуживания программного RAID-массива в операционной системе Linux. 6.7 + 6.8 +\subsection{mdadm} 6.9 +Управление программным RAID-массивом в Linux 6.10 +выполняется с помощью программы \textbf{mdadm}. 6.11 + 6.12 +У программы \textbf{mdadm} есть несколько режимов работы. 6.13 + 6.14 +\begin{itemize} 6.15 +\item \textbf{Assemble (сборка)} — Собрать компоненты ранее созданного массива в массив. Компоненты можно указывать явно, но можно и не указывать — тогда выполняется их поиск по суперблокам. 6.16 +\item \textbf{Build (построение)} — Собрать массив из компонентов, у которых нет суперблоков. Не выполняются никакие проверки, создание и сборка массива в принципе ничем не отличаются. 6.17 +\item \textbf{Create (создание)} — Созать новый массив на основе указанных устройств. Использовать суперблоки размещённые на каждом устройстве. 6.18 +\item \textbf{Monitor (наблюдение)} — Следить на изменением состояния устройств. Для RAID0 этот режим не имеет смысла. 6.19 +\item \textbf{Grow (расширение или уменьшение)} — Расширение или уменьшение массива, включаются или удаляются новые диски. 6.20 +\item \textbf{Incremental Assembly (инкрементальная сборка)} — Добавление диска в массив. 6.21 +\item \textbf{Manage (управление)} — Разнообразные операции по управлению массивом, такие как замена диска и пометка как сбойного. 6.22 +\item \textbf{Misc (разное)} — Действия, которые не относятся ни к одному из перечисленных выше режимов работы. 6.23 +\item \textbf{Auto-detect (автоообнаружение)} — Активация автоматически обнаруживаемых массивов в ядре Linux. 6.24 +\end{itemize} 6.25 + 6.26 +Формат вызова: 6.27 + 6.28 +\begin{verbatim} 6.29 + mdadm [mode] [array] [options] 6.30 +\end{verbatim} 6.31 + 6.32 +Режимы: 6.33 +\begin{itemize} 6.34 +\item \texttt{-A}, \texttt{--assemble} — режим сборки 6.35 +\item \texttt{-B}, \texttt{--build} — режим построения 6.36 +\item \texttt{-C}, \texttt{--create} — режим создания 6.37 +\item \texttt{-F}, \texttt{--follow}, \texttt{--monitor} — режим наблюдения 6.38 +\item \texttt{-G}, \texttt{--grow} — режим расширения 6.39 +\item \texttt{-I}, \texttt{--incremental} — режим инкрементальной сборки 6.40 +\end{itemize} 6.41 + 6.42 +\subsection{Настройка программного RAID-массива} 6.43 +Рассмотрим как выполнить настройку RAID-массива 5 уровня 6.44 +на трёх дисковых разделах. 6.45 +Мы будем использовать разделы: 6.46 +\begin{verbatim} 6.47 + /dev/hde1 6.48 + /dev/hdf2 6.49 + /dev/hdg1 6.50 +\end{verbatim} 6.51 + 6.52 +В том случае если разделы иные, 6.53 +не забудьте использовать соответствующие имена файлов. 6.54 + 6.55 +\subsubsection{Создание разделов} 6.56 +Нужно определить на каких физических разделах 6.57 +будет создаваться RAID-массив. 6.58 +Если разделы уже есть, нужно найти свободные (\textit{fdisk -l}). 6.59 +Если разделов ещё нет, но есть неразмеченное место, 6.60 +их можно создать с помощью программ \textit{fdisk} или \textit{cfdisk}. 6.61 + 6.62 +Просмотреть какие есть разделы: 6.63 + 6.64 +\begin{verbatim} 6.65 + %# fdisk -l 6.66 +\end{verbatim} 6.67 + 6.68 +\begin{verbatim} 6.69 + Disk /dev/hda: 12.0 GB, 12072517632 bytes 6.70 + 255 heads, 63 sectors/track, 1467 cylinders 6.71 + Units = cylinders of 16065 * 512 = 8225280 bytes 6.72 +\end{verbatim} 6.73 + 6.74 +\begin{verbatim} 6.75 + Device Boot Start End Blocks Id System 6.76 + /dev/hda1 * 1 13 104391 83 Linux 6.77 + /dev/hda2 14 144 1052257+ 83 Linux 6.78 + /dev/hda3 145 209 522112+ 82 Linux swap 6.79 + /dev/hda4 210 1467 10104885 5 Extended 6.80 + /dev/hda5 210 655 3582463+ 83 Linux 6.81 + ... 6.82 + ... 6.83 + /dev/hda15 1455 1467 104391 83 Linux 6.84 +\end{verbatim} 6.85 + 6.86 +Просмотреть, какие разделы куда смонтированы, 6.87 +и сколько свободного места есть на них (размеры в килобайтах): 6.88 + 6.89 +\begin{verbatim} 6.90 + %# df -k 6.91 + Filesystem 1K-blocks Used Available Use% Mounted on 6.92 + /dev/hda2 1035692 163916 819164 17% / 6.93 + /dev/hda1 101086 8357 87510 9% /boot 6.94 + /dev/hda15 101086 4127 91740 5% /data1 6.95 + ... 6.96 + ... 6.97 + ... 6.98 + /dev/hda7 5336664 464228 4601344 10% /var 6.99 +\end{verbatim} 6.100 + 6.101 +\subsubsection{Размонтирование} 6.102 +Если вы будете использовать созданные ранее разделы, 6.103 +обязательно размонтируйте их. RAID-массив нельзя создавать 6.104 +поверх разделов, на которых находятся смонтированные файловые системы. 6.105 + 6.106 +\begin{verbatim} 6.107 + %# umount /dev/hde1 6.108 + %# umount /dev/hdf2 6.109 + %# umount /dev/hdg1 6.110 +\end{verbatim} 6.111 + 6.112 +\subsubsection{Изменение типа разделов} 6.113 +Желательно (но не обязательно) изменить тип разделов, которые будут 6.114 +входить в RAID-массив и установить его равным FD (Linux RAID autodetect). 6.115 +Изменить тип раздела можно с помощью fdisk. 6.116 + 6.117 +Рассмотрим как это делать на примере раздела \texttt{/dev/hde1}. 6.118 +\begin{verbatim} 6.119 + %# fdisk /dev/hde 6.120 + The number of cylinders for this disk is set to 8355. 6.121 + There is nothing wrong with that, but this is larger than 1024, 6.122 + and could in certain setups cause problems with: 6.123 + 1) software that runs at boot time (e.g., old versions of LILO) 6.124 + 2) booting and partitioning software from other OSs 6.125 + (e.g., DOS FDISK, OS/2 FDISK) 6.126 + 6.127 + Command (m for help): 6.128 + 6.129 + Use FDISK Help 6.130 + 6.131 + Now use the fdisk m command to get some help: 6.132 + 6.133 + Command (m for help): m 6.134 + ... 6.135 + ... 6.136 + p print the partition table 6.137 + q quit without saving changes 6.138 + s create a new empty Sun disklabel 6.139 + t change a partition's system id 6.140 + ... 6.141 + ... 6.142 + Command (m for help): 6.143 + 6.144 + Set The ID Type To FD 6.145 + 6.146 + Partition /dev/hde1 is the first partition on disk /dev/hde. 6.147 + Modify its type using the t command, and specify the partition number 6.148 + and type code. 6.149 + You also should use the L command to get a full listing 6.150 + of ID types in case you forget. 6.151 + 6.152 + Command (m for help): t 6.153 + Partition number (1-5): 1 6.154 + Hex code (type L to list codes): L 6.155 + 6.156 + ... 6.157 + ... 6.158 + ... 6.159 + 16 Hidden FAT16 61 SpeedStor f2 DOS secondary 6.160 + 17 Hidden HPFS/NTF 63 GNU HURD or Sys fd Linux raid auto 6.161 + 18 AST SmartSleep 64 Novell Netware fe LANstep 6.162 + 1b Hidden Win95 FA 65 Novell Netware ff BBT 6.163 + Hex code (type L to list codes): fd 6.164 + Changed system type of partition 1 to fd (Linux raid autodetect) 6.165 + 6.166 + Command (m for help): 6.167 + 6.168 + 6.169 + Make Sure The Change Occurred 6.170 + 6.171 + Use the p command to get the new proposed partition table: 6.172 + 6.173 + Command (m for help): p 6.174 + 6.175 + Disk /dev/hde: 4311 MB, 4311982080 bytes 6.176 + 16 heads, 63 sectors/track, 8355 cylinders 6.177 + Units = cylinders of 1008 * 512 = 516096 bytes 6.178 + 6.179 + Device Boot Start End Blocks Id System 6.180 + /dev/hde1 1 4088 2060320+ fd Linux raid autodetect 6.181 + /dev/hde2 4089 5713 819000 83 Linux 6.182 + /dev/hde4 6608 8355 880992 5 Extended 6.183 + /dev/hde5 6608 7500 450040+ 83 Linux 6.184 + /dev/hde6 7501 8355 430888+ 83 Linux 6.185 + 6.186 + Command (m for help): 6.187 + 6.188 + 6.189 + Save The Changes 6.190 + 6.191 + Use the w command to permanently save the changes to disk /dev/hde: 6.192 + 6.193 + Command (m for help): w 6.194 + The partition table has been altered! 6.195 + 6.196 + Calling ioctl() to re-read partition table. 6.197 + 6.198 + WARNING: Re-reading the partition table failed with error 16: Device or resource busy. 6.199 + The kernel still uses the old table. 6.200 + The new table will be used at the next reboot. 6.201 + Syncing disks. 6.202 +\end{verbatim} 6.203 + 6.204 +Аналогичным образом нужно изменить тип раздела 6.205 +для всех остальных разделов, входящих в RAID-массив. 6.206 + 6.207 +\subsubsection{Создание RAID-массива} 6.208 +Создание RAID-массива выполняется с помощью программы \textbf{mdadm} (ключ \verb|--create|). 6.209 +Мы воспользуемся опцией \verb|--level|, для того чтобы создать RAID-массив 5 уровня. 6.210 +С помощью ключа \verb|--raid-devices| укажем устройства, поверх которых будет собираться 6.211 +RAID-массив. 6.212 +\begin{verbatim} 6.213 + %# mdadm --create --verbose /dev/md0 --level=5 \ 6.214 + --raid-devices=3 /dev/hde1 /dev/hdf2 /dev/hdg1 6.215 + 6.216 + mdadm: layout defaults to left-symmetric 6.217 + mdadm: chunk size defaults to 64K 6.218 + mdadm: /dev/hde1 appears to contain an ext2fs file system 6.219 + size=48160K mtime=Sat Jan 27 23:11:39 2007 6.220 + mdadm: /dev/hdf2 appears to contain an ext2fs file system 6.221 + size=48160K mtime=Sat Jan 27 23:11:39 2007 6.222 + mdadm: /dev/hdg1 appears to contain an ext2fs file system 6.223 + size=48160K mtime=Sat Jan 27 23:11:39 2007 6.224 + mdadm: size set to 48064K 6.225 + Continue creating array? y 6.226 + mdadm: array /dev/md0 started. 6.227 +\end{verbatim} 6.228 + 6.229 +Если вы хотите сразу создать массив, где диска не хватает (degraded) 6.230 +просто укажите слово \texttt{missing} вместо имени устройства. 6.231 +Для RAID5 это может быть только один диск; для RAID6 — не более двух; 6.232 +для RAID1 — сколько угодно, но должен быть как минимум один рабочий. 6.233 + 6.234 +\subsubsection{Проверка правильности сборки} 6.235 +Убедиться, что RAID-массив проинициализирован корректно 6.236 +можно просмотрев файл \texttt{/proc/mdstat}. 6.237 +В этом файле отражается текущее состояние RAID-массива. 6.238 +\begin{verbatim} 6.239 + %# cat /proc/mdstat 6.240 + Personalities : [raid5] 6.241 + read_ahead 1024 sectors 6.242 + md0 : active raid5 hdg1[2] hde1[1] hdf2[0] 6.243 + 4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU] 6.244 + 6.245 + unused devices: <none> 6.246 +\end{verbatim} 6.247 + 6.248 +Обратите внимание на то, как называется новый RAID-массив. 6.249 +В нашем случае он называется \texttt{/dev/md0}. 6.250 +Мы будем обращаться к массиву по этому имени. 6.251 + 6.252 +\subsubsection{Создание файловой системы поверх RAID-массива} 6.253 +Новый RAID-раздел нужно отформатировать, т.е. создать на нём файловую систему. 6.254 +Сделать это можно при помощи программы из семейства \textbf{mkfs}. 6.255 +Если мы будем создавать файловую систему ext3, воспользуемся программой \textbf{mkfs.ext3}: 6.256 +\begin{verbatim} 6.257 + %# mkfs.ext3 /dev/md0 6.258 + mke2fs 1.39 (29-May-2006) 6.259 + Filesystem label= 6.260 + OS type: Linux 6.261 + Block size=1024 (log=0) 6.262 + Fragment size=1024 (log=0) 6.263 + 36144 inodes, 144192 blocks 6.264 + 7209 blocks (5.00%) reserved for the super user 6.265 + First data block=1 6.266 + Maximum filesystem blocks=67371008 6.267 + 18 block groups 6.268 + 8192 blocks per group, 8192 fragments per group 6.269 + 2008 inodes per group 6.270 + Superblock backups stored on blocks: 6.271 + 8193, 24577, 40961, 57345, 73729 6.272 + 6.273 + Writing inode tables: done 6.274 + Creating journal (4096 blocks): done 6.275 + Writing superblocks and filesystem accounting information: done 6.276 + 6.277 + This filesystem will be automatically checked every 33 mounts or 6.278 + 180 days, whichever comes first. Use tune2fs -c or -i to override. 6.279 +\end{verbatim} 6.280 + 6.281 +\subsubsection{Создание конфигурационного файла mdadm.conf} 6.282 +Система сама не запоминает какие RAID-массивы ей нужно создать 6.283 +и какие компоненты в них входят. 6.284 +Эта информация находится в файле \texttt{mdadm.conf}. 6.285 + 6.286 +Строки, которые следует добавить в этот файл, 6.287 +можно получить при помощи команды 6.288 +\begin{verbatim} 6.289 + mdadm --detail --scan --verbose 6.290 +\end{verbatim} 6.291 + 6.292 +Вот пример её использования: 6.293 + 6.294 +\begin{verbatim} 6.295 + %# mdadm --detail --scan --verbose 6.296 + ARRAY /dev/md0 level=raid5 num-devices=4 6.297 + UUID=77b695c4:32e5dd46:63dd7d16:17696e09 6.298 + devices=/dev/hde1,/dev/hdf2,/dev/hdg1 6.299 +\end{verbatim} 6.300 + 6.301 +Если файла \texttt{mdadm.conf} ещё нет, можно его создать: 6.302 +\begin{verbatim} 6.303 + %# mdadm --detail --scan --verbose > /etc/mdadm.conf 6.304 +\end{verbatim} 6.305 + 6.306 +\subsubsection{Создание точки монтирования для RAID-массива} 6.307 +Поскольку мы создали новую файловую систему, вероятно, 6.308 +нам понадобится и новая точка монтирования. 6.309 +Назовём её \texttt{/raid}. 6.310 +\begin{verbatim} 6.311 + %# mkdir /raid 6.312 +\end{verbatim} 6.313 + 6.314 +\subsubsection{Изменение /etc/fstab} 6.315 +Для того чтобы файловая система, созданная на новом RAID-массиве автоматически монтировалась 6.316 +при загрузке, добавим соотвествующую запись в файл \texttt{/etc/fstab} 6.317 +хранящий список автоматически монтируемых при загрузке файловых систем. 6.318 +\begin{verbatim} 6.319 + /dev/md0 /raid ext3 defaults 1 2 6.320 +\end{verbatim} 6.321 + 6.322 +Если мы объединяли в RAID-массив разделы, которые использовались раньше, 6.323 +нужно отключить их монтирование: удалить или закомментировать соответствующие строки 6.324 +в файле \texttt{/etc/fstab}. 6.325 +Закомментировать строку можно символом \texttt{\#}. 6.326 +\begin{verbatim} 6.327 + #/dev/hde1 /data1 ext3 defaults 1 2 6.328 + #/dev/hdf2 /data2 ext3 defaults 1 2 6.329 + #/dev/hdg1 /data3 ext3 defaults 1 2 6.330 +\end{verbatim} 6.331 + 6.332 +\subsubsection{Монтирование файловой системы нового RAID-массива} 6.333 +Для того чтобы получить доступ к файловой системе, расположенной на новом RAID-массиве, 6.334 +её нужно смонтировать. Монтирование выполняется с помощью команды \textbf{mount}. 6.335 + 6.336 +Если новая файловая система добавлена в файл \texttt{/etc/fstab}, 6.337 +можно смонтировать её командой \textbf{mount} \texttt{-a} 6.338 +(смонтируются все файловые системы, которые должны монтироваться при загрузке, но сейчас не смонтированы). 6.339 +\begin{verbatim} 6.340 + %# mount -a 6.341 +\end{verbatim} 6.342 +Можно смонтировать только нужный нам раздел (при условии, что он указан в \texttt{/etc/fstsb}). 6.343 +\begin{verbatim} 6.344 + %# mount /raid 6.345 +\end{verbatim} 6.346 +Если раздел в \texttt{/etc/fstab} не указан, то при монтировании мы должны задавать как минимум два параметра: 6.347 +точка монтирования и монтируемое устройство: 6.348 +\begin{verbatim} 6.349 + %# mount /dev/md0 /raid 6.350 +\end{verbatim} 6.351 + 6.352 +\subsubsection{Проверка состояния RAID-массива} 6.353 +Информация о состоянии RAID-массива находится в файле \texttt{/proc/mdstat}. 6.354 +\begin{verbatim} 6.355 + %# raidstart /dev/md0 6.356 + %# cat /proc/mdstat 6.357 + Personalities : [raid5] 6.358 + read_ahead 1024 sectors 6.359 + md0 : active raid5 hdg1[2] hde1[1] hdf2[0] 6.360 + 4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU] 6.361 + 6.362 + unused devices: <none> 6.363 +\end{verbatim} 6.364 + 6.365 +\subsection{Дальнейшая работа с массивом} 6.366 +\subsubsection{Пометка диска как сбойного} 6.367 +Диск в массиве можно условно сделать сбойным, ключ \verb|--fail| (\texttt{-f}): 6.368 +\begin{verbatim} 6.369 + %# mdadm /dev/md0 --fail /dev/hde1 6.370 + %# mdadm /dev/md0 -f /dev/hde1 6.371 +\end{verbatim} 6.372 + 6.373 +\subsubsection{Удаление сбойного диска} 6.374 +Сбойный диск можно удалить с помощью ключа \verb|{--remove| (\texttt{-r}): 6.375 +\begin{verbatim} 6.376 + %# mdadm /dev/md0 --remove /dev/hde1 6.377 + %# mdadm /dev/md0 -r /dev/hde1 6.378 +\end{verbatim} 6.379 + 6.380 +\subsubsection{Добавление нового диска} 6.381 +Добавить новый диск в массив можно с помощью ключей \verb|--add| (\texttt{-a}) 6.382 +и \verb|--re-add|: 6.383 +\begin{verbatim} 6.384 + %# mdadm /dev/md0 --add /dev/hde1 6.385 + %# mdadm /dev/md0 -a /dev/hde1 6.386 +\end{verbatim} 6.387 + 6.388 +\subsubsection{Сборка существующего массива} 6.389 +Собрать существующий массив можно с помощью \textbf{mdadm} \texttt{--assemble}. 6.390 +Как дополнительный аргумент указывается, 6.391 +нужно ли выполнять сканирование устройств, и если нет, то 6.392 +какие устройства нужно собирать. 6.393 +\begin{verbatim} 6.394 + %# mdadm --assemble /dev/md0 /dev/hde1 /dev/hdf2 /dev/hdg1 6.395 + %# mdadm --assemble --scan 6.396 +\end{verbatim} 6.397 + 6.398 +\subsubsection{Расширение массива} 6.399 +Расширить массив можно с помощью ключа \texttt{--grow} (\texttt{-G}). 6.400 +Сначала добавляется диск, а потом массив расширяется: 6.401 +\begin{verbatim} 6.402 + %# mdadm /dev/md0 --add /dev/hdh2 6.403 +\end{verbatim} 6.404 + 6.405 +Проверяем, что диск (раздел) добавился: 6.406 + 6.407 +\begin{verbatim} 6.408 + %# mdadm --detail /dev/hdh2 6.409 + %# cat /proc/mdstat 6.410 +\end{verbatim} 6.411 + 6.412 +Если раздел действительно добавился, 6.413 +мы можем расширить массив: 6.414 + 6.415 +\begin{verbatim} 6.416 + %# mdadm -G /dev/md0 --raid-devices=4 6.417 +\end{verbatim} 6.418 + 6.419 +Убедитесь, что массив расширился: 6.420 + 6.421 +\begin{verbatim} 6.422 + %# cat /proc/mdstat 6.423 +\end{verbatim} 6.424 + 6.425 +Нужно обновить обновить конфигурационный файл с учётом сделанных 6.426 +изменений: 6.427 + 6.428 +\begin{verbatim} 6.429 + %# mdadm --detail --scan >> /etc/mdadm/mdadm.conf 6.430 + %# vi /etc/mdadm/mdadm.conf 6.431 +\end{verbatim} 6.432 + 6.433 +\subsection{Дополнительная информация} 6.434 +\begin{itemize} 6.435 +\item \htmladdnormallinkfoot{Программный RAID в Linux}{http://xgu.ru/wiki/raid} (рус.) 6.436 +\item \htmladdnormallinkfoot{man mdadm}{http://linux.die.net/man/8/mdadm} (англ.) 6.437 +\item \htmladdnormallinkfoot{man mdadm.conf}{http://linux.die.net/man/5/mdadm.conf} (англ.) 6.438 +\item \htmladdnormallinkfoot{Linux Software RAID}{http://www.linuxhomenetworking.com/wiki/index.php/Quick\_HOWTO\_:\_Ch26\_:\_Linux\_Software\_RAID} (англ.) 6.439 +\item \htmladdnormallinkfoot{HOWTO Gentoo Install on Software RAID}{http://gentoo-wiki.com/HOWTO\_Gentoo\_Install\_on\_Software\_RAID} (англ.) 6.440 +\item \htmladdnormallinkfoot{HOWTO Migrate To RAID}{http://gentoo-wiki.com/HOWTO\_Migrate\_To\_RAID} (англ.) 6.441 +\item \htmladdnormallinkfoot{Remote Conversion to Linux Software RAID-1 for Crazy Sysadmins HOWTO}{http://togami.com/~warren/guides/remoteraidcrazies/} (англ.) 6.442 +\item \htmladdnormallinkfoot{Migrating To RAID1 Mirror on Sarge}{http://www.debian-administration.org/articles/238} (англ.) 6.443 +\end{itemize} 6.444 + 6.445 +Производительность программных RAID-массивов: 6.446 +\begin{itemize} 6.447 +\item Adventures With Linux RAID: \htmladdnormallinkfoot{Part 1}{http://opennfo.wordpress.com/2007/09/02/adventures-with-linux-raid-part-1/}, \htmladdnormallinkfoot{Part 2}{http://opennfo.wordpress.com/2007/09/08/adventures-with-linux-raid-part-2/} (англ.) 6.448 +\end{itemize} 6.449 +
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 7.2 +++ b/windowsxp.tex Tue Jul 01 16:16:44 2008 +0300 7.3 @@ -0,0 +1,330 @@ 7.4 +\section{Windows XP в Xen} 7.5 + 7.6 + 7.7 +Здесь рассматривается процедура подготовки и запуска домена с Windows в системе виртуализации Xen на платформе с аппаратной поддержкой виртуализации (HVM). Выполнять \textit{Windows в паравиртуальном режиме} (т.е. без использования аппаратных архитектурных расширений виртуализации) на сегодняшний день нельзя. Возможно, это можно будет сделать в будущем. 7.8 +Подробности на странице \htmladdnormallinkfoot{Windows в паравиртуальном домене Xen}{http://xgu.ru/wiki/Paravirtualized\_Windows}. 7.9 + 7.10 +\subsection{Предварительные требования} 7.11 +В первую очередь, для установки Windows XP, как и любой другой системы с закрытым кодом, необходима поддержка центральным процессором технологии виртуализации Intel®Virtualization Technology (VT) или Pacifica (AMD). Таблицу поддержки аппаратной виртуализации процессорами можно найти \htmladdnormallinkfoot{здесь}{http://xgu.ru/wiki/xen/hw}. 7.12 + 7.13 +Поддержка аппаратной виртуализации должна быть и у Xen. 7.14 +При сборке из исходных текстов понадобится установить в систему: 7.15 +\begin{itemize} 7.16 +\item \textbf{dev86} -- Ассемблер и компоновщик для реального режима 80x86. Этот пакет необходим для сборки кода BIOS, запускаемого в (виртуальном) реальном режиме. Если пакет dev86 недоступен для x86\_64, то можно использовать i386 версию. 7.17 +\item \textbf{LibVNCServer} -- Немодифицируемый VGA дисплей, клавиатуру и мышь можно виртуализировать с помощью библиотеки vncserver. 7.18 +\item \textbf{SDL-devel}, \textbf{SDL} -- Если пакеты SDL и SDL-devel не были установлены по умолчанию, то взять их можно из системы портов или скомпилировав из исходных текстов. 7.19 +\end{itemize} 7.20 + 7.21 +\subsubsection{Замечание для пользователей Debian} 7.22 +При выполнении вышеуказанной процедуры на 7.23 +Debian GNU/Linux необходимо учесть, что 7.24 +пакет \textbf{dev86} в Debian разбит на два пакета -- \textbf{bin86} и \textbf{bcc} -- и перед компиляцией Xen из архива исходных текстов 7.25 +должны быть установлены оба эти пакета (\htmladdnormallinkfoot{подробнее}{http://lists.xensource.com/archives/html/xen-users/2006-02/msg00207.html}). 7.26 + 7.27 +\begin{verbatim} 7.28 +$ apt-cache show bin86 bcc 7.29 +Package: bin86 7.30 +... 7.31 +Description: 16-bit x86 assembler and loader 7.32 +This is the as86 and ld86 distribution written by Bruce Evans. 7.33 +It's a complete 8086 assembler and loader which can make 32-bit 7.34 +code for the 386+ processors (under Linux it's used only to create 7.35 +the 16-bit bootsector and setup binaries). 7.36 + 7.37 +Package: bcc 7.38 +... 7.39 +Description: 16-bit x86 C compiler 7.40 +This is a C-compiler for 8086 cpus which is important for the 7.41 +development of boot loaders or BIOS related 8086 code. 7.42 + 7.43 +It is possible to run 8086 code under i386 Linux using an emulator, 7.44 +`elksemu', also included in this package. 7.45 +\end{verbatim} 7.46 + 7.47 +\subsection{Конфигурационный файл домена} 7.48 +В терминологии Xen гостевые домены, исполняющиеся в режиме аппаратной виртуализации называются HVM-доменами. 7.49 +Для облегчения процесса конфигурирования такого домена служит образцово-показательный конфигурационный файл \texttt{/etc/xen/xmexample.hvm} (путь может отличаться). 7.50 +В нём помимо опций использующихся в паравиртуальных доменах 7.51 +есть и сугубо специфические: 7.52 +\begin{itemize} 7.53 +\item \textbf{kernel} -- VMX firmware loader, /usr/lib/xen/boot/vmxloader 7.54 +\item \textbf{builder} -- Функции сборки домена. VMX-домены используют vmx builder 7.55 +\item \textbf{acpi} -- Задействует ACPI VMX-домена, по умолчанию равно \dq{}0\dq{} (отключено) 7.56 +\item \textbf{apic} -- Задействует APIC VMX-домена, по умолчанию равно \dq{}0\dq{} (отключено) 7.57 +\item \textbf{pae} -- Задействует PAE VMX-домена, по умолчанию равно \dq{}0\dq{} (отключено) 7.58 +\item \textbf{vif} -- Опционально определяет MAC адрес и/или режим моста для сетевого интерфейса. Если значение MAC не указано, то назначается случайный адрес. Есть возможность задать параметр type=ioemu для использования ioemu в VMX NIC. Если это значение не определено, то vbd используется как в паравиртуальных(\dq{}нормальных\dq{}, с модифицированным ядром) доменах. 7.59 +\item \textbf{disk} -- Определяет дисковые устройства, к которым гостевой домен должен иметь доступ. Если для домена используется физический носитель в качестве диска, то он должен быть описан строкой типа: 7.60 +\end{itemize} 7.61 + 7.62 +\begin{verbatim} 7.63 +phy:UNAME,ioemu:DEV,MODE, 7.64 +\end{verbatim} 7.65 + 7.66 +где \textbf{UNAME} -- имя устройства, \textbf{DEV} -- имя диска, как его видит домен и \textbf{MODE} принимает значения \textbf{r} для read-only и \textbf{w} для read-write. Если это значение не определено, то ioemu используется как паравиртуальных доменах. 7.67 + 7.68 +Если используется образ диска, то строка принимает вид: 7.69 + 7.70 +\begin{verbatim} 7.71 +file:FILEPATH,ioemu:DEV,MODE 7.72 +\end{verbatim} 7.73 + 7.74 +Если используется больше одного диска, то они разделяются запятой. Например: 7.75 + 7.76 +\begin{verbatim} 7.77 +disk = ['file:/var/images/image1.img,ioemu:hda,w', 'file:/var/images/image2.img,ioemu:hdb,w'] 7.78 +\end{verbatim} 7.79 + 7.80 +\begin{itemize} 7.81 +\item \textbf{cdrom} -- Образ CD-ROM. По умолчанию, для Domain0 это значение равно /dev/cdrom. Внутри VMX-домена CD-ROM будет виден как /dev/hdc. 7.82 +\item \textbf{boot} -- Загрузка с floppy (a), hard disk (c) или CD-ROM (d). 7.83 +\item \textbf{device\_model} -- Инструмент эмуляции устройств для VMX-домена. Могут быть изменены параметры, приведенные ниже. 7.84 +\item \textbf{sdl} -- Задействует библиотеку SDL для отображения графики, по умолчанию равно \dq{}0\dq{} (отключено) 7.85 +\item \textbf{vnc} -- Задействует библиотеку VNC для отображения графики, по умолчанию равно \dq{}0\dq{} (отключено) 7.86 +\item \textbf{vncviewer} -- Если vnc=1 и vncviewer=0, пользователь может использовать vncviewer для подключения к VMX-домену. Например: 7.87 +\end{itemize} 7.88 + 7.89 +\begin{verbatim} 7.90 +$ vncviewer domain0_IP_address:VMX_domain_id 7.91 +\end{verbatim} 7.92 + 7.93 +\begin{itemize} 7.94 +\item \textbf{ne2000} -- Задействует режим совместимости ne2000, по умолчанию равно \dq{}0\dq{} (отключено, используется pcnet) 7.95 +\item \textbf{serial} -- Перенаправление последовательных портов гостевого домена на реальное устройство. 7.96 +\item \textbf{usb} -- Включение поддержки USB без указания специфического устройства. По умолчанию эта функция отключена, в случае же определения параметра usbdevice, ее необходимо задействовать. 7.97 +\item \textbf{usbdevice} -- Включение поддержки конкретных устройств. Например, поддержка мыши PS/2 через USB: 7.98 +\end{itemize} 7.99 + 7.100 +\begin{verbatim} 7.101 +usbdevice='mouse' 7.102 +\end{verbatim} 7.103 + 7.104 +\begin{itemize} 7.105 +\item \textbf{localtime} -- Установка локального времени. По умолчанию равно \dq{}0\dq{}, т.е UTC 7.106 +\item \textbf{enable-audio} -- Поддержка звука. Находится в разработке. 7.107 +\item \textbf{full-screen} -- Поддержка полноэкранного режима. Находится в разработке. 7.108 +\item \textbf{nographic} -- Другой способ перенаправить вывод на последовательный порт. В этом случае опции \rq{}sdl\rq{} или \rq{}vnc\rq{} не работают. Использование данного режима не рекомендуется. 7.109 +\end{itemize} 7.110 + 7.111 +\subsection{Проверка на поддержку VMX} 7.112 +После загрузки самого Dom0 убедимся в наличии поддержки VMX (процессоры Intel): 7.113 + 7.114 +\begin{verbatim} 7.115 +# xm dmesg | grep VMX 7.116 +(XEN) VMXON is done 7.117 +(XEN) VMXON is done 7.118 +... 7.119 +(XEN) VMXON is done 7.120 +(XEN) VMXON is done 7.121 +(XEN) VMXON is done 7.122 +# 7.123 +\end{verbatim} 7.124 + 7.125 +Если используется процессор AMD: 7.126 + 7.127 +\begin{verbatim} 7.128 +# xm dmesg | grep -i svm 7.129 +(XEN) AMD SVM Extension is enabled for cpu 0. 7.130 +(XEN) AMD SVM Extension is enabled for cpu 1. 7.131 +\end{verbatim} 7.132 + 7.133 +В общем случае: 7.134 + 7.135 +\begin{verbatim} 7.136 +# xm info | grep caps 7.137 +hw_caps : 178bfbff:ebd3fbff:00000000:00000010:00002001:00000000:0000001f 7.138 +xen_caps : xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p 7.139 +\end{verbatim} 7.140 + 7.141 +hvm-3.0-x86\_32 говорит о том, что XEN успешно обнаружил процессор, который поддерживает технологии Intel VT или AMD-V. 7.142 + 7.143 +Если у вас другое сообщение, то проверьте настройки BIOS и задействуйте поддержку аппаратной виртуализации, 7.144 +если она выключена. 7.145 + 7.146 +\subsection{Создание дискового раздела для гостевой системы} 7.147 +Создаем образ диска Xen: 7.148 + 7.149 +\begin{verbatim} 7.150 + # mkdir -p /root/xenimages 7.151 + # cd /root/xenimages 7.152 + # dd if=/dev/zero of=WS128.img bs=1M count=4096 7.153 +\end{verbatim} 7.154 + 7.155 +Также необходимо создать iso-образ системы WinXP -- ServicePack2. В данном случае, разместим его в каталоге \texttt{/root/xenimages}. 7.156 + 7.157 +На основе эталонного файла конфигурации создадим свой собственный: 7.158 + 7.159 +\begin{verbatim} 7.160 + # cat /etc/xen/winXP128 7.161 + kernel = "/usr/lib/xen/boot/hvmloader" 7.162 + builder='hvm' 7.163 + memory = 512 7.164 + name = "WinXP128" 7.165 + vcpus=1 7.166 + pae=0 7.167 + acpi=0 7.168 + apic=0 7.169 + cpus = "" 7.170 + vif = [ 'type=ioemu, bridge=xenbr0' ] 7.171 + disk = [ 7.172 + 'file:/root/xenimages/winXP128.img,ioemu:hda,w', 7.173 + 'file:/root/xenimages/en_winxp_pro_with_sp2.iso,ioemu:hdc:cdrom,r' 7.174 + ] 7.175 + on_poweroff = 'destroy' 7.176 + on_reboot = 'destroy' 7.177 + on_crash = 'destroy' 7.178 + device_model = '/usr/lib/xen/bin/qemu-dm' 7.179 + boot='d' 7.180 + sdl=0 7.181 + vnc=1 7.182 + vncviewer=0 7.183 + stdvga=0 7.184 + serial='pty' 7.185 + ne2000=0 7.186 +\end{verbatim} 7.187 + 7.188 +Обратите внимание на то, что указан параметр boot=\rq{}d\rq{}, что необходимо для установки. Впоследствии его необходимо заменить на \dq{}boot=\rq{}c\rq{}\dq{}. Доступ к гостевому домену будет осуществляться через VNC, использование SDL не предполагается. 7.189 + 7.190 +\subsection{Запуск домена и инсталляция гостевой системы} 7.191 +Начинаем установку и подсоединяемся к домену с помощью VNC -- сразу после создания домена подключаемся к нему с помощью vncviewer. 7.192 + 7.193 +\begin{verbatim} 7.194 +# xm create -c /etc/xen/winXP128 7.195 +Using config file "/etc/xen/winXP128". 7.196 +Started domain WinXP128 7.197 +\end{verbatim} 7.198 + 7.199 +Подключение к VNC: 7.200 + 7.201 +\begin{verbatim} 7.202 +% vncviewer vermont:1 7.203 +\end{verbatim} 7.204 + 7.205 +С установкой могут быть проблемы. Можно попробовать решить проблему так: на экране установки, предлагающем нажать F6 для установки SCSI или RAID контроллера, надо нажать F5 и выбрать пункт \texttt{Standard PC} из предложенного меню. 7.206 + 7.207 +\begin{verbatim} 7.208 +ACPI Multiprocessor PC 7.209 +ACPI Uniprocessor PC 7.210 +Advanced Configuration and Power Interface (ACPI) PC 7.211 +Compaq SystemPro Multiprocessor or 100% Compatible PC 7.212 +MPS Uniprocessor PC 7.213 +MPS Multiprocessor PC 7.214 +Standard PC 7.215 +Standard PC with C-Step i486 7.216 +Other 7.217 +\end{verbatim} 7.218 + 7.219 +После того, как программа установки Windows отформатирует диск и скопирует на него необходимые файлы, выполняется перезагрузка. Согласно нашему файлу конфигурации, виртуальная машина будет закрыта и нам предоставится удачная возможность отредактировать параметр \texttt{boot=\rq{}c\rq{}}, после чего запускаем виртуальную машину и соединяемся с консолью: 7.220 + 7.221 +\begin{verbatim} 7.222 +# xm create -c /etc/xen/winXP128 7.223 +Using config file "/etc/xen/winXP128". 7.224 +Started domain WinXP128 7.225 +\end{verbatim} 7.226 + 7.227 +VNC: 7.228 + 7.229 +\begin{verbatim} 7.230 +% vncviewer vermont:2 7.231 +\end{verbatim} 7.232 + 7.233 +Обратите внимание на параметр \rq{}:2\rq{}, так как изменился XenID (посмотреть его можно командой xm list). Не особо волнуйтесь насчет проблем VNC при работе с мышью. Как только вы завершите установку можно настроить службу терминального доступа и использовать Windows Remote Desktop или rdesktop. Если вы по-прежнему хотите использовать VNC, то обратитесь к этому разделу руководства. 7.234 + 7.235 + 7.236 +\subsection{Вопросы и ответы} 7.237 +Ниже приводятся выдержки из обсуждения \url{http://forum.sysadmins.ru/viewtopic.php?p=7941589\#7941589}, 7.238 +в котором были затронуты многие распространённые вопросы, касающиеся запуска Windows в HVM-домене. 7.239 +Стиль дискуссии сохранён. 7.240 + 7.241 +\textbf{Вопрос: Виртуалка начала бутиться с сидюка/винта, но при этом весь проц съела и черный экран виртуалки. Аптайм виртуалки увеличивается, значит сама виртуалка не повисла, наверно. Есть какие-нибуть идеи?} 7.242 + 7.243 +Да, скорее всего виртуалка нормально работает. 7.244 +вы подключаетесь к экрану виртуалки через VNC, 7.245 +при смене разрешения экрана (а при загрузке винды 7.246 +именно это и происходит) его нужно передергивать, 7.247 +то есть закрывать и подключаться вновь. 7.248 + 7.249 +\textbf{Вопрос: эникей не успевал нажать при буте с сидюка и виртуалка пытлас бутиться с пустого винта. А как вообще указать откуда она бутится?} 7.250 + 7.251 +Да, в соответствии с вашим конфигом система пытается загрузиться с 7.252 +привода CDROM. 7.253 + 7.254 +\begin{itemize} 7.255 +\item boot=\rq{}d\rq{} — загружатсья с CDROM\rq{}а (мнемоническое правило — «с диска D:» ) 7.256 +\item boot=\rq{}c\rq{} — загружатсья с диска (мнемоническое правило — «с диска C:» ) 7.257 +\end{itemize} 7.258 + 7.259 +\textbf{Вопрос: а звук в виртуалке не настраивал? Или хотя-бы через rdesktop?} 7.260 + 7.261 +Звук настраивали и всё работет. 7.262 +Звук действительно слушается именно через rdesktop, 7.263 +впрочем что и касается основной работы (кроме инсталляци) — работать лучше rdesktop. 7.264 + 7.265 +При заходе через \textit{rdesktop}, для того чтобы 7.266 +звук проигрывался локально, используйте ключ \textit{-rsound}: 7.267 +\begin{verbatim} 7.268 + rdesktop -rsound 192.168.1.1 7.269 +\end{verbatim} 7.270 + 7.271 +VNC (а точнее libvnc), с которым скомпилен Xen имеет множество ограничений и его стоит рассматривать как аврийный вариант. А так конечно же заходить на систему через rdesktop, сразу же после того как на ней поднимается стек TCP/IP. (или в крайнейм случае поставить полноценный VNC-сервер внутрь домена с Windows). 7.272 + 7.273 +Если вы всё же используете встроенный VNC, то желательно отключить аппаратное ускорение мыши в Control Panel, или перейти на эмуляцию другого устройства (не мыши, а планшета) в Xen. 7.274 +Иначе у вас будет два курсора, одному из которых будет соответствовать ваша реальная мышь, а вторым виртуальная. 7.275 + 7.276 +\textbf{Вопрос: Как поменять сд-имедж или диск физического привода не перезапуская виртуалки?} 7.277 + 7.278 +Есть два метода. Один для дома для семьи (и он по умолчанию в новых версиях Xen блокируется и его надо явно разрешать) и второй 7.279 +промышленный. 7.280 + 7.281 +Первый: в VNC окне нажать ctr-alt-2 что переключит вас на консоль qemu, дальше использовать eject и прочие команды (я думаю там всё понятно, если не понятно, спрашивайте), а потом когда выполнили свое дело, нажать ctrl-alt-1 (не F1! не путайте!) для возврата в консоль (графическую) гостевой операционной системы (подробнее: (Xen-devel) About change of CD-ROM). 7.282 + 7.283 +Второй: использовать xm block-attach, xm block-detach 7.284 +(подробнее: Xen-block-attach). 7.285 + 7.286 +Второй метод намного более правильный и более секюрный (первый блокируется из соображений безопасности ибо из консоли qemu можно намутить с доменом всё что угодно, и естественно, что это абсолютно не зависит от того, под каким юзером вы вошли в гостевой домен). 7.287 +Кроме того, второй метод позволяет менять не только сидюки, но и винту и сетевышки и всё что вашей душеньке угодно (особенно это касается PV-доменов, ибо у HVM с этим простора всё же поменьше). 7.288 + 7.289 +\textbf{Вопрос: ОЗУ на серваке 4 или больше гигов? А то у меня х86\_64, с 4гигами ядро вешается на такой строчке:\dq{}agpgart: Detected an Intel 965G Chipset.\dq{}, с 3\rq{}мя гигами -- нормально.} 7.290 + 7.291 +Это нормально. 7.292 +Точнее, это не совсем нормально, но это возможно. 7.293 + 7.294 +Можно попробовать следующие решения: 7.295 + 7.296 +\begin{enumerate} 7.297 +\item Использовать параметр ядра agp=off 7.298 +\item Добавить модуль intel\_agp в чёрный список незагружаемых модулей 7.299 +\item Включить в BIOS фичу Memory Remap Feature (если она есть); это должно быть в конфигурации северного моста. 7.300 +\item Использовать AMD 7.301 +\end{enumerate} 7.302 + 7.303 +\textbf{Вопрос: На сервере 8Гб памяти, но больше 4 на гостевую систему в свободной версии xen не выделить(да и незачем особо). Поддержка PAE включена.} 7.304 + 7.305 +Насколько я понимаю, речь идёт о гостевом HVM-домене (потому что если это PV-домен и он не видит >4G, то это странно вдвойне). 7.306 +Вероятно, вы имеете в виду баг \#971, из-за которого дейтвительно нельзя было увидеть больше 4G памяти в HVM домене. 7.307 +Если так, то он уже давно пофикшен и этой проблемы быть не должно. 7.308 + 7.309 +Проверьте, что у вас: 7.310 +\begin{enumerate} 7.311 +\item Если в HVM-домене запускается Linux, ядро под которым запускается HVM-домен, имеет поддержку PAE. (это HVM, поэтому может работать и ядро без PAE на хосте с PAE, но конечно видеть >4G оно при этом не будет) 7.312 +\item Если в HVM-домене запускается Windows, в конфигурации загрузчика (boot.ini) присутствует ключ /PAE 7.313 +\end{enumerate} 7.314 + 7.315 +\subsection{Дополнительная информация} 7.316 +\subsubsection{Описание процесса запуска Windows в домене XenU} 7.317 + 7.318 +\begin{itemize} 7.319 +\item \htmladdnormallinkfoot{Windows XP в Xen}{http://xgu.ru/wiki/Windows\_XP\_в\_Xen} (рус.) 7.320 +\item \htmladdnormallinkfoot{Xen w/ IntelVT->Windows Success Report}{http://lists.xensource.com/archives/html/xen-users/2006-06/msg00452.html} (англ.) 7.321 +\item \htmladdnormallinkfoot{Запуск Windows XP в окружении Xen3}{http://dreamcatcher.ru/docs/xen3\_windows.html} (рус.) 7.322 +\item \htmladdnormallinkfoot{How to Install Windows on Xen 3.0}{http://www.xensource.com/files/xen\_install\_windows.pdf} (англ.) 7.323 +\item \htmladdnormallinkfoot{Building Xen from source on Ubuntu to run Windows}{http://linuxvirtualization.com/articles/2006/08/03/xen-on-ubuntu-for-windows} (англ.) 7.324 +\end{itemize} 7.325 + 7.326 +\subsubsection{Проблемы производительности в виртуализированных машинах Windows} 7.327 +\begin{itemize} 7.328 +\item \htmladdnormallinkfoot{poor harddisk performance HVM domain}{http://lists.xensource.com/archives/html/xen-users/2006-05/msg00097.html} (англ.) 7.329 +\item \htmladdnormallinkfoot{By 2009, there will be three competitive hypervisor architectures ...}{http://www.stanford.edu/class/ee380/Abstracts/060125-stanford0601.pdf} (англ.) 7.330 +\item \htmladdnormallinkfoot{Intel® Virtualization Technology for Directed I/O}{http://www.intel.com/technology/itj/2006/v10i3/2-io/1-abstract.htm} (англ.) 7.331 +\item \htmladdnormallinkfoot{Optimizing Network Virtualization in Xen}{http://www.usenix.org/events//usenix06/tech/menon/menon\_html/index.html}. Aravind Menon, EPFL, Switzerland; Alan L. Cox, Rice university, Houston; Willy Zwaenepoel, EPFL, Switzerland. (англ.) 7.332 +\end{itemize} 7.333 +
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/xen-drbd-install.tex Tue Jul 01 16:16:44 2008 +0300 8.3 @@ -0,0 +1,322 @@ 8.4 +\section{Подготовка кластера виртуализации с помощью xen-drbd-install} 8.5 + 8.6 +\subsection{Использование} 8.7 +\begin{verbatim} 8.8 +Usage: 8.9 + xen-drbd-install <network> <command> (to view) 8.10 + xen-drbd-install <network> <command> | sh -s (to run) 8.11 + 8.12 + <network> is the name of the file, which contains network description 8.13 + 8.14 +Commands: 8.15 + make-drbd 8.16 + make-domains 8.17 + make-bridges 8.18 + make-links 8.19 +\end{verbatim} 8.20 + 8.21 +\begin{itemize} 8.22 +\item \textbf{make-drbd} — подготовка LVM-томов и DRBD-устройств на их основе; 8.23 +\item \textbf{make-domains} — создание файловых систем и их наполнение; 8.24 +\item \textbf{make-bridges} — создание виртуальных мостов в соответствии с топологией сети; 8.25 +\item \textbf{make-links} — создание символических ссылок на файлы блочных устройств DRBD для удобства их использования. 8.26 +\end{itemize} 8.27 + 8.28 +Подкоманда \textit{make-drbd} вызывается при инсталляции на обеих половинах кластера. 8.29 + 8.30 +Подкоманда \textit{make-domains} вызывается при инсталляции только на одной половине кластера. 8.31 + 8.32 +Подкоманды \textit{make-bridges} и \textit{make-links} вызываются каждый раз при загрузке 8.33 +системы. 8.34 + 8.35 +\subsection{Описание топологии} 8.36 +Описание топологии используется как на этапе 8.37 +инсталляции системы, так и при её повседневной работе. 8.38 +Фактически, это единственный конфигурационный файл, 8.39 +описывающий конфигурацию виртуальной системы. 8.40 + 8.41 +Конфигурационный файл имеет синтаксис языка Python. 8.42 +Нужно выполнить присвоение значений 8.43 +определённого типа ряду переменных. 8.44 +Значения могут быть строками, списками или ассоциативными массивами (хэшами). 8.45 + 8.46 +\subsubsection{Основные параметры} 8.47 +\begin{itemize} 8.48 +\item \texttt{node1} — имя узла 1 (строка); 8.49 +\item \texttt{node2} — имя узла 2 (строка); 8.50 +\item \texttt{i\_am} — имя текущего узла; должно быть равно одному из имён \texttt{node1} или \texttt{node2} (строка); 8.51 +\item \texttt{node1\_ip} — IP-адрес узла 1; используется при создании конфигурационного файла DRBD (строка); 8.52 +\item \texttt{node2\_ip} — IP-адрес узла 2 (строка); 8.53 +\item \texttt{domains} — список имён всех доменов (список); 8.54 +\item \texttt{domain\_home} — исходное распределение доменов по узлам (хэш); 8.55 +\item \texttt{kernel} — путь к файлу ядра, которое должно использоваться в гостевых доменах (строка); 8.56 +\item \texttt{ramdisk} — путь к начальному виртуальному диску, который должен использоваться в гостевых доменах (строка); 8.57 +\item \texttt{mem\_table} — распределение оперативной памяти для доменов (хэш); 8.58 +\item \texttt{vcpus\_table} — виртуальные процессоры доменов (хэш); 8.59 +\item \texttt{disk\_table} — дисковые устройства доменов; \textit{подробности ниже} (хэш); 8.60 +\item \texttt{bridges} — виртуальные мосты (список); 8.61 +\item \texttt{vlans} — номера VLAN\rq{}ов, на которые отражаются виртуальные мосты; перечисляются в том порядке, соответствующем порядку мостов (список); 8.62 +\item \texttt{management\_vlan} — управляющий VLAN; через этот VLAN будет осуществляться доступ к узлам (строка); 8.63 +\item \texttt{trunk} — какой физический интерфейс используется для соединения с тегированным каналом коммутатора (строка); 8.64 +\item \texttt{management\_ip} — IP, который должен быть установлен на интерфейсе узла в управляющем VLAN\rq{}е (строка); 8.65 +\item \texttt{management\_netmask} — маска этого интерфейса (строка); 8.66 +\item \texttt{management\_gw} — шлюз по умолчанию для узла (строка); 8.67 +\item \texttt{vbridges\_table} — сетевая конфигурацию доменов; \textit{поробности ниже} (хэш). 8.68 +\end{itemize} 8.69 + 8.70 +Принцип описания всех параметром интуитивно понятен, 8.71 +за исключением двух, требующих некоторых пояснений. 8.72 + 8.73 +\paragraph{Параметр disk\_table} 8.74 +Переменная \texttt{disk\_table} должна содержать ассоциативный массив, 8.75 +где в качестве ключей используются названия доменов, 8.76 +а в качестве их значений — списки. Каждый список описывает 8.77 +какие дисковые устройства принадлежат домену. 8.78 +\begin{verbatim} 8.79 + ['drbd8:mail:2G', 'drbd9:maildir:100G'] 8.80 +\end{verbatim} 8.81 +Описание каждого виртуального дискового устройства состоит 8.82 +из трёх элементов: 8.83 +\begin{enumerate} 8.84 +\item Имени блочного файла базового DRBD-устройства; 8.85 +\item Имени дискового устройства (в частности, это имя используется как название логического тома LVM, поверх которого создаётся DRBD-устройство); 8.86 +\item Размера тома при его создании (впоследствии размер тома можно изменить, но не через конфигурационный файл и вообще без помощи xen-drbd). 8.87 +\end{enumerate} 8.88 +Значение размера используется только на этапе генерации системы. 8.89 +Впослесдствии это поле может принимать любые значения — оно игнорируется. 8.90 + 8.91 +\paragraph{Параметр vbridges\_table} 8.92 + 8.93 +Переменная \texttt{vbridges\_table} должна содержать ассоциативный массив, 8.94 +где в качестве ключей используются названия доменов, 8.95 +а в качестве их значений — списки. Каждый список описывает 8.96 +к каким мостам подключаются сетевые интерфейсы домена. 8.97 + 8.98 +Например, этот список: 8.99 +\begin{verbatim} 8.100 + ['xenbr501', 'xenbr256', 'xenbr257'] 8.101 +\end{verbatim} 8.102 +говорит о том, что у домена будет три сетевых интерфейса; 8.103 +интерфейс \textit{eth0} домена должен быть подключён к мосту \textit{xenbr501}, 8.104 +интерфейс \textit{eth1} — к мосту \textit{xenbr256}, 8.105 +а интерфейс \textit{eth2} — к мосту \textit{xenbr257}. 8.106 + 8.107 +\subsubsection{Инсталляционные параметры} 8.108 + 8.109 +В гостевые домены устанавливается операционная система Debian GNU/Linux. 8.110 +Если вы хотите использовать другую систему, 8.111 +вы можете попробовать модифицировать скрипт самостоятельно или связаться с его разработчиками. 8.112 + 8.113 +Эти параметры используются только при генерировании доменов. 8.114 + 8.115 +\begin{itemize} 8.116 +\item \texttt{ip\_address\_table} — IP-адресов, которые будут установлены на интерфейсах eth0 гостевых доменов (хэш); 8.117 +\item \texttt{ip\_network} — сеть на интерфейсе eth0 гостевого домена (строка); 8.118 +\item \texttt{ip\_netmask} — сетевая маска интерфейса eth0 гостевого домена (строка); 8.119 +\item \texttt{ip\_gateway} — основной шлюз для гостевых доменов (строка); 8.120 +\item \texttt{domain\_name} — домен DNS, который указывается в качестве основного для гостевых доменов (строка); 8.121 +\item \texttt{ip\_nameserver} — DNS-сервер, который должен использоваться в качестве основного в гостевых доменах (строка); 8.122 +\item \texttt{debian\_release} — какой дистрибутив Debian GNU/Linux необходимо использовать при подготовке гостевых доменов (строка); 8.123 +\item \texttt{debian\_mirror} — какой репозиторий Debian GNU/Linux должен использоваться для подготовке гостевых доменов (строка); 8.124 +\item \texttt{apt\_get\_install} — какие пакеты должны быть сразу же установлены во всех гостевые домены (строка); 8.125 +\item \texttt{lvm\_vg\_name} — название группы томов, в которой будут создаваться логические тома для Xen (строка); 8.126 +\item \texttt{lvm\_pv\_names} — физические тома, которые должны быть объединены в группу томов (строка); 8.127 +\item \texttt{lvm\_lv\_drbd\_meta\_name} — название тома LVM, который будет использоваться как метадиск для DRBD (строка); 8.128 +\item \texttt{lvm\_lv\_drbd\_meta\_size} — размер тома LVM, который будет использоваться как метадиск DRBD (строка); 8.129 +\item \texttt{mkfs\_options} — опции mkfs, которые необходимо использовать при создании файловых систем (используется файловая система ext3). 8.130 +\end{itemize} 8.131 + 8.132 +\subsection{Пример описания топологии} 8.133 + 8.134 + 8.135 +\begin{verbatim} 8.136 + node1='debian' 8.137 + node2='mirror' 8.138 + #i_am=node1 8.139 + 8.140 + from socket import gethostname; i_am=gethostname() 8.141 + if i_am != node1 and i_am != node2: 8.142 + raise ValueError, "My hostname (%s) should be equal \ 8.143 + to node1 (%s) or node2 (%s)" % (i_am, node1, node2) 8.144 + 8.145 + ip_address = { 8.146 + node1: '10.0.80.220', 8.147 + node2: '10.0.80.221', 8.148 + } 8.149 + 8.150 + node1_ip=ip_address[node1] 8.151 + node2_ip=ip_address[node2] 8.152 + 8.153 + domains=['gw','igw','dns','vpn','apt','pgw','ldap','mail','uucp','samba',] 8.154 + 8.155 + domain_home = { 8.156 + node1 : ['dns','gw','igw','pgw','ldap','mail','vpn','uucp','apt'], 8.157 + node2 : ['samba'], 8.158 + } 8.159 + 8.160 + kernel = "/boot/vmlinuz-2.6.18-4-xen-686" 8.161 + ramdisk = "/boot/initrd.img-2.6.18-4-xen-686-domU" 8.162 + 8.163 + mem_table={ 8.164 + 'dns' :64, 8.165 + 'gw' :64, 8.166 + 'igw' :128, 8.167 + 'pgw' :64, 8.168 + 'ldap' :64, 8.169 + 'mail' :256, 8.170 + 'samba' :512, 8.171 + 'vpn' :192, 8.172 + 'uucp' :128, 8.173 + 'apt' :128, 8.174 + } 8.175 + 8.176 + vcpus_table={ 8.177 + 'dns' :1, 8.178 + 'gw' :1, 8.179 + 'igw' :1, 8.180 + 'pgw' :1, 8.181 + 'ldap' :1, 8.182 + 'mail' :4, 8.183 + 'samba' :4, 8.184 + 'vpn' :4, 8.185 + 'uucp' :4, 8.186 + 'apt' :2, 8.187 + } 8.188 + 8.189 + disk_table={ 8.190 + 'gw' : ['drbd1:gw:2G'], 8.191 + 'igw' : ['drbd2:igw:2G'], 8.192 + 'dns' : ['drbd3:dns:2G'], 8.193 + 'vpn' : ['drbd4:vpn:2G'], 8.194 + 'apt' : ['drbd5:apt:10G'], 8.195 + 'pgw' : ['drbd6:pgw:2G'], 8.196 + 'ldap' : ['drbd7:ldap:2G'], 8.197 + 'mail' : ['drbd8:mail:2G','drbd9:maildir:100G'], 8.198 + 'uucp' : ['drbd11:uucp:3G'], 8.199 + 'samba' : [ 8.200 + 'drbd12:samba:3G', 8.201 + 'drbd13:samba-home:100G', 8.202 + 'drbd17:samba-profiles:100G' 8.203 + ], 8.204 + } 8.205 + 8.206 + bridges=['tagged0','xenbr1','xenbr256','xenbr257','xenbr3','xenbr4','xenbr501'] 8.207 + vlans= ['tagged', 1, 256, 257, 3, 4, 501 ] 8.208 + management_vlan=1 8.209 + trunk='eth0' 8.210 + management_ip=ip_address[i_am] 8.211 + management_gw='10.0.80.253' 8.212 + 8.213 + vbridges_table={ 8.214 + 'dns' : ['xenbr3'], 8.215 + 'gw' : ['xenbr501', 'xenbr256', 'xenbr257'], 8.216 + 'igw' : ['tagged0','xenbr3'], 8.217 + 'pgw' : ['xenbr3','xenbr501'], 8.218 + 'ldap' : ['xenbr3'], 8.219 + 'mail' : ['xenbr3'], 8.220 + 'samba' : ['tagged0', 'xenbr3'], 8.221 + 'vpn' : ['xenbr3'], 8.222 + 'apt' : ['xenbr3'], 8.223 + 'uucp' : ['xenbr3'], 8.224 + } 8.225 + 8.226 + # FOR INSTALLATION ONLY 8.227 + 8.228 + ip_network="10.20.30" 8.229 + ip_netmask="255.255.255.224" 8.230 + domain_name="crimea.example.com" 8.231 + ip_nameserver="10.20.30.4" 8.232 + ip_gateway="10.20.30.6" 8.233 + 8.234 + ip_address_table={ 8.235 + "dns" :"10.20.30.4", 8.236 + "gw" :"10.20.30.254", 8.237 + "igw" :"10.20.30.3", 8.238 + "pgw" :"10.20.30.6", 8.239 + "ldap" :"10.20.30.11", 8.240 + "mail" :"10.20.30.9", 8.241 + "samba" :"10.20.30.1", 8.242 + "vpn" :"10.20.30.5", 8.243 + "apt" :"10.20.30.7", 8.244 + "uucp" :"10.20.30.16", 8.245 + "jabber":"10.20.30.12", 8.246 + 8.247 + } 8.248 + 8.249 + debian_release="lenny" 8.250 + debian_mirror="http://debian.org.ua/debian/" 8.251 + apt_get_install="less tcpdump dnsutils vim ntp screen snmpd libc6-xen openssh-server" 8.252 + 8.253 + lvm_vg_name="TURBO" 8.254 + lvm_pv_names="/dev/md2" 8.255 + lvm_lv_drbd_meta_name="meta" 8.256 + lvm_lv_drbd_meta_size="5G" 8.257 + mkfs_options="-m1" 8.258 +\end{verbatim} 8.259 + 8.260 +\subsection{Пример использования} 8.261 +Создаём файл с описанием топологии: 8.262 +\begin{verbatim} 8.263 + %# vi topology1.py 8.264 +\end{verbatim} 8.265 + 8.266 +Проверяем, что топология была распознана верно: 8.267 +\begin{verbatim} 8.268 + %# make-drbd-install topology1 make-drbd | less 8.269 +\end{verbatim} 8.270 + 8.271 +Если ошибок не обнаружено, 8.272 +выполняем 8.273 +\begin{verbatim} 8.274 + %# make-drbd-install topology1 make-drbd | sh -s 8.275 +\end{verbatim} 8.276 + 8.277 +Аналогичным образом выполняем команду 8.278 +на втором узле кластера: 8.279 +\begin{verbatim} 8.280 + %# make-drbd-install topology1 make-drbd 8.281 +\end{verbatim} 8.282 + 8.283 +В результате на обоих узлах: 8.284 +\begin{enumerate} 8.285 +\item Настраивается система LVM (физические тома, группы томов, логические тома); 8.286 +\item Создаётся конфигурационный файл DRBD; 8.287 +\item Поверх одного из логических томов создаётся мета-диск для DRBD-устройств; 8.288 +\item Поверх логических томов LVM создаются DRBD-устройства. 8.289 +\end{enumerate} 8.290 + 8.291 +\subsubsection{Создание и заполнение файловых систем доменов} 8.292 +Теперь нужно наполнить созданные разделы. 8.293 + 8.294 +Наполнение выполняется только на одном из узлов кластера. 8.295 +Второй получает все данные автоматически с помощью DRBD. 8.296 + 8.297 +Проверьте что генерируется правильный скрипт: 8.298 + 8.299 +\begin{verbatim} 8.300 +%# make-drbd-install topology1 make-domains | less 8.301 +\end{verbatim} 8.302 + 8.303 +Если всё в порядке, можно его выполнить: 8.304 + 8.305 +\begin{verbatim} 8.306 +%# make-drbd-install topology1 make-domains | sh -s 8.307 +\end{verbatim} 8.308 + 8.309 +В результате выполнения будут: 8.310 +\begin{itemize} 8.311 +\item созданы файловые системы доменов; 8.312 +\item файловые системы доменов смонтированы; 8.313 +\item выполнится наполнение файловых систем (с помощью debootstrap); 8.314 +\item конфигурационные файлы внутри файловых систем (\texttt{/etc/fstab}, \texttt{/etc/network} и т.д.) модфицированы в соответствии с заданными в описании топологии значениями; 8.315 +\item файловые системы доменов размонтированы. 8.316 +\end{itemize} 8.317 + 8.318 +Теперь в системе есть LVM-тома отформатированные и наполненные образами виртуальных систем. 8.319 +Тома синхронизируются между узлами с помощью DRBD. 8.320 + 8.321 +\subsection{Дополнительная информация} 8.322 +\begin{itemize} 8.323 +\item \htmladdnormallinkfoot{xen-drbd-install}{http://xgu.ru/wiki/xen-drbd-install} (рус.) 8.324 +\end{itemize} 8.325 +
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 9.2 +++ b/xen-drbd.tex Tue Jul 01 16:16:44 2008 +0300 9.3 @@ -0,0 +1,236 @@ 9.4 +\section{Управление кластером виртуализации с помощью xen-drbd} 9.5 + 9.6 +\subsection{Подготовительные процедуры} 9.7 +\subsubsection{Развёртывание системы с помощью xen-drbd-install} 9.8 +Система должна быть развёрнута вручную, 9.9 +с помощью скрипта xen-drbd-install 9.10 +или каким-то другим способом. 9.11 + 9.12 +\begin{itemize} 9.13 +\item Должен быть поднят и работать DRBD; 9.14 +\item Должны быть подготовлены файловые системы доменов Xen. 9.15 +\end{itemize} 9.16 + 9.17 +\subsubsection{Копирование файла топологии} 9.18 +Файл топологии должен присутствовать на обеих машинах. 9.19 + 9.20 +Не забудьте изменить на втором узле значение переменной \textit{i\_am}. 9.21 +Если вы используете функцию \texttt{gethostname()} 9.22 +для определения собственного имени, обязательно убедитесь 9.23 +что имя соответствует тому, которое указано в 9.24 +переменных \texttt{node1} и \texttt{node2}. 9.25 + 9.26 +\subsubsection{Инсталляция ключей SSH} 9.27 +Узлы, входящие в кластер, должны 9.28 +знать друг о друге, видеть друга друга 9.29 +и доверять друг другу. 9.30 + 9.31 +Для этого необходимо чтобы: 9.32 + 9.33 +\begin{itemize} 9.34 +\item имена узлов (в том виде в каком они указаны в конфигурационном файле топологии) преобразовывались в адреса как на одном узле, так и на втором; 9.35 +\item между узлами существовала связь на IP-уровне (ходил пинг); 9.36 +\item на обеих системах работали SSH-серверы; 9.37 +\item для беспарольной аутентификации на каждом узле были сгенерированы ключи и на противоположный узел была проинсталлирована их открытая часть (или настроение другое средство беспарольной аутентификации). 9.38 +\end{itemize} 9.39 + 9.40 +Пример последовательности команд для создания 9.41 +и инсталляции SSH-ключей. 9.42 +\begin{verbatim} 9.43 +%# ssh-keygen -t dsa 9.44 +%# cat ~/.ssh/id_dsa.pub \ 9.45 + | ssh mirror \ 9.46 + 'mkdir ~/.ssh/; cat >> ~/.ssh/authorized_keys; chmod 644 ~/.ssh/authorized_keys' 9.47 +\end{verbatim} 9.48 + 9.49 +\subsection{Запуск системы} 9.50 +Будем считать, что наша топология называется 9.51 +\textit{topology}. 9.52 +Необходимо чтобы файл с названием \texttt{topology.py} 9.53 +присутствовал в каталоге \texttt{/etc/xen/} 9.54 +на обоих узлах кластера. 9.55 + 9.56 +Сейчас имя текущей топологии указывается прямо в теле скрипта 9.57 +\texttt{xen-drbd.py}. Укажите там имя вашей топологии. 9.58 +(Название топологии в будущих топологиях будет настраиваемым без правки кода.) 9.59 + 9.60 +\subsubsection{Создание ссылок} 9.61 +Создание ссылок в каталоге \texttt{/dev/drbd}. 9.62 + 9.63 +Посмотреть, какие ссылки будут создаваться: 9.64 + 9.65 +\begin{verbatim} 9.66 +%# xen-drbd-install topology make-links 9.67 +\end{verbatim} 9.68 + 9.69 +Создать ссылки: 9.70 + 9.71 +\begin{verbatim} 9.72 +%# xen-drbd-install topology make-links | sh -s 9.73 +\end{verbatim} 9.74 + 9.75 +Эта операция выполняется скриптом 9.76 +\texttt{/etc/init.d/xen-drbd}. 9.77 + 9.78 +\subsubsection{Создание виртуальных мостов и настройка сети} 9.79 +Посмотреть, какие мосты будут создаваться и как: 9.80 + 9.81 +\begin{verbatim} 9.82 +%# xen-drbd-install topology make-bridges 9.83 +\end{verbatim} 9.84 + 9.85 +Если вы используете привязку мостов к реальным 9.86 +интерфейсам, то будьте осторожны при создании реальной конфигурации, 9.87 +потому что вы можете потерять связь с системой. 9.88 + 9.89 +Создать мосты: 9.90 + 9.91 +\begin{verbatim} 9.92 +%# xen-drbd-install topology make-bridges | sh -s 9.93 +\end{verbatim} 9.94 + 9.95 +Эта операция выполняется скриптом 9.96 +\texttt{/etc/xen/scripts/network-xen-drbd}. 9.97 + 9.98 +Эти операции должны быть добавлены в загрузку. 9.99 + 9.100 +\subsection{xen-drbd} 9.101 +В выполнении операции всегда принимают 9.102 +участие два узла. 9.103 +При старте домена проверяется, 9.104 +работает ли этот домен на втором узле. 9.105 +Если работает, старт не выполняется. 9.106 + 9.107 +Терминология: 9.108 +\begin{itemize} 9.109 +\item \textit{этот узел} — узел на котором выполняется запуск команды 9.110 +\item \textit{второй узел} — второй узел в связке, противоположный тому, на котором был сделан запуск 9.111 +\item \textit{домены, закреплённые за узлом} — домены, которые по умолчанию должны запускаться на этом узле. Распределение доменов по узлам определяется переменной \textit{domain\_home} файла описания топологии 9.112 +\end{itemize} 9.113 + 9.114 +Запуск доменов: 9.115 + 9.116 +\begin{itemize} 9.117 +\item \textbf{start} \textit{domain} — запустить домен \textit{domain}; 9.118 +\item \textbf{start-all} — запустить все домены на этом узле (за исключением тех, которые уже работают); 9.119 +\item \textbf{start-my-domains} — запустить на этом узле только его домены (в отличие от подкоманды \textit{start-all}, домены закреплённые за вторым узлом не запускаются). 9.120 +\end{itemize} 9.121 + 9.122 +Миграция доменов: 9.123 + 9.124 +\begin{itemize} 9.125 +\item \textbf{migrate-out} \textit{domain} — выполнить миграцию домена \textit{domain} на второй узел; 9.126 +\item \textbf{migrate-in} \textit{domain} — выполнить миграцию домена \textit{domain} на этот узел со второго узла; 9.127 +\item \textbf{migrate-all-out} — выполнить миграцию всех доменов \textit{на второй узел}; 9.128 +\item \textbf{migrate-all-in} — выполнить миграцию всех доменов \textit{на этот узел} со второго узла; 9.129 +\item \textbf{migrate-my-domains-home} — выполнить миграцию \textit{всех доменов, закреплённых за этим узлом,} со второго узла на текущий узел; 9.130 +\item \textbf{migrate-and-start-my-domains} — выполнить миграцию всех доменов, закреплённых за этим узлом, со второго узла на текущий узел, и \textit{запустить недостающие} (только на этом узле, на втором запуск не выполняется); 9.131 +\item \textbf{migrate-and-start-all} — выполнить миграцию всех доменов по свои местам и запустить недостающие домены на своих местах (операция выполняется одинаково с обоими узлами; на каком из узлов она была вызвана, определяет только порядок старта — сначала домены запускаются на узле, на котором была вызвана команда). 9.132 +\end{itemize} 9.133 + 9.134 +\subsection{Стартовые скрипты xen-drbd} 9.135 +Выше мы вручную делали подготовительные операции: создание ссылок и создание мостов. 9.136 +Эти операции должны выполняться каждый раз при загрузке системы. 9.137 + 9.138 +Также при старте системы должны запускаться домены. 9.139 +А при останове — мигрировать на другой узел кластера или останавлииваться. 9.140 + 9.141 +Эти операции выполняются с помощью специальных стартовых скриптов: 9.142 + 9.143 +\begin{itemize} 9.144 +\item \texttt{/etc/init.d/xen-drbd} — стартовый скрипт xen-drbd, выполняющий подготовку системы и запуск/миграцию недостающих доменов 9.145 +\item \texttt{/etc/xen/scripts/network-xen-drbd} — стартовый скрипт, выполняющий создание и настройку сетевых мостов 9.146 +\end{itemize} 9.147 + 9.148 +\subsubsection{Настройка сети при запуске} 9.149 +Настройку сети xen-drbd можно вызывать из файла 9.150 +\texttt{/etc/network/interfaces}: 9.151 + 9.152 +\begin{verbatim} 9.153 +# The primary network interface 9.154 +iface eth0 inet manual 9.155 + up /etc/xen/scripts/network-xen-drbd start 9.156 +\end{verbatim} 9.157 + 9.158 +\subsubsection{Вызов xen-drbd при загрузке} 9.159 +Стартовые скрипты создаются автоматически при инсталляции. 9.160 + 9.161 +Для загрузки скрипты просто включаются в 9.162 +иерархию rc.d. 9.163 +Для дистрибутива Debian GNU/Linux: 9.164 + 9.165 +\begin{verbatim} 9.166 +%# update-rc.d xend stop 95 0 1 6 . start 05 2 3 4 5 . 9.167 +\end{verbatim} 9.168 + 9.169 +Конфигурация скрипта \texttt{/etc/init.d/xen-drbd} 9.170 +находится в файле \texttt{/etc/default/xen-drbd}. 9.171 + 9.172 +\subsubsection{Конфигурационные файлы стартовых скриптов} 9.173 +Конфигурация стартовых скриптов находится в файле: 9.174 +\begin{verbatim} 9.175 + /etc/default/xen-drbd 9.176 +\end{verbatim} 9.177 + 9.178 +Пример файла: 9.179 + 9.180 +\begin{verbatim} 9.181 +XEN_DRBD_PATH='/usr/local/sbin' 9.182 +TOPOLOGY_NAME='topology' 9.183 +START_ACTION=nothing 9.184 +STOP_ACTION=nothing 9.185 +\end{verbatim} 9.186 + 9.187 +Назначение переменных: 9.188 +\begin{itemize} 9.189 +\item \textit{XEN\_DRBD\_PATH} — путь к каталогу, куда установлен xen-drbd; 9.190 +\item \textit{TOPOLOGY\_NAME} — имя топологии; 9.191 +\item \textit{START\_ACTION} — действие xen-drbd, которое нужно выполнять при старте системы; 9.192 +\item \textit{STOP\_ACTION} — действий xen-drbd, которое нужно выполнять при останове системы. 9.193 +\end{itemize} 9.194 + 9.195 +В качестве действи \textit{START\_ACTION} и \textit{STOP\_ACTION} указываются подкоманды \textit{xen-drbd}. 9.196 +Например: 9.197 + 9.198 +\begin{verbatim} 9.199 +START_ACTION=migrate-and-start-all 9.200 +STOP_ACTION=migrate-all-out 9.201 +\end{verbatim} 9.202 + 9.203 +В этом случае при остановке узла домены 9.204 +мигрируют на второй узел, а при запуске узла 9.205 +домены возвращаются на место — на тот узел, 9.206 +за которым они закреплены. 9.207 +Если какого-то домена после миграции нет 9.208 +(например, он был потушен на втором узле), 9.209 +то он стартует заново. 9.210 + 9.211 +Таким образом, когда старт узла завершится, 9.212 +на обоих узлах в совокупности должны работать все домены. 9.213 + 9.214 +\subsection{Нестандартные ситуации} 9.215 +\subsubsection{Потеряна связь между узлами} 9.216 +Если в момент запуска домена второй узел 9.217 +не виден, домен стартовать не будет. 9.218 + 9.219 +Сейчас сообщение об ошибке выглядит так: 9.220 + 9.221 +\begin{verbatim} 9.222 +# xen-drbd.py start samba 9.223 +Traceback (most recent call last): 9.224 + File "/usr/local/sbin/xen-drbd.py", line 245, in ? 9.225 + start_domain(domain) 9.226 + File "/usr/local/sbin/xen-drbd.py", line 114, in start_domain 9.227 + if (get_domain_id(domain,he_is) != -1): 9.228 + File "/usr/local/sbin/xen-drbd.py", line 87, in get_domain_id 9.229 + res = int(res) 9.230 +ValueError: invalid literal for int(): 9.231 + ssh: connect to host mirror port 22: No route to host 9.232 +\end{verbatim} 9.233 + 9.234 + 9.235 +\subsection{Дополнительная информация} 9.236 +\begin{itemize} 9.237 +\item \htmladdnormallinkfoot{xen-drbd}{http://xgu.ru/wiki/xen-drbd} (рус.) 9.238 +\end{itemize} 9.239 +
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 10.2 +++ b/xen.tex Tue Jul 01 16:16:44 2008 +0300 10.3 @@ -0,0 +1,612 @@ 10.4 +\section{Xen} 10.5 + 10.6 + 10.7 +\textbf{Xen} — это монитор виртуальных машин (VMM, Virtual Machine Monitor) или гипервизор (hypervisor) с поддержкой паравиртуализации (para-virtualization) для процессоров x86 архитектуры, распространяющийся с открытым исходным кодом (opensource). Xen может организовать совместное безопасное исполнение нескольких виртуальных машин на одной физической системе с производительностью близкой к непосредственной (native). 10.8 + 10.9 +Xen обладает функциональностью ПО корпоративного уровня; в нём, в частности, обеспечивается: 10.10 +\begin{itemize} 10.11 +\item Производительность виртуальных машин близкая к производительности при непосредственном исполнении на железе; 10.12 +\item Возможность живой миграции работающих виртуальных машин между хостами; 10.13 +\item Поддержка до 32 виртуальных процессоров на одну гостевую машину с возможностью горячего добавления (hotplug) процессоров; 10.14 +\item Поддержка платформ x86/32, x86/32 с PAE и x86/64; 10.15 +\item Поддержка аппаратной виртуализации для запуска немодифицированных операционных систем (включая Microsoft Windows); 10.16 +\item Отличная поддержка оборудования (поддерживаются практически все драйверы устройств Linux). 10.17 +\end{itemize} 10.18 + 10.19 +\subsection{Что это} 10.20 +\subsubsection{Что может виртуализация} 10.21 +\begin{enumerate} 10.22 +\item Запуск множества операционных систем одновременно 10.23 +\item Гарантированная изоляция ОС друг от друга 10.24 +\item Возможность гибкого разделения ресурсов между машинами 10.25 +\end{enumerate} 10.26 + 10.27 +\subsubsection{Зачем это надо} 10.28 + 10.29 +\subsubsection{Примеры использования} 10.30 +Список примеров не полный. 10.31 + 10.32 +Консолидация серверов хостинг-провайдеров: 10.33 +\begin{itemize} 10.34 +\item Одна виртуальная машина на пользователя; 10.35 +\item Динамическое создание виртуальных машин; 10.36 +\item Миграция VM в пределах кластера; 10.37 +\item Плавный апгрейд критических серверов. 10.38 +\end{itemize} 10.39 + 10.40 +\subsection{Виртуализация и паравиртуализация} 10.41 +Принципы действия виртуальных машин/эмуляторов/сред ограниченного исполнения: 10.42 + 10.43 +\begin{itemize} 10.44 +\item \textbf{интерпретация} и \textbf{динамическая рекомпиляция} -- Bochs -- PearPC -- QEMU -- VirtualPC for MAC; 10.45 +\item \textbf{виртуализация на уровне ОС} -- Jail -- Linux-VServer -- OpenVZ -- Virtuozzo -- Zones; 10.46 +\item \textbf{виртуализация} -- VMware -- VirtualPC -- Virtual Server 2005 -- QEMU с модулем kqemu; 10.47 +\item \textbf{паравиртуализация} и \textbf{портирование} -- Xen -- UML . 10.48 +\end{itemize} 10.49 + 10.50 +Идеальная виртуальная среда абсолютно прозрачна 10.51 +для гостевых систем. 10.52 +Ключевые особенности виртуализации: 10.53 +\begin{itemize} 10.54 +\item Общие принципы построения мейнфреймов 10.55 +\item Практически невозможно для процессоров семейства i386 10.56 +\item Запуск немодифицированных ОС выполняется сложно 10.57 +\begin{itemize} 10.58 +\item Перехват привилегированных вызовов 10.59 +\item Динамическое изменение кода 10.60 +\end{itemize} 10.61 +\item В результате в некоторых случаях производительность страдает. 10.62 +\end{itemize} 10.63 + 10.64 +Xen не скрывает себя от гостевых ОС. 10.65 +Наоборот, они должны быть подготовлены к работе с этой системой. 10.66 +Для этого выполняется: 10.67 +\begin{itemize} 10.68 +\item Портирование операционной системы для работы с Xen 10.69 +\item Гостевым операционным система даётся возможность использования драйверов хост-системы, но только под её присмотром. 10.70 +\end{itemize} 10.71 + 10.72 +В настоящий момент модифицированный код гостевых ОС 10.73 +доступен для Linux и NetBSD. Ведётся работа по портированию 10.74 +FreeBSD, OpenSolaris и Plan9. 10.75 + 10.76 +Xen полностью интегрирован с Linux: 10.77 +\begin{itemize} 10.78 +\item Существует отдельная архитектура ядра (ARCH=xen) 10.79 +\item Xen работает как гипервизор 10.80 +\item Ядро обращается к гипервизору для получения ресурсов 10.81 +\item Гипервизор использует драйверы Linux. 10.82 +\end{itemize} 10.83 + 10.84 +\subsubsection{Дополнительная информация} 10.85 +\begin{itemize} 10.86 +\item http://en.wikipedia.org/wiki/Virtualization 10.87 +\item http://en.wikipedia.org/wiki/X86\_virtualization 10.88 +\item Технологии виртуализации: вчера, сегодня, завтра -- статья Сергея Озерова и Александра Карабуто в журнале \dq{}Экспресс Электроника\dq{} 10.89 +\item http://www.xensource.com/xen/xen/index.html 10.90 +\item http://en.wikipedia.org/wiki/Xen 10.91 +\item Paravirtualization is a Dead-End Approach -- критика паравиртуализации в блоге VirtualIron 10.92 +\end{itemize} 10.93 + 10.94 +\subsection{Сравнение с другими виртуальными машинами} 10.95 +Сравнение виртуальных машин, сред ограниченного исполнения 10.96 +и эмуляторов производится на странице \textit{Сравнение виртуальных машин}. 10.97 + 10.98 +\subsection{Производительность} 10.99 +<dl><dd> \textit{Основная страница: \textbf{Производительность Xen}} 10.100 +</dd></dl> 10.101 + 10.102 +Портирование ОС на Xen позволяет добиться большей эффективности 10.103 +в сравнении с виртуализацией, основанной на перехвате 10.104 +несработавших инструкций, или тем более использовании интерпретатора 10.105 +или JIT-компилятора кода гостевой ОС. 10.106 +Минусом этого подхода является необходимость в портировании ОС, 10.107 +но опыт показал, что это можно сделать довольно быстро. 10.108 + 10.109 +Операционные системы, работающие в Xen, исполняются 10.110 +с уровнем привилегий 1 вместо 0, который зарезервирован для Xen. 10.111 +В результате гостевые ОС не могут использовать привилегированные 10.112 +инструкции для запрета/разрешения прерываний, изменения таблиц адресов 10.113 +и т.д. Вместо этого они должны выполнять соответствующее обращение (hypercall) 10.114 +к гипервизору Xen с просьбой выполнить необходимую операцию. 10.115 +При правильной разработке интерфейса между виртуальными машинами и гипервизором, 10.116 +накладные расходы на выполнение операций малы. 10.117 + 10.118 +Вместо того чтобы пытаться эмулировать существующее аппаратное обеспечение, 10.119 +Xen предоставляет специально подготовленные блочные устройства 10.120 +и сетевые интерфейсы гостевых операционным системам, и требуя 10.121 +соответствующий драйвер. 10.122 +Преимущество такого подхода заключается в том, что производительность 10.123 +гостевой ОС практически не страдает: 10.124 +например, скорость передачи данных по Gigabit Ethernet каналу 10.125 +из машины, работающей под Xen, такая же как и у родной операционной системы. 10.126 + 10.127 +Группа разработчиков Xen провела исследование производительности этой системы. 10.128 +Для этого система с ядром Linux 2.4.22 была запущена в различных режимах 10.129 +и в ней выполнялся ряд тестов. 10.130 +Проводилось сравнение системы работающей на реальной машине, 10.131 +с работой в виртуальных машинах с такими системами виртуализации: 10.132 +\begin{itemize} 10.133 +\item VMware workstation 3.2; 10.134 +\item User Mode Linux (UML). 10.135 +\end{itemize} 10.136 + 10.137 + 10.138 +Тесты, на которых проводилось сравнение: 10.139 +\begin{itemize} 10.140 +\item Набор тестов SPEC CPU2000 Integer; 10.141 +\item Полная сборка Linux 2.4.22 в конфигурации по умолчанию на локальном диске; 10.142 +\item PostgreSQL выполняющая тест OSDB Information Retrieval (IR); 10.143 +\item PostgreSQL выполняющая тест OSDB On-Line Transaction Processing (OLTP); 10.144 +\item Однопользовательский тест файловой системы dbench 2.0; 10.145 +\item Тест SPWCWeb99 для Web-сервера Apache 1.3.27 с модулем `mod\_specweb99\rq{} для динамического создания контента. 10.146 +\end{itemize} 10.147 + 10.148 +На рисунке изображены уровни производительности 10.149 +для Linux (L), Xen/Linux (X), VMware Workstation 3.2 (V) 10.150 +и User Mode Linux (U). 10.151 + 10.152 +Тест SPEC INT2000 наиболее требователен к процессору CPU, но практически не выполняет 10.153 +ввода/вывода и требует минимум работы от самой операционной системы, 10.154 +и вследствие этого все три техники виртуализации показали практически одинаковые 10.155 +хорошие результаты. 10.156 + 10.157 +В других тестах, наоборот, требуется большее участие ОС, больше переключений контекста 10.158 +и больше операций по созданию процессов. 10.159 +Производительность Linux внутри Xen практически не отличается 10.160 +от производительности Linux, работающего непосредственно на железе. 10.161 +В наихудшем случае, при выполнении теста OSDB-IR, отставание составило 8\%. 10.162 +При использовании других техник виртуализации, 10.163 +результаты не были настолько хорошими. В некоторых случаях 10.164 +замедление составило до 88\%. 10.165 +В работе \url{http://www.cl.cam.ac.uk/netos/papers/2003-xensosp.pdf} 10.166 +приведены дополнительные результаты, в частности касающиеся одновременного 10.167 +запуска большого количества виртуальных машин. 10.168 + 10.169 +Представленные выше результаты были проверены и подтверждены 10.170 +независимой группой Кларксоновского Университета (Clarkson University). 10.171 +С результатами исследования, проведённого этой группой, можно ознакомиться 10.172 +в работе \dq{}Xen and the Art of Repeated Research\dq{}, 10.173 +которая также включает результаты сравнения производительности Xen 10.174 +и машины IBM zServer. 10.175 + 10.176 +\subsubsection{Дополнительная информация} 10.177 +\begin{itemize} 10.178 +\item Xen Performance -- статья группы разработчиков Xen, сравнивающая производительность Linux, Xen, UML, VMWare 10.179 +\item Xen and the Art of Virtualization -- статья группы разработчиков Xen, в которой описывается архитектура Xen 10.180 +\item Xen and the Art of Repeated Research -- результаты исследования производительности, выполненного независимой группой Кларксоновского Университета 10.181 +\end{itemize} 10.182 + 10.183 +\subsection{Новые возможности Xen} 10.184 +<dl><dd> \textit{Основная страница: \textbf{Новости Xen}} 10.185 +</dd></dl> 10.186 + 10.187 +Текущяя версия: \textit{Xen 3.2.0}, релиз сделан 16 января 2008 года. 10.188 + 10.189 +\subsubsection{Возможности Xen 3} 10.190 +Xen 3 значительно отличается от своего предшественника Xen 2. 10.191 +Повышены устойчивость к сбоям, безопасность, производительность. 10.192 +Появился ряд принципиально новых возможностей. 10.193 + 10.194 +Наиболее значимые изменения: 10.195 +\begin{itemize} 10.196 +\item Intel (Physical Addressing Extensions) PAE для поддержки 32битных серверов с >4G ОЗУ 10.197 +\item Поддержка x86/64 (Intel EM64T, AMD Opteron) 10.198 +\item Поддержка Intel VT-x для запуска немодифицированных гостевых ОС (Windows XP/2003, немодифицированный Linux) 10.199 +\item Усовершенствованные инструменты управления 10.200 +\item Улучшенная поддержка ACPI 10.201 +\item AGP/DRM графика 10.202 +\end{itemize} 10.203 + 10.204 +Начиная с версии 3.1 появились следующие возможности: 10.205 +\begin{itemize} 10.206 +\item Поддержка XenAPI 1.0 10.207 +\begin{itemize} 10.208 +\item Конфигурационные файлы виртуальных машин в XML; 10.209 +\item Управление жизненным циклом виртуальных машин; 10.210 +\item Безопасная привязка XML-RPC для многих языков 10.211 +\end{itemize} 10.212 +\item Предварительная поддержка save/restore/migrate для HVM-доменов (в частности, Windows); 10.213 +\item Динамическое управление памятью для HVM-доменов; 10.214 +\item Поддержка 32-на-64 паравиртуальных гостевых систем (запуск паравиртуальных систем PAE на 64-битном Xen); 10.215 +\item Поддержка copy-on-write для дисковых устройств blktap. 10.216 +\end{itemize} 10.217 + 10.218 +\subsubsection{Ограничения Xen 2} 10.219 +В предыдущей версии Xen (Xen 2.0) наиболее сильно были заметны следующие недостатки: 10.220 +\begin{itemize} 10.221 +\item Не поддерживалась многопроцессорность в гостевых ОС 10.222 +\item Поддерживалась только архитектура i386; x86\_64 поддерживает только в режиме i386 10.223 +\end{itemize} 10.224 + 10.225 +\subsection{Аппаратные требования} 10.226 +<dl><dd> \textit{Основная страница: \textbf{Аппаратные требования Xen}} 10.227 +</dd></dl> 10.228 + 10.229 +В настоящий момент Xen 10.230 +работает на платформах \textbf{Intel x86} и \textbf{Intel x86\_64} (в режиме совместимости i386) 10.231 +и требует процессора не ниже P6. 10.232 +Выполняется поддержка многопроцессорных машин (в том числе и машин с процессорами с архитектурой Hyper-Threading). 10.233 +В ближайшее время Xen будет работать на процессорах архитектуры IA64. 10.234 +Также ведутся работы по подготовке Xen для работы на процессорах с архитектурой PPC и ARM. 10.235 + 10.236 +Для использования \textit{модифицированных} 10.237 +операционных систем -- подготовленных к использованию в паравиртуальной машине Xen -- никаких дополнительных требований к аппаратному обеспечению 10.238 +компьютера, на котором будут выполняться виртуальные машины, не предъявляется. 10.239 + 10.240 +Использование операционных систем \textit{в неизменном 10.241 +виде} возможно при использовании 10.242 +процессоров с поддержкой виртуализации. 10.243 + 10.244 +\subsection{Поддержка Xen различными операционными системами} 10.245 +<dl><dd> \textit{Основная страница: \textbf{Поддержка Xen операционными системами}} 10.246 +</dd></dl> 10.247 + 10.248 +В домене 0 может использоваться ОС: 10.249 +\begin{itemize} 10.250 +\item Linux 10.251 +\item NetBSD 10.252 +\item OpenSolaris 10.253 +\end{itemize} 10.254 + 10.255 +В паравиртуальном режиме в домене domU работают: 10.256 +\begin{itemize} 10.257 +\item Linux 10.258 +\item NetBSD (без PAE) 10.259 +\item FreeBSD (начиная с 7, без поддержки PAE и с большим количеством ограничений) 10.260 +\item Plan9 (без PAE) 10.261 +\item OpenSolaris (build 44). 10.262 +\end{itemize} 10.263 + 10.264 +В режиме аппаратной виртуализации поддерживаются Windows XP, Windows 2003 Server. 10.265 + 10.266 +\subsection{Инсталляция, конфигурирование и использование Xen} 10.267 +\subsubsection{Как начать?} 10.268 +Для того чтобы попробовать Xen в действии, не нужно много времени. 10.269 +При благоприятных обстоятельствах 10.270 +(вы ясно соображаете, уверенно чувствуете себя в командной строке, 10.271 +у вас хороший канал в Интернет, и вы используете Linux -- обычно эти качества 10.272 +встречаются вместе) 10.273 +вы увидите приглашение гостевой ОС меньше чем через 10.274 +десять минут после того как начнёте экспериментировать. 10.275 + 10.276 +Возможно, вы используете систему, 10.277 +которая уже поддерживает Xen из коробки. 10.278 + 10.279 +Если так, то вы можете получить образ из Интернета, 10.280 +описанным здесь способом. 10.281 + 10.282 +Если ваша система не поддерживает Xen, 10.283 +а вы не хотите сейчас заниматься сборкой и инсталляцией 10.284 +Xen вручную, можно использовать Live CD с Xen. 10.285 +Его образ можно получить здесь. 10.286 + 10.287 +\subsubsection{Инсталляция операционной системы в domU} 10.288 +Существует несколько способов 10.289 +подготовки образа гостевой системы. 10.290 +\begin{enumerate} 10.291 +\item Инсталляция средствами базовой операционной системы 10.292 +\item Использование готового образа 10.293 +\item Использование инсталлятора гостевой ОС 10.294 +\item Использование диска реальной машины 10.295 +\end{enumerate} 10.296 + 10.297 +\paragraph{Инсталляция средствами базовой операционной системы} 10.298 +Этот способ является основным для Xen. 10.299 + 10.300 +Подготовка образа для использования 10.301 +в качестве дискового раздела в домене domU 10.302 +состоит из двух этапов: 10.303 +\begin{enumerate} 10.304 +\item Создание собственно файла/раздела образа и файловой системы внутри него 10.305 +\item Наполнение образа операционной системой 10.306 +\end{enumerate} 10.307 + 10.308 +Создание собственно образа выполняется 10.309 +очень просто. 10.310 + 10.311 +\begin{verbatim} 10.312 +# dd if=/dev/zero of=domU-disk.img bs=1024k count=<размер_в_MB> 10.313 +# mkfs.ext3 domU-disk.img 10.314 +\end{verbatim} 10.315 + 10.316 +Затем этот образ монтируется и 10.317 +наполняется. 10.318 + 10.319 +Вот, например, как это можно сделать в Debian GNU/Linux: 10.320 + 10.321 +\begin{verbatim} 10.322 +# mount -o loop domU-disk.img /mnt 10.323 +# debootstrap etch /mnt 10.324 +\end{verbatim} 10.325 + 10.326 +В результате, в каталоге \texttt{/mnt} 10.327 +будет установлена операционная система \textbf{Debian GNU/Linux}, 10.328 +дистрибутив \textbf{etch}. 10.329 + 10.330 +Подробнее процедура инсталляции описана здесь. 10.331 + 10.332 +\paragraph{Использование готового образа} 10.333 +Если вы создаете не первый домен, 10.334 +вы можете взять образ существующего домена за основу. 10.335 +Можно подготовить образцовые домены 10.336 +разного предназначения и при необходимости 10.337 +копировать и дорабатывать их. 10.338 + 10.339 +В Интернете доступно огромное количество образов дисковых 10.340 +разделов, готовых для использования в качестве основных 10.341 +дисковых разделов в пользовательских доменах Xen. 10.342 + 10.343 +В этом случае подготовка дискового раздела сводится 10.344 +к простому выкачиванию файла из сети. 10.345 +После того как образ получен, нужно создать конфигурационный 10.346 +файл домена, в котором указать этот образ в качестве 10.347 +дискового раздела. Затем, стартануть новый домен. 10.348 + 10.349 +Как правило, в комплекте с образом уже есть готовый к использованию 10.350 +конфигурационный файл домена. Можно использовать его, 10.351 +но только перед этим проверить и при необходимости изменить 10.352 +пути в именах файлов, в частности, в имене ядра, 10.353 +и параметры домена -- память, сетевые интерфейсы и другие. 10.354 + 10.355 +Этот способ может использоваться как для экспериментов, 10.356 +так и для создания полноценных гостевых доменов. 10.357 +Готовые образы поддаются доработке и расширению. 10.358 + 10.359 +Подробнее о источниках образов в Сети, 10.360 +смотрите здесь. 10.361 + 10.362 +\paragraph{Использование инсталлятора гостевой операционный системы} 10.363 +Этот способ требует наличия аппаратной виртуализации 10.364 +базовой системой (подробнее здесь) 10.365 +или поддержки архитектуры Xen инсталлятором гостевой ОС. 10.366 +На сегодняшний день список инсталляторов ОС, готовых 10.367 +к использованию в паравиртуальном режиме Xen, пуст. 10.368 + 10.369 +В режиме аппаратной виртуализации все выглядит 10.370 +так же, как и при подготовке обычной виртуальной машины 10.371 +в других системах. 10.372 + 10.373 +Процесс подготовки нового домена состоит из трех этапов: 10.374 +\begin{enumerate} 10.375 +\item Создание конфигурационного файла домена. 10.376 +\item Подготовка пустого образа для дискового раздела гостевого домена. 10.377 +\item Запуск виртуальной машины. 10.378 +\end{enumerate} 10.379 + 10.380 +После того как виртуальная машина стартанёт, 10.381 +будет запущен инсталлятор операционной системы, 10.382 +и дальше инсталляция будет проходить обычным способом. 10.383 + 10.384 +Когда инсталляция будет завершена, необходимо отредактировать 10.385 +конфигурационный файл домена: указать загрузку с диска 10.386 +вместо загрузки с CD. 10.387 + 10.388 +\paragraph{Использование диска реальной машины} 10.389 +Существующую реальную машину можно запускать 10.390 +в виртуализированной среде Xen. 10.391 +(верно и обратное: пользовательский домен Xen 10.392 +можно очень легко превратить в реальную машину; об этом ниже). 10.393 + 10.394 +Это можно сделать следующим образом: 10.395 +\begin{itemize} 10.396 +\item побайтно скопировать дисковые разделы реальной машины в файлы или дисковые разделы Xen-системы; 10.397 +\item переставить диск из реальной машины в Xen-систему. 10.398 +\end{itemize} 10.399 + 10.400 +После чего создать конфигурационный файл домена, 10.401 +в котором указать соответствующие дисковые разделы. 10.402 + 10.403 +При загрузке нового домена нужно использовать не старое ядро системы, 10.404 +а ядро подготовленное для Xen. 10.405 +Поэтому, при необходимости, не забудьте скопировать модули 10.406 +нового ядра на диск гостевой системы: 10.407 + 10.408 +\begin{verbatim} 10.409 +# mount /dev/hdb1 /mnt 10.410 +# cp -r /lib/modules/2.6.16-xenU /mnt/lib/modules 10.411 +\end{verbatim} 10.412 + 10.413 +Здесь: 10.414 +\begin{itemize} 10.415 +\item \textbf{/dev/hdb1} -- корневой дисковый раздел гостевой системы; 10.416 +\item \textbf{2.6.16-xenU} -- точное название ядра, под управлением которого будет работать гостевой домен. 10.417 +\end{itemize} 10.418 + 10.419 +Этот способ, выполненный в обратном направлении, 10.420 +позволяет превращать виртуальные машины Xen в реальные. 10.421 +Для этого нужно: 10.422 +\begin{enumerate} 10.423 +\item Подготовить виртуальную машину Xen на отдельном диске 10.424 +\item Проинсталлировать из реальной системы на диск домена загрузчик 10.425 +\item Установить (но пока не запускать!) в виртуальной системе реальное ядро 10.426 +\item Указать в конфигурационном файле загрузчика в виртуальной системе использовать реальное ядро 10.427 +\item Отредактировать /etc/fstab с учётом того, как диск будет виден в реальной системе 10.428 +\item Вытащить диск и запустить с него реальную систему. 10.429 +\end{enumerate} 10.430 + 10.431 +\subsubsection{Образы domU различных операционных систем} 10.432 +В Интернете доступно большое количество domU-образов 10.433 +различных операционных систем, готовых для использования 10.434 +с Xen. 10.435 + 10.436 +Для того чтобы использовать образ, необходимо: 10.437 +\begin{enumerate} 10.438 +\item Настроить Xen в домене 0 10.439 +\item Получить желаемый образ domU 10.440 +\item Создать конфигурационный файл для новой виртуальной машины, указывающий на полученный образ domU 10.441 +\item Запустить новую виртуальную машину 10.442 +\end{enumerate} 10.443 + 10.444 +\textbf{Linux}: 10.445 +\begin{itemize} 10.446 +\item http://jailtime.org/ 10.447 +\item http://xen-get.org/ 10.448 +\end{itemize} 10.449 + 10.450 +\textbf{FreeBSD}: 10.451 +\begin{itemize} 10.452 +\item http://www.fsmware.com/xenofreebsd/7.0/download/ 10.453 +\end{itemize} 10.454 + 10.455 +\textbf{NetBSD}: 10.456 +\begin{itemize} 10.457 +\item http://www.netbsd.org/Ports/xen/howto.html 10.458 +\end{itemize} 10.459 + 10.460 +\textbf{OpenSolaris}: 10.461 +\begin{itemize} 10.462 +\item http://www.opensolaris.org/os/community/xen/How-To-8-15-06/install/AugDomUs/ 10.463 +\end{itemize} 10.464 + 10.465 +Также существует репозитори образов, 10.466 +предназначенных для непосредственного исполнения процессором. 10.467 +Эти образы можно использовать в Xen в режиме 10.468 +аппаратной виртуализации. 10.469 +\begin{itemize} 10.470 +\item Коллекция образов на Free OS Zoo 10.471 +\end{itemize} 10.472 + 10.473 +\subsubsection{Виртуальная машина Windows XP} 10.474 +<dl><dd>\textit{Основная статья: \textbf{Windows XP в Xen}} 10.475 +</dd></dl> 10.476 + 10.477 +Процедура подготовки Xen-системы для использования в режиме аппаратной виртуализации 10.478 +и последующего запуска ОС Windows XP в виртуальной машине Xen детально 10.479 +описана на странице Windows XP в Xen (использован перевод Михаила Сгибнева). 10.480 + 10.481 +\subsubsection{Виртуализация устройств} 10.482 +\paragraph{Виртуализация дисковых систем} 10.483 +<dl><dd> \textit{Основная статья: \textbf{Блочные устройства в Xen}} 10.484 +</dd></dl> 10.485 + 10.486 +\paragraph{Виртуализация сети} 10.487 +<dl><dd> \textit{Основная статья: \textbf{Сеть в Xen}} 10.488 +</dd></dl> 10.489 + 10.490 +\paragraph{Виртуализация графической карты} 10.491 +\begin{itemize} 10.492 +\item http://www.cs.toronto.edu/~andreslc/xen-gl/ 10.493 +\end{itemize} 10.494 + 10.495 +\subsubsection{Использование Xen} 10.496 +\paragraph{Сохранение и восстановление доменов, миграция и живая миграция} 10.497 +\paragraph{Горячее подключение устройств} 10.498 +<dl><dd> \textit{Основная статья: \textbf{Горячее подключение устройств}} 10.499 +</dd></dl> 10.500 + 10.501 +\paragraph{Распределение ресурсов между виртуальными машинами} 10.502 +<dl><dd> \textit{Основная статья: \textbf{Распределение ресурсов между доменами}} 10.503 +</dd></dl> 10.504 + 10.505 +\subsection{Средства управления и мониторинга виртуальных машин} 10.506 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/8/83/Enomalism.jpg}}\\ \textit{Enomalism -- Web-инструмент для управления работой виртуальных машин}\end{center} 10.507 + 10.508 +<dl><dd> \textit{Основная статья: \textbf{Средства управления Xen}} 10.509 +</dd></dl> 10.510 + 10.511 +Cуществует множество различных 10.512 +средств для управления работой виртуальных машин, 10.513 +в их числе: 10.514 + 10.515 +\begin{itemize} 10.516 +\item \textbf{xm} — встроенное средство, работает в консольном режиме. Наблюдение выполнятся с помощью \textbf{xm top}. 10.517 +\item Enomalism — консоль управления и мониторинга Xen с Web-интерфейсом 10.518 +\item XenMan — программа для управление и мониторинга Xen c графическим интерфейсом пользователя 10.519 +\item virt-manager — программа для управления и мониторинга Xen с графическим интерфейсом пользователя от RedHat 10.520 +\end{itemize} 10.521 + 10.522 +Отдельно стоит отметить библиотеку \textit{libvirt}, которая предоставляет 10.523 +унифицированные механизмы управления не только для управления доменами Xen, 10.524 +но также машинами QEMU и OpenVZ. Программа \textit{virt-manager} построено на основе этой библиотеки. 10.525 + 10.526 +Другие средства управления виртуальными машинами: 10.527 +\begin{itemize} 10.528 +\item http://www.xen-tools.org/ 10.529 +\item https://savannah.cern.ch/projects/vgrid 10.530 +\end{itemize} 10.531 + 10.532 +\subsection{Коммерческие системы виртуализации, основанные на Xen} 10.533 +В настоящий момент, коммерческие системы виртуализации, базирующиеся на Xen, 10.534 +предлагают следующие производители: 10.535 +\begin{itemize} 10.536 +\item XenSource (Citrix) 10.537 +\item VirtualIron 10.538 +\item Novell 10.539 +\item Oracle 10.540 +\item Sun 10.541 +\end{itemize} 10.542 + 10.543 +Как правило, они эти системы отличаются от свободных решений тем что, 10.544 +имеют: 10.545 +\begin{itemize} 10.546 +\item более развитый интерфейс инсталляции и управления виртуальными машинами 10.547 +\item более развитую драйверную поддержку гостевых операционных систем, в частности, как правило, у них есть свои собственные паравиртуальные драйверы (работающие только с конкретной модификацией системы виртуализации) для Windows, которые позволяют существенно ускорить операции ввода/вывода внутри гостевых систем (сейчас ведётся работа на свободными PV-драйверами Xen для Windows, подробнее: Паравиртуальные драйверы Xen для Windows). 10.548 +\end{itemize} 10.549 + 10.550 +\subsection{Коммерческая поддержка и хостинг на Xen} 10.551 +\subsubsection{Коммерческая поддержка решений на Xen} 10.552 +<dl><dd> \textit{Основная страница: \textbf{Коммерческая поддержка Xen}} 10.553 +</dd></dl> 10.554 + 10.555 +\subsubsection{Хостинг на Xen} 10.556 +<dl><dd> \textit{Основная страница: \textbf{Хостинг доменов Xen}} 10.557 +</dd></dl> 10.558 + 10.559 +\subsection{Информационные ресурсы} 10.560 +\subsubsection{Документация} 10.561 +Русскоязычная: 10.562 +\begin{itemize} 10.563 +\item Руководство пользователя Xen 10.564 +\item XenFaq — часто задаваемые вопросы по Xen 10.565 +\item man-страницы: 10.566 +\begin{itemize} 10.567 +\item man xm 10.568 +\item man xmdomain.cfg 10.569 +\end{itemize} 10.570 +\end{itemize} 10.571 + 10.572 +Англоязычная: 10.573 +\begin{itemize} 10.574 +\item The Xen™ virtual machine monitor (англ.) — сборник документации на сайте Кембриджского университета 10.575 +\item Xen users\rq{} manual (англ.) — для пользователей и администраторов 10.576 +\item Xen Interface manual (англ.) — для разработчиков 10.577 +\item Xen Wiki (англ.) 10.578 +\item XenFaq (англ.) 10.579 +\end{itemize} 10.580 + 10.581 +Немецкоязычная: 10.582 +\begin{itemize} 10.583 +\item http://www.pug.org/index.php/Xen-Installation (нем.) 10.584 +\end{itemize} 10.585 + 10.586 +\subsubsection{Другие интернет-ресурсы} 10.587 +\begin{itemize} 10.588 +\item Xen (англ.) и Xen (рус.) на wikipedia.org — статьи о Xen на Wikipedia 10.589 +\end{itemize} 10.590 + 10.591 +\subsubsection{Списки рассылки} 10.592 +Существуют несколько списков рассылки, посвящёных Xen. Наиболее важные из них перечислены ниже. 10.593 +Официальная страница списков рассылки и информация о подписке на них находится здесь: 10.594 +<dl><dd> http://lists.xensource.com/ 10.595 +</dd></dl> 10.596 +Поиск в архивах (и некоторый статистический анализ) 10.597 +можно выполнять с помощью MarkMail: 10.598 +<dl><dd> http://xen.markmail.org/ 10.599 +</dd></dl> 10.600 + 10.601 +<dl><dt> xen-devel@lists.xensource.com 10.602 +</dt><dd> Обсуждение разработки и ошибок. Подписка здесь: http://lists.xensource.com/xen-devel 10.603 +</dd><dt> xen-users@lists.xensource.com 10.604 +</dt><dd> Обсуждение инсталляции и использования. Подписка здесь: http://lists.xensource.com/xen-users 10.605 +</dd><dt> xen-announce@lists.xensource.com 10.606 +</dt><dd> Используется только для анонсов. Подписка здесь: http://lists.xensource.com/xen-announce 10.607 +</dd><dt> xen-changelog@lists.xensource.com 10.608 +</dt><dd> Лента Changelog для веток unstable и 2.0 -- ориентирован на разработчиков. Подписка здесь: http://lists.xensource.com/xen-changelog 10.609 +</dd></dl> 10.610 + 10.611 +\subsubsection{Книги} 10.612 +\begin{itemize} 10.613 +\item The Definitive Guide to the Xen Hypervisor (англ.) — наиболее серьёзная книга о \textit{внутреннем устройстве Xen} 10.614 +\end{itemize} 10.615 +
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 11.2 +++ b/xen/block-attach.tex Tue Jul 01 16:16:44 2008 +0300 11.3 @@ -0,0 +1,102 @@ 11.4 +\section{Подключениё устройств} 11.5 + 11.6 +\textbf{Как выполнять горячее подключение блочных устройств в Xen.}<br/> 11.7 +Перевод и редактирование: Игорь Чубин<br/> 11.8 +Короткая ссылка: http://xgu.ru/wiki/xen/block-attach<br/> 11.9 +Оригинал: \url{http://lists.xensource.com/archives/html/xen-users/2007-03/msg01024.html} 11.10 + 11.11 +Здесь рассматривается как выполнять горячее подключение устройств Xen, 11.12 +и как это может пригодиться при организации резервного копирования 11.13 +данных из доменов domU. 11.14 + 11.15 +\subsection{Горячее подключение устройств} 11.16 +У команды \textit{xm} есть подкоманды \textit{block-attach} и \textit{block-detach}. 11.17 +В man-странице по \textit{xm} рассказывается детальнее об этих подкомандах (надо заметить, что описание подкоманды \textit{block-detach} там не совсем верное). 11.18 + 11.19 +Эти команды, в частности, позволяют подключать/отключать (виртуальные) блочные устройства в domU. Делается это из домена dom0. 11.20 + 11.21 +Например: 11.22 +\begin{verbatim} 11.23 + 11.24 +\end{verbatim} 11.25 + \begin{verbatim} 11.26 + 11.27 +\end{verbatim} 11.28 + 11.29 +Команда \dq{}xm block-list\dq{} показывает список устройств, подключенных к домену. 11.30 +Мы делаем предположение, что последний пункт в списке это последнее 11.31 +добавленное устройство. 11.32 +Это работает, но такое поведение нигде не задокументировано, 11.33 +поэтому оно может измениться. 11.34 +Нам нужно отслеживать block id устройств, поскольку команда \textit{block-detach} требует знания именно id, а не имени устройства или файла. 11.35 + 11.36 +\subsection{Резервное копирование данных домена} 11.37 +После этого создаётся snapshot и подсоединяется к Amanda-серверу. 11.38 +Backup-сервер с помощью fsck выполняет проверку на вновь подключенном устройстве, монтирует его, выполняет резервное копирование, а потом размонтирует его. 11.39 + 11.40 +После этого в домене 0 выполняется команда: \begin{verbatim} 11.41 + block-attach domain-id be-dev fe-dev mode [bedomain-id] 11.42 +\end{verbatim} 11.43 + 11.44 +Здесь описано как выполнять подключение устройств из командной строки. 11.45 +Конечно, это можно делать и скриптами. 11.46 +\begin{verbatim} 11.47 + 11.48 +\end{verbatim} 11.49 +Аналогичным образом можно выполнять горячее подключение сетевых устройств, 11.50 +но это отдельная история. 11.51 + 11.52 +\subsection{Подкоманды xm для работы с блочными устройствами} 11.53 +\subsubsection{block-attach} 11.54 +\begin{verbatim} 11.55 + block-attach domain-id be-dev fe-dev mode [bedomain-id] 11.56 +\end{verbatim} 11.57 + 11.58 +Создать новое виртуальное блочное устройство. 11.59 +В результате выполняется hotplug-событие для гостевого домена. 11.60 + 11.61 +\paragraph{Опции} 11.62 +\begin{itemize} 11.63 +\item \textit{domain-id} -- Номер гостевого домена, к которому будет подключаться устройство. 11.64 +\item \textit{be-dev} -- Устройство в backend-домене (обычно домен 0), которое должно экспортироваться. Его можно указать как физический раздел (phy:sda7) или как файл, который должен быть смонтирован через loopback-устройство (file://path/to/loop.iso). 11.65 +\item \textit{fe-dev} -- Как устройство должно быть представлено в гостевом домене. Параметр можно указывать или в виде символьного имени (для распространённых устройств), например как /dev/hdc, или с помощью device id, например 0x1400 (код device id для /dev/hdc в шестнадцатеричной системе). 11.66 +\item \textit{mode} -- Режим доступа из гостевого домена. Поддерживаются режимы rw (read/write) и ro (read-only). 11.67 +\item \textit{bedomain-id} -- backend-домен, обеспечивающий устройство. По умолчанию домен 0. 11.68 +\end{itemize} 11.69 + 11.70 +\paragraph{Примеры} 11.71 +Монтирование ISO-диска: 11.72 +\begin{verbatim} 11.73 +xm block-attach guestdomain file://path/to/dsl-2.0RC2.iso /dev/hdc ro 11.74 +\end{verbatim} 11.75 + 11.76 +Команда подключает ISO-файл dsl как /dev/hdc в гостевом домене в режиме read/only. Возможно, гостевая система и не увидит этот файл как сетевой, 11.77 +но ручное монтирование точно сработает. 11.78 + 11.79 +\subsubsection{block-detach} 11.80 +\begin{verbatim} 11.81 + block-detach domain-id devid 11.82 +\end{verbatim} 11.83 + 11.84 +Удалить блочное устройство из домена. 11.85 +В качестве \textit{devid} должно быть указано устроство домена 0. 11.86 +Номер определяется с помощью команды \textit{xm block-list}. 11.87 + 11.88 +Сейчас эта команда сломана. 11.89 +Даже если устройство удалено из домена domU, 11.90 +оно занято в домене 0. 11.91 + 11.92 +\subsubsection{block-list} 11.93 +\begin{verbatim} 11.94 + block-list [-l|--long] domain-id 11.95 +\end{verbatim} 11.96 + 11.97 +Показать список виртуальных блочных устройств для домена. 11.98 +Вывод представлен в виде отформатированного списка или как S-выражение (S-Expression), в том случае, если задана опция --long. 11.99 + 11.100 +\subsection{Дополнительная информация} 11.101 +\begin{itemize} 11.102 +\item xm(1) -- man-страница по \textbf{xm} 11.103 +\item Amanda -- система для резервного копирования по сети 11.104 +\end{itemize} 11.105 +
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 12.2 +++ b/xen/devices.tex Tue Jul 01 16:16:44 2008 +0300 12.3 @@ -0,0 +1,13 @@ 12.4 +\section{Блочные устройства в Xen} 12.5 + 12.6 +\subsection{Дополнительная информация} 12.7 +\begin{itemize} 12.8 +\item Re: (Xen-users) Question about ioemu {\dots} 12.9 +\end{itemize} 12.10 + 12.11 +\section{См. также} 12.12 +\begin{itemize} 12.13 +\item Приоритезация ввода/вывода в Xen 12.14 +\item Горячее подключение блочных устройств в Xen 12.15 +\end{itemize} 12.16 +
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 13.2 +++ b/xen/drbd.tex Tue Jul 01 16:16:44 2008 +0300 13.3 @@ -0,0 +1,468 @@ 13.4 +\section{Построение отказоустойчивого кластера виртуальных машин Xen + DRBD} 13.5 + 13.6 +\subsection{Идея} 13.7 +Компоненты: 13.8 +\begin{itemize} 13.9 +\item \textbf{Xen} — монитор виртуальных машин (VMM, Virtual Machine Monitor) или гипервизор (hypervisor) с поддержкой паравиртуализации (para-virtualization) для процессоров x86 архитектуры, распространяющийся с открытым исходным кодом (opensource). Xen может организовать совместное безопасное исполнение нескольких виртуальных машин на одной физической системе с производительностью близкой к непосредственной (native). 13.10 +\item \textbf{LVM} (Logical Volume Manager) — менеджер логических томов операционной системы Linux. LVM предоставляет собой дополнительный уровень абстракции между физическими/логическими дисками и файловой системой. 13.11 +\item \textbf{DRBD} (Distributed Replicated Block Deice) — блочное устройство, предназначенное для построения отказоустойчивых кластерных систем на операционной системе Linux. DRBD занимается полным отражением (mirroring) по сети всех операций с блочным устройством. Можно считать, что DRBD это сетевой RAID-1. 13.12 +\end{itemize} 13.13 + 13.14 +Терминология: 13.15 +\begin{itemize} 13.16 +\item узел — физический сервер, на котором исполняются виртуальные машины; 13.17 +\item DRBD-устройство — дисковый раздел или логический том LVM, синхронизируемый с помощью DRBD; 13.18 +\item домен — работающая виртуальная машина Xen; 13.19 +\item кластер — два узла, которые имеют общие DRBD-устройства, поверх которых выполняются общие домены Xen. 13.20 +\end{itemize} 13.21 + 13.22 +Идея заключается в том, чтобы в качестве дисковых устройств для виртуальных машин Xen, 13.23 +использовать DRBD-устройства. DRBD устройства в свою очередь размещаются поверх LVM томов машин входящих в кластер. 13.24 + 13.25 +DRBD отвечает за полную синхронизацию операций с дисковыми системами, выполняющимися доменами Xen. 13.26 + 13.27 +С точки зрения внешнего наблюдателя не имеет значения, на каком из узлов кластера 13.28 +в настоящий момент выполняется виртуальная машина. 13.29 + 13.30 +При плановом выведении узла из эксплуатации, 13.31 +машины, работающие на нём, мигрируют на второй узел кластера. 13.32 +Это совершенно незаметно с точки зрения внешнего наблюдателя. 13.33 + 13.34 +При внезапной остановке одного из узлов машины, 13.35 +работавшие на нём, запускаются на втором узле. 13.36 +С точки зрения внешнего наблюдателя, работавшего с виртуальной машиной, 13.37 +которая исполнялась на внезапно выключившемся узле, это выглядит 13.38 +как перезагрузка машины. 13.39 + 13.40 +Виртуальные машины могут быть произвольно распределены по узлам кластера. 13.41 + 13.42 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/4/4b/Xen-drbd.png}}\\ \textit{}\end{center} 13.43 + 13.44 +\subsection{Инсталляция и управление кластером} 13.45 +\subsubsection{Подготовка узлов} 13.46 + 13.47 +Подготовка узлов может выполняться вручную или с помощью 13.48 +вспомогательных средств, таких, например, как скрипт \textit{xen-drbd-install}. 13.49 +Скрипт \textit{xen-drdb-install} предназначен для облегчения 13.50 +рутинных операций, выполняющихся при инсталляции 13.51 +нового кластера виртуализации с повышенной отказоустойчивостью, 13.52 +построенного на основе Xen и DRBD. 13.53 + 13.54 +В результате работы \textit{xen-drbd-install} 13.55 +создаётся сценарий командного интерпретатора, 13.56 +который выполняет такие действия: 13.57 +\begin{enumerate} 13.58 +\item Подготовка LVM томов; 13.59 +\item Настройка DRBD устройств; 13.60 +\item Наполнение файловых систем доменов. 13.61 +\end{enumerate} 13.62 + 13.63 +Полученный сценарий может быть доработан вручную, 13.64 +а может использоваться непосредственном в том 13.65 +виде, как его сгенерирует \textit{xen-drbd-install}. 13.66 + 13.67 +\subsubsection{Управление узлами} 13.68 + 13.69 +Скрипт \textit{xen-drbd} 13.70 +обеспечивает взаимное соответсвие 13.71 +состояния DRBD-устройств и доменов Xen, использующих их. 13.72 +Он следит за тем, чтобы при выполнении таких 13.73 +операций как запуск и миграция доменов, 13.74 +используемые DRBD-устройства 13.75 +переключались основное (primary) или резервное (secondary) состояние 13.76 +в зависимости от точки запуска или направления миграции. 13.77 + 13.78 +Он также следит за тем, чтобы один и тот же домен 13.79 +нельзя было запустить на разных узлах кластера 13.80 +несколько раз. 13.81 + 13.82 +Кроме этого, \textit{xen-drbd} контролирует процесс запуска и останова узлов: 13.83 +он инициирует миграцию доменов с одного узла на другой в случае 13.84 +останова первого; и обратную миграцию при запуске узла. 13.85 + 13.86 +\subsection{Взаимный контроль узлов с помощью heartbeat} 13.87 +Кластер функционален уже — без настройки и использования heartbeat — 13.88 +однако функциональность его частична: 13.89 +при выходе из строя одного из узлов кластера 13.90 +доступными останутся только те домены, которые 13.91 +исполнялись на нём в момент выхода из строя второго узла. 13.92 +Оставшиеся домены можно будет поднять, но только вручную. 13.93 +Нужно же, чтобы каждый из узлов имел возможность определить, 13.94 +что его напарник пропал, и запустить все недостающие домены. 13.95 +При этом особенно важно избежать случая, когда каждый узел 13.96 +ошибочно решит, что его напарник выключился, в то время как 13.97 +оба они будут работать, но по какой-то причине перестанут видеть друг друга. 13.98 +В этом случае может наступить опасная ситуация, касающаяся взаимной противоречивости данных на DRBD-устройствах, и названная \textit{split-brain}. 13.99 + 13.100 +\subsection{Резервирование коммутаторов и сетевых адаптеров} 13.101 +\subsubsection{Использование аггрегированных каналов} 13.102 +Сетевые адаптеры узлов могут быть зарезервированы 13.103 +путём аггрегирования каналов, 13.104 +соединяющих узел с коммутатором. 13.105 + 13.106 +В каждом сервере должно быть по два сетевых адаптера, 13.107 +каждый из которых подключается к коммутатору. 13.108 +Они работают как единое целое, то есть два канала 13.109 +выглядят как один аггрегированный. 13.110 + 13.111 +При пропадении одного из соединений (это может быть связано 13.112 +с неполадками адаптера, соединительного кабеля или порта коммутатора) 13.113 +система продолжает работу на оставшемся. 13.114 +В системном журнале появляется сообщение о 13.115 +возникшей проблеме. 13.116 + 13.117 +Для работы аггрегированного канала необходима поддержка 13.118 +со стороны коммутатора: 13.119 +\begin{itemize} 13.120 +\item он должен поддерживать аггрегированные каналы; 13.121 +\item он должен быть настроен соответствующим образом. 13.122 +\end{itemize} 13.123 + 13.124 +\subsubsection{Использование виртуального моста и STP} 13.125 +Построить аггрегированный канал на два независимых коммутатора 13.126 +нельзя (за некоторыми проприетарными исключениями). 13.127 + 13.128 +Можно отказаться от использования аггрегированного канала 13.129 +и с некоторой потерей функциональности перейти на использование 13.130 +протокола STP и виртуального моста. 13.131 +Это позволит сделать резервирование коммутатора, однако 13.132 +у такого решения есть недостаток: 13.133 +в отдельно взятый момент времени будет работать один из каналов. 13.134 + 13.135 +Подключение одного узла выглядит так: 13.136 +\begin{verbatim} 13.137 ++---------------------------+ 13.138 +|HOST peth0 | 13.139 +| +--+ | +--------------+ 13.140 +| +------+ +-+------| switch1 | 13.141 +| | +--+ | +---+----------+ 13.142 +|veth0+---------+----+ | | 13.143 +| ---+ linux bridge | | | 13.144 +| +---------+----+ | | 13.145 +| | +--+ | +---+----------+ 13.146 +| +------+ +-+------+ switch2 | 13.147 +| +--+ | +--------------+ 13.148 +| peth1 | 13.149 ++---------------------------+ 13.150 +\end{verbatim} 13.151 + 13.152 +Соединения с коммутаторами происходят не напрямую 13.153 +а через виртуальных мост (linux bridge) внутри хоста. 13.154 +Этот мост поддерживает протокол STP 13.155 +и в этом контексте может рассматриваться как обычный 13.156 +коммутатор, который не может выйти из строя (точнее, 13.157 +может, но только вместе с хостом, внутри которого он работает). 13.158 + 13.159 +Соединенние двух коммутаторов и двух узлов выглядит так 13.160 +(соединения heartbeat может и не быть, в этом случае 13.161 +в качестве heartbeat-канала будут использоваться 13.162 +основные соединения): 13.163 +\begin{verbatim} 13.164 ++---------------------------+ 13.165 +|HOST1 peth0 | 13.166 +| +--+ | +--------------+ 13.167 +| +------+ +-+------| switch1 | 13.168 +| | +--+ | ++--+----------+ 13.169 +|veth0+---------+----+ | +---+ | 13.170 +| ---+ linux bridge | | | | 13.171 +| +---------+----+ | | | 13.172 +| | +--+ | | +---+----------+ 13.173 +| +------+ +-+---|--+ switch2 | 13.174 +| +--+ | | +---+----------+ 13.175 +| peth1 | | | 13.176 ++-------+-------------------+ | | 13.177 + | | | 13.178 + |heartbeat | | 13.179 ++-------+-------------------+ | | 13.180 +|HOST2 peth0 | | | 13.181 +| +--+ | | | 13.182 +| +------+ +-+---+ | 13.183 +| | +--+ | | 13.184 +|veth0+---------+----+ | | 13.185 +| ---+ linux bridge | | | 13.186 +| +---------+----+ | | 13.187 +| | +--+ | | 13.188 +| +------+ +-+----------+ 13.189 +| +--+ | 13.190 +| peth1 | 13.191 ++---------------------------+ 13.192 +\end{verbatim} 13.193 + 13.194 +\subsubsection{Сравнение использования аггрегированных каналов и виртуального моста} 13.195 +Минусы: 13.196 + 13.197 +\begin{enumerate} 13.198 +\item Каналы не объединияются, а используются попеременно. 13.199 +\item Переключение с одного канала на другой происходит достаточно долго. При настройках коммутатора по умолчанию процесс переключения может занять до минуты. Это связано с работой STP. В RSTP было бы быстрее, но RSTP Linux Bridge пока не поддерживает. 13.200 +\end{enumerate} 13.201 + 13.202 +Плюсы: 13.203 + 13.204 +\begin{enumerate} 13.205 +\item От коммутаторов ничего не требуется кроме поддержки STP; 13.206 +\item Можно подключаться к двум независимым коммутаторам; 13.207 +\item Не требуется никакая дополнительная настройка коммутаторов. 13.208 +\end{enumerate} 13.209 + 13.210 +\subsection{Отдельные вопросы эксплуатации xen-drbd} 13.211 +\subsubsection{Создание новых устройств DRBD} 13.212 +При синхронизации множества отдельных томов с помощью DRBD 13.213 +нужно обратить внимание на следующее: 13.214 +\begin{itemize} 13.215 +\item Количество синхронизируемых устройств DRBD ограничено (<=255); 13.216 +\item Для синхронизации отдельных устройств DRBD используются отдельные TCP-порты. При добавлении нового DRBD-устройства обратите внимание на то, что бы порт, который вы назначаете ему для синхронизации, уже не был занят. 13.217 +\item Используйте внешние метадиски, поскольку в случае когда метадиск является внутренним, поведение DRBD при изменении размера логического тома может оказаться неожиданным. 13.218 +\end{itemize} 13.219 + 13.220 +\paragraph{Множество DRBD-устройств} 13.221 +Количество синхронизируемых устройств DRBD ограничено. 13.222 +Максимальное количество используемых одновременно DRBD-устройств 13.223 +задаётся в качестве параметра \texttt{minor\_count} модуля ядра \textbf{drbd} 13.224 +при его загрузке. Этот параметр не может превышать 255. 13.225 + 13.226 +\begin{verbatim} 13.227 +$ sudo modinfo drbd 13.228 +filename: /lib/modules/2.6.18-3-xen-686/kernel/drivers/block/drbd.ko 13.229 +author: Philipp Reisner <phil@linbit.com>, Lars Ellenberg <lars@linbit.com> 13.230 +description: drbd - Distributed Replicated Block Device v8.0.0 13.231 +license: GPL 13.232 +alias: block-major-147-* 13.233 +vermagic: 2.6.18-3-xen-686 SMP mod_unload 686 REGPARM gcc-4.1 13.234 +depends: cn 13.235 +parm: trace_devs:int 13.236 +parm: trace_type:int 13.237 +parm: trace_level:int 13.238 +parm: fault_count:int 13.239 +parm: fault_rate:int 13.240 +parm: enable_faults:int 13.241 +parm: allow_oos:DONT USE! (bool) 13.242 +parm: minor_count:Maximum number of drbd devices (1-255) (int) 13.243 +\end{verbatim} 13.244 + 13.245 +\paragraph{Сетевые порты DRBD} 13.246 +Для синхронизации отдельных устройств DRBD используются отдельные TCP-порты. 13.247 +При добавлении нового DRBD-устройства обратите внимание на то, что бы порт, 13.248 +который вы назначаете ему для синхронизации, уже не был занят. 13.249 + 13.250 +Кроме того, нужно обратить внимание на то, чтобы доступ к этим портам 13.251 +для парного узла не был ограничен брандмауэром. 13.252 + 13.253 +В пример ниже есть строка: 13.254 +\begin{verbatim} 13.255 + address 192.168.1.190:7792; 13.256 +\end{verbatim} 13.257 +она показывает, что синхронизация ресурса 13.258 +выполняется с узлом 192.168.1.190 и для сихнронизации используется 13.259 +порт 7792. 13.260 + 13.261 +\paragraph{Метадиск} 13.262 +Лучше не использовать внуренний метадиск (meta-disk internal), 13.263 +особенно если вы собираетесь менять размер логического тома 13.264 +LVM и файловой системы на нём. 13.265 + 13.266 +Нужно создать отдельный том для- 13.267 +meta-disk\rq{}ов DRBD и задать его размер 13.268 +равным 128MB x количество устройств. 13.269 + 13.270 +В пример конфигурационного файла <tt>drbd.conf</tt>, 13.271 +приведённом ниже, есть строка: 13.272 +\begin{verbatim} 13.273 + meta-disk /dev/XEN/meta[1]; 13.274 +\end{verbatim} 13.275 +Она говорит о том, что мета-информация 13.276 +об DRBD-устройстве, к которому относится эта строка, 13.277 +должна находится в мета-диске 1 (нумерация с нуля) 13.278 +на томе \texttt{/dev/XEN/meta}. 13.279 +Подготовка этого тома не выполняется каким-то 13.280 +особенным образом — в данном случае это обычный 13.281 +логический том LVM, но вообще это может быть любое блочное 13.282 +устройство достаточного объёма. 13.283 + 13.284 +Если метадиск создаётся на отдельном логическом 13.285 +томе LVM, то его можно расширять. 13.286 +Расширять метадиск нужно в том случае, 13.287 +когда количество DRBD-устройств, использующих 13.288 +его, превышает допустимое. 13.289 +Это число можно найти, разделив размер метадиска 13.290 +на объём, необходимый для каждого DRBD-устройства 13.291 +(в настоящий момент 128MB). 13.292 + 13.293 +\paragraph{Пример секции файла drbd.conf} 13.294 + 13.295 +\begin{verbatim} 13.296 +resource dns { 13.297 + protocol C; 13.298 + net { 13.299 + allow-two-primaries; 13.300 + after-sb-0pri discard-least-changes; 13.301 + after-sb-1pri call-pri-lost-after-sb; 13.302 + after-sb-2pri call-pri-lost-after-sb; 13.303 + } 13.304 + syncer { 13.305 + rate 5M; 13.306 + } 13.307 + on dom0 13.308 + { 13.309 + device /dev/drbd1; 13.310 + disk /dev/XEN/dns; 13.311 + address 192.168.1.190:7792; 13.312 + meta-disk /dev/XEN/meta[1]; 13.313 + } 13.314 + on dom0m 13.315 + { 13.316 + device /dev/drbd1; 13.317 + disk /dev/XEN/dns; 13.318 + address 192.168.1.191:7792; 13.319 + meta-disk /dev/XEN/meta[1]; 13.320 + } 13.321 +} 13.322 +\end{verbatim} 13.323 + 13.324 +\subsubsection{Расширение диска DRBD} 13.325 +DRBD-устройство может менять свои размеры. 13.326 +Это возможно в том случае, если меняют размер (как правило, расширяются) 13.327 +устройства на которых базируется DRBD. 13.328 +Когда DRBD работает поверх логических томов LVM, 13.329 +желание расширение DRBD-устройства выглядит весьма естественно, 13.330 +поскольку изменение размеров LVM-томов 13.331 +является вполне простой и часто использующейся операцией; 13.332 +хочется, чтобы то, что работает поверх логического тома LVM 13.333 +могло отреагировать на изменение размеров. 13.334 + 13.335 +Расширение DRBD-устройства и файловой системы, находящейся на нём, состоит из 13.336 +следующих шагов: 13.337 +\begin{enumerate} 13.338 +\item Расширение \textit{логического тома}, на котором базируется DRBD-устройство на обоих узлах. 13.339 +\item Отражение изменений в метадиске. 13.340 +\item Расширение \textit{файловой системы} на primary-устройстве. 13.341 +\item Проверка правильности выполнения. 13.342 +\end{enumerate} 13.343 + 13.344 +Например, пусть: 13.345 +\begin{itemize} 13.346 +\item машины называются \textit{primary} и \textit{secondary} 13.347 +\item с помощью DRBD синхронизируется логический том /dev/TURBO/lv0 13.348 +\item размер тома увеличивается на 2G 13.349 +\item на томе создана файловая система ext2/ext3 13.350 +\end{itemize} 13.351 +Все указанные параметры являются необязательными 13.352 +и приведены для удобства повествования. 13.353 + 13.354 +1) Измените размер тома на обоих машинах. 13.355 + 13.356 +\begin{verbatim} 13.357 +primary# lvresize -L +2048M /dev/TURBO/lv0 13.358 +secondary# lvresize -L +2048M /dev/TURBO/lv0 13.359 +\end{verbatim} 13.360 + 13.361 +2) Вызовите команду перестроения размера 13.362 +DRBD-устройства на обоих машинах: 13.363 + 13.364 +\begin{verbatim} 13.365 +primary# drbdadm resize all #(вместо all может быть указан только интересующий диск) 13.366 +secondary# drbdadm resize all 13.367 +\end{verbatim} 13.368 + 13.369 +3) На primary-устройстве измените размер файловой системы, 13.370 +расположенной на DRBD-устройстве: 13.371 + 13.372 +\begin{verbatim} 13.373 +primary# ext2resize /dev/drbd0 # (или другое устройство) 13.374 +\end{verbatim} 13.375 + 13.376 +4) Проверьте, что изменение размера прошло успешно. 13.377 + 13.378 +\begin{verbatim} 13.379 +primary# df -h /dev/drbd0 13.380 +\end{verbatim} 13.381 + 13.382 +Проверка с помощью df возможна только в том случае, 13.383 +если \texttt{/dev/drbd0} смонтировано в настоящий момент. 13.384 + 13.385 +Размер несмонтированной файловой системы можно тоже посмотреть, 13.386 +но только не в байтах, а в блоках. 13.387 +Для файловых систем ext2/ext3: 13.388 + 13.389 +\begin{verbatim} 13.390 +%# dumpe2fs /dev/drbd0 | grep ^Block 13.391 +dumpe2fs 1.40-WIP (14-Nov-2006) 13.392 +Block count: 979933 13.393 +Block size: 1024 13.394 +Blocks per group: 8192 13.395 +\end{verbatim} 13.396 + 13.397 +Указать домену Xen, использующему DRBD-устройство, 13.398 +что оно изменило размер, в настоящий момент, 13.399 +к сожалению, невозможно. 13.400 + 13.401 +В будущем, сообщить об изменении конфигурации 13.402 +дискового устройства домена будет можно, предположительно, 13.403 +с помощью команды \textbf{xm block-configure}. 13.404 + 13.405 +\subsubsection{Проверка DRBD перед стартом виртуальной машины} 13.406 +Можно сделать так, чтобы виртуальная машина 13.407 +вообще не стартовала до тех пор, 13.408 +пока соответствующее DRBD-устройство не будет переведено 13.409 +в состояние primary 13.410 +(на устройстве в состоянии secondary она может начать работать, 13.411 +но, когда внутреняя операционная система дойдёт до момента 13.412 +монтирования корневой файловой системы, загрузка прекратится; 13.413 +в действительности это устройство вообще не используется до момента 13.414 +монтирования корневой системы, поэтому первый этап загрузки 13.415 +операционной системы домена проходит без ошибок). 13.416 + 13.417 +Предположим, машина использует в качестве своего хранилища 13.418 +устройство /dev/drbd4. В таком случае, 13.419 +проверка будет выглядеть так: 13.420 + 13.421 +\begin{verbatim} 13.422 +import os 13.423 +if os.system("grep '4:.*Primary/Secondary' /proc/drbd") != 0: 13.424 + print "DRBD for this virtual machine not in primary state." 13.425 + print "Exiting." 13.426 + exit(1) 13.427 +\end{verbatim} 13.428 + 13.429 +Эти строки нужно добавить в конфигурационный файл соответствующего 13.430 +домена Xen. 13.431 + 13.432 +Пример использования: 13.433 + 13.434 +\begin{verbatim} 13.435 +%$ sudo drbdadm secondary vpn 13.436 + 13.437 +%$ sudo xm create -c vpn 13.438 +Using config file "/etc/xen/vpn". 13.439 +DRBD for this virtual machine not in primary state. 13.440 +Exiting. 13.441 +Error: 'str' object is not callable 13.442 + 13.443 +%$ sudo drbdadm primary vpn 13.444 + 13.445 +%$ sudo xm create -c vpn 13.446 +Using config file "/etc/xen/vpn". 13.447 + 4: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r--- 13.448 +Started domain vpn 13.449 +Linux version 2.6.18-4-xen-686 (Debian 2.6.18.dfsg.1-11) 13.450 +(waldi@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian 13.451 +4.1.1-21)) #1 SMP Wed Feb 21 20:46:15 UTC 2007 13.452 +BIOS-provided physical RAM map: 13.453 + Xen: 0000000000000000 - 0000000004800000 (usable) 13.454 +0MB HIGHMEM available. 13.455 +72MB LOWMEM available. 13.456 +....... 13.457 +\end{verbatim} 13.458 + 13.459 +Когда DRBD-устройство \textit{vpn} было в резервном состоянии (secondary), 13.460 +создать домен не удалось. 13.461 +После того как оно было переведено 13.462 +в основное состояние (primary), домен успешно стартанул. 13.463 + 13.464 +Если для управления доменами Xen используется скрипт \textit{xen-drbd}, 13.465 +то эту проверку выполнять не нужно. 13.466 +Она автоматически выполняется скриптом. 13.467 + 13.468 +\subsection{Дополнительная информация} 13.469 +\begin{itemize} 13.470 +\item \htmladdnormallinkfoot{Использование доменов Xen поверх DRBD-устройств}{http://xgu.ru/wiki/xen/drbd} (рус.) 13.471 +\end{itemize}
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 14.2 +++ b/xen/export.tex Tue Jul 01 16:16:44 2008 +0300 14.3 @@ -0,0 +1,359 @@ 14.4 +\section{Преобразование независимых систем в виртуальные домены Xen} 14.5 + 14.6 +Здесь описывается как выполнять систему, установленную на компьютере, 14.7 +внутри домена Xen или с помощью эмулятора QEMU, исполняющегося на другом компьютере. 14.8 +Может быть полезно при консолидации и виртуализации систем, 14.9 +при работе с устаревшими системами, при тестировании. 14.10 + 14.11 +\subsection{Идея} 14.12 +В связи с постоянным увеличением вычислительной мощности и объёма оперативной памяти машин, наблюдающимся в настоящее время, большую популярность приобретает идея виртуализации систем. В особенности популярным этот подход становится 14.13 +при построении серверной инфраструктуры. 14.14 + 14.15 +Виртуализированная серверная инфраструктура редко строится с нуля. Чаще всего существует парк физических (не виртуализированных) серверов, которые безостановочно работают, выполняя возложенные на них задачи. 14.16 +Нередко для хранения информации (операционной системы, программного обеспечения и данных) эти серверы используют не внешние хранилища, а собственные жётские 14.17 +диски. 14.18 + 14.19 +Виртуализация сервера в данном случае может быть выполнена одним из указанных способов: 14.20 +\begin{enumerate} 14.21 +\item \textit{Миграция служб.} В виртуальной системе новый сервер разворачивается с нуля. Затем на него переносятся службы старого сервера. После чего старый сервер выводится из эксплуатации. 14.22 +\item \textit{Миграция операционной системы.} Старый сервер останавливается, а затем на нём по сети (с компакт-диска или другого внешнего носителя информации) запускается другая операционная система, которая экспортирует установленный в сервере жёсткий диск системе виртуализации. Система виртуализации исполняет операционную систему, проинсталированную на этом диске. При условии, что виртуализация удалась, данные переносятся на хранилище системы виртуализации и старый сервер выключается. 14.23 +\end{enumerate} 14.24 + 14.25 +Последний способ проще и быстрее, но он должен допускать возможность 14.26 +временной, непродолжительной остановки сервера (на время запуска другой операционной системы, экспорта, запуска виртуальной машины поверх экспортированных данных). 14.27 +В случае правильного выполнения всех операций простой в этом случае составит до 10 минут. 14.28 + 14.29 +Обратите внимание что данные, расположенные на жёстком диске, 14.30 +при загрузке новой операционной системы, выполнящей экспорт, 14.31 +никак не используются. Загрузка выполняется по сети, с компакт-диска или другого внешнего носителя. Диск экспортируется для доступа к нему системы виртуализации. Изменения на диске может делать только сама операционная система, установленная на этом же диске, после того как она запущена в виртуальном домене. 14.32 + 14.33 +Ниже детально рассматривается процесс миграции, 14.34 +выполненный по второму сценарию. 14.35 + 14.36 +\subsection{Постановка задачи} 14.37 +Пусть есть две системы: 14.38 +\begin{itemize} 14.39 +\item \textit{Старая система} (old) --- система, которая должна быть экспортирована. 14.40 +\item \textit{Xen-система} (xen) --- система, внутри которой должен исполняться домен под управлением экспортированной системы. 14.41 +\end{itemize} 14.42 + 14.43 +Необходимо создать новую виртуальную машину, 14.44 +которая будет использовать в качестве жёсткого диска жёсткий диск удалённого хоста, экспортированный для доступа по сети с помощью протоколов сетевого доступа к дисковым хранилищам. 14.45 + 14.46 +\subsection{Запуск второй операционной системы в домене Xen установленной на том же компьютере} 14.47 +Рассмотрим для начала простейший случай, когда на одном компьютере 14.48 +установлено две операционные системы. 14.49 +Он отличается от интересующей нас задачии тем, что не нужно 14.50 +выполнять экспорт диска как сетевого устройства. 14.51 + 14.52 +Если на компьютере установлены две операционные системы, 14.53 +и одна из них это Xenolinux (Xen + Linux), 14.54 +то вторую можно запустить как пользовательский домен Xen. 14.55 + 14.56 +Запуск систем, не подготовленных для использования в паравиртуальном домене Xen, 14.57 +внутри Xen возможен только в том случае, если центральный процессор системы поддерживает аппаратную виртуализацию. 14.58 +В противном случае вместо Xen можно использовать QEMU. 14.59 + 14.60 +Операционная система, загруженная в родном режиме: 14.61 + 14.62 +\begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/2/29/Win2003_native.JPG}}\\ \textit{}\end{center} 14.63 + 14.64 +Конфигурационный файл домена Xen: 14.65 + 14.66 +\begin{verbatim} 14.67 +%$ egrep -v '^#|^\ *$' /etc/xen/win2003 14.68 +kernel = "hvmloader" 14.69 +builder='hvm' 14.70 +memory = 512 14.71 +shadow_memory = 8 14.72 +name = "win2003" 14.73 +acpi=1 14.74 +vif = [ 'type=ioemu, bridge=br0' ] 14.75 +disk = ['phy:/dev/hda,hda,w' ] 14.76 +device_model = 'qemu-dm' 14.77 +boot="c" 14.78 +sdl=0 14.79 +vnc=1 14.80 +vnclisten="127.0.0.1" 14.81 +stdvga=0 14.82 +serial='pty' 14.83 +soundhw='sb16' 14.84 +\end{verbatim} 14.85 + 14.86 +В данном случае операционная система Windows установлена 14.87 +на жёсткий диск IDE, подключенный в системе в режиме Primary Master 14.88 +(блочное устройство \texttt{/dev/hda}). 14.89 + 14.90 +Старт домена выполняется стандартным образом: 14.91 + 14.92 +\begin{verbatim} 14.93 +%# xm create win2003 14.94 +%# vncviewer 127.0.0.1:0 14.95 +\end{verbatim} 14.96 + 14.97 +Здесь вместо 0 может быть указан другой номер, в зависимости от номера 14.98 +VNC-сеанса, который будет соответствовать заданному домену Xen. 14.99 +Подробнее см. руководство пользователя Xen. 14.100 + 14.101 +Домен Xen, загруженный с жёсткого диска: 14.102 + 14.103 +\begin{itemize} 14.104 +\item Процессор AMD 3000+ 14.105 +\item 512 Mb ОЗУ 14.106 +\end{itemize} 14.107 + 14.108 +\begin{figure} 14.109 +\includegraphics[width=12cm]{/var/lib/mediawiki/images/b/bc/W2003_xen.png} 14.110 +\end{figure} 14.111 + 14.112 +На домен, в котором работает установленная операционная система 14.113 +распространяются все те же законы, которые распространяются на систему, которая установлена в домен с нуля 14.114 +традиционным способом. 14.115 + 14.116 +\subsection{Запуск домена с экспортированного образа} 14.117 +Если операционная система установлена не локально, 14.118 +а на другом компьютере, необходимо каким-то образом его донести системе виртуализации, так что бы, грубо говоря, виртуальный домен увидел диск. 14.119 + 14.120 +Процедура включает три шага: 14.121 +\begin{enumerate} 14.122 +\item Выполнить бездисковую загрузку старой системы \textit{old} под управлением Linux; 14.123 +\item Выполнить экспорт диска загруженной системы \textit{old} с помощью AoE или iSCSI; 14.124 +\item На работающей Xen-системе \textit{xen} запустить домен, который будет использовать экспортированный старой машиной. 14.125 +\end{enumerate} 14.126 + 14.127 +\subsubsection{Подготовка сервера бездисковой загрузки} 14.128 +Детально процедура подготовки сервера бездисковой загрузки 14.129 +описана на странице \htmladdnormallinkfoot{PXE}{http://xgu.ru/wiki/PXE}. 14.130 +Ниже приводятся только примеры конфигурационных 14.131 +файлов ключевых систем, использующихся в работе. 14.132 + 14.133 +\paragraph{DHCP} 14.134 +Конфигурация демона dhcpd в файле \textbf{/etc/default/dhcp}: 14.135 + 14.136 +\begin{verbatim} 14.137 +%$ egrep -v '^#|^\ *$' /etc/default/dhcp 14.138 +INTERFACES="br0" 14.139 +\end{verbatim} 14.140 + 14.141 +Сам конфигурационный файл \textbf{/etc/dhcpd.conf}: 14.142 + 14.143 +\begin{verbatim} 14.144 +%$ egrep -v '^#|^\ *$' /etc/dhcpd.conf 14.145 +option domain-name "clinika.com"; 14.146 +option domain-name-servers 192.168.15.254; 14.147 +option subnet-mask 255.255.255.0; 14.148 +default-lease-time 600; 14.149 +max-lease-time 7200; 14.150 +subnet 192.168.7.0 netmask 255.255.255.0 { 14.151 + range 192.168.7.200 192.168.7.220; 14.152 + option routers 192.168.7.254; 14.153 + filename "pxelinux.0"; 14.154 +} 14.155 +host clinika { 14.156 + hardware ethernet 00:13:8f:49:b0:31; 14.157 + fixed-address 192.168.7.253; 14.158 +} 14.159 +\end{verbatim} 14.160 + 14.161 +\paragraph{TFTP} 14.162 + 14.163 +\begin{verbatim} 14.164 +%$ egrep -v '^#|^\ *$' /etc/default/tftpd-hpa 14.165 +RUN_DAEMON="yes" 14.166 +OPTIONS="-l -s /var/lib/tftpboot/ltsp/i386/" 14.167 +\end{verbatim} 14.168 + 14.169 +\paragraph{PXE} 14.170 +Наполнение каталога TFTP-сервера. 14.171 +Здесь присутствуют файлы загрузчика PXELINUX. 14.172 + 14.173 +\begin{verbatim} 14.174 +%$ ls -l /var/lib/tftpboot/ltsp/i386/ 14.175 +итого 10690 14.176 +-rw-r--r-- 1 root root 203 2007-10-04 boot.msg 14.177 +-rw-r--r-- 1 root root 80023 2007-07-11 config-2.6.21-2-486 14.178 +lrwxrwxrwx 1 root root 23 2007-10-04 initrd.img -> initrd.img-2.6.21-2-486 14.179 +-rw-r--r-- 1 root root 3691052 2007-10-04 initrd.img-2.6.21-2-486 14.180 +-rw-r--r-- 1 root root 9519 2007-10-04 logo.16_1 14.181 +lrwxrwxrwx 1 root root 20 2007-10-04 nbi.img -> nbi.img-2.6.21-2-486 14.182 +-rw-r--r-- 1 root root 5019136 2007-10-04 nbi.img-2.6.21-2-486 14.183 +-rw-r--r-- 1 root root 13944 2007-10-04 pxelinux.0 14.184 +drwxr-xr-x 2 root root 104 2007-10-05 pxelinux.cfg 14.185 +-rw-r--r-- 1 root root 780664 2007-07-11 System.map-2.6.21-2-486 14.186 +lrwxrwxrwx 1 root root 20 2007-10-04 vmlinuz -> vmlinuz-2.6.21-2-486 14.187 +-rw-r--r-- 1 root root 1319152 2007-07-11 vmlinuz-2.6.21-2-486 14.188 +\end{verbatim} 14.189 + 14.190 +Конфигурационный файл загрузчика PXELINUX: 14.191 + 14.192 +\begin{verbatim} 14.193 +clint:Dom0~$ cat /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default 14.194 +DISPLAY boot.msg 14.195 +TIMEOUT 150 14.196 +DEFAULT vmlinuz 14.197 +PROMPT 1 14.198 + 14.199 +LABEL 2.6.21.2 14.200 +KERNEL vmlinuz 14.201 +APPEND nfsdir=192.168.7.254:/opt/ltsp/i386 lang=ru ramdisk_size=1000000 14.202 + root=/dev/nfs rw nfsroot=192.168.7.254:/opt/ltsp/i386/ ip=dhcp initrd=initrd.img 14.203 +\end{verbatim} 14.204 + 14.205 +\paragraph{Корневая файловая система, загружаемая по сети} 14.206 +В каталоге \texttt{/opt/ltsp/i386/} 14.207 +развёрнута операционная система Linux. 14.208 +Инсталляция выполняется с помощью \textit{debootstrap} 14.209 +или аналогичным способом. 14.210 + 14.211 +В системе должны быть установлены пакеты: 14.212 +\begin{itemize} 14.213 +\item vblade 14.214 +\end{itemize} 14.215 + 14.216 +\subsubsection{Экспорт диска старой машины по сети} 14.217 +Сервер, который будет экспортирован, 14.218 +перезагружается и загружается 14.219 +по сети. 14.220 + 14.221 +После этого необходимо выполнить следующие действия. 14.222 + 14.223 +Будем считать, что экспорт выполняется с помощью протокола 14.224 +ATA over Ethernet. 14.225 +Можно использовать другой протокол доступа к диску по сети. 14.226 + 14.227 +Убедитесь, что загружен модуль \textbf{aoe}: 14.228 + 14.229 +\begin{verbatim} 14.230 +ltsp:~# lsmod | grep aoe 14.231 +aoe 24416 0 14.232 +\end{verbatim} 14.233 + 14.234 +Экспортируйте диск \texttt{/dev/hda} (или другой -- тот, на котором установлена система) с помощью \textbf{vblade}: 14.235 + 14.236 +\begin{verbatim} 14.237 +ltsp:~# vblade 1 0 eth0 /dev/hda 14.238 +pid 3344: e1.0, 78165360 sectors O_RDWR 14.239 +\end{verbatim} 14.240 + 14.241 +\subsubsection{Запуск домена с экспортированного образа} 14.242 +На системе виртуализации 14.243 +загрузите модуль \textbf{aoe}: 14.244 + 14.245 +\begin{verbatim} 14.246 +clint:Dom0~$ ls -l /dev/etherd 14.247 +ls: /dev/etherd: Heт такого файла или каталога 14.248 +%# modprobe aoe 14.249 +aoe: aoe_init: AoE v22 initialised. 14.250 +aoe: 00138f49b031 e1.0 v400c has 78165360 sectors 14.251 +%# sudo lsmod | grep aoe 14.252 +aoe 23456 0 14.253 +\end{verbatim} 14.254 + 14.255 +При этом 14.256 +в \texttt{/var/log/messages} 14.257 +должны появиться сообщения: 14.258 + 14.259 +\begin{verbatim} 14.260 +... kernel: aoe: aoe_init: AoE v22 initialised. 14.261 +... kernel: aoe: 00138f49b031 e1.0 v400c has 78165360 sectors 14.262 +... kernel: etherd/e1.0: p2 < p5 p6 p7 p8 p9 > p3 14.263 +\end{verbatim} 14.264 + 14.265 +В каталоге \texttt{/dev/etherd} 14.266 +должны появиться новые файлы устройств, 14.267 +соответствующие обнаруженным дискам 14.268 +ATA over Ethernet: 14.269 + 14.270 +\begin{verbatim} 14.271 +%# ls -l /dev/etherd/ 14.272 +итого 0 14.273 +c-w--w---- 1 root disk 152, 3 2007-10-05 21:46 discover 14.274 +brw-rw---- 1 root disk 152, 256 2007-10-05 21:57 e1.0 14.275 +brw-rw---- 1 root disk 152, 258 2007-10-05 21:46 e1.0p2 14.276 +brw-rw---- 1 root disk 152, 259 2007-10-05 21:46 e1.0p3 14.277 +brw-rw---- 1 root disk 152, 261 2007-10-05 21:46 e1.0p5 14.278 +brw-rw---- 1 root disk 152, 262 2007-10-05 21:46 e1.0p6 14.279 +brw-rw---- 1 root disk 152, 263 2007-10-05 21:46 e1.0p7 14.280 +brw-rw---- 1 root disk 152, 264 2007-10-05 21:46 e1.0p8 14.281 +brw-rw---- 1 root disk 152, 265 2007-10-05 21:46 e1.0p9 14.282 +cr--r----- 1 root disk 152, 2 2007-10-05 21:46 err 14.283 +c-w--w---- 1 root disk 152, 4 2007-10-05 21:46 interfaces 14.284 +c-w--w---- 1 root disk 152, 5 2007-10-05 21:46 revalidate 14.285 +\end{verbatim} 14.286 + 14.287 +Далее необходимо создать конфигурационный файл 14.288 +нового домена Xen 14.289 +или модифицровать существующий. 14.290 + 14.291 +\begin{verbatim} 14.292 +%$ egrep -v '^#|^\ *$' /etc/xen/win2k 14.293 +kernel = "hvmloader" 14.294 +builder='hvm' 14.295 +memory = 512 14.296 +shadow_memory = 8 14.297 +name = "win2k" 14.298 +acpi=1 14.299 +vif = [ 'type=ioemu, bridge=br0' ] 14.300 +disk = ['phy:/dev/etherd/e1.0,hda,w' ] 14.301 +device_model = 'qemu-dm' 14.302 +boot="c" 14.303 +sdl=0 14.304 +vnc=1 14.305 +vnclisten="127.0.0.1" 14.306 +stdvga=0 14.307 +serial='pty' 14.308 +soundhw='sb16' 14.309 +\end{verbatim} 14.310 + 14.311 +После чего запустить домен: 14.312 + 14.313 +\begin{verbatim} 14.314 +%@ xm create win2k 14.315 +\end{verbatim} 14.316 + 14.317 +\subsubsection{Результат запуска} 14.318 +Старая машина, загруженная самостоятельно. 14.319 +\begin{itemize} 14.320 +\item Процессор Sempron 2600 14.321 +\item 457968KB ОЗУ 14.322 +\end{itemize} 14.323 +\begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/b/b9/W2k.jpg}}\\ \textit{}\end{center} 14.324 + 14.325 +Домен Xen, загруженный удалённо 14.326 +с жёсткого диска старой системы: 14.327 +\begin{itemize} 14.328 +\item Процессор AMD 3000+ 14.329 +\item 523800KB ОЗУ 14.330 +\end{itemize} 14.331 +\begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/c/cd/W2k_2.png}}\\ \textit{}\end{center} 14.332 + 14.333 +Другие изображения: 14.334 + 14.335 +\begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/f/f9/W2k_0.png}}\\ \textit{}\end{center} 14.336 + \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/7/75/W2k_1.png}}\\ \textit{}\end{center} 14.337 + 14.338 +Мы бы не смогли подключиться к этой системе удалённо 14.339 +в момент запуска, поскольку сетевая подсистема ещё не работает. 14.340 +Такие изображения можно сделать только при запуске машины 14.341 +в виртуальной системе или в эмуляторе. 14.342 + 14.343 +\subsubsection{Перенесение образа старой машины} 14.344 +Если старый сервер должен быть выведен 14.345 +из эксплуатации, необходимо скопировать 14.346 +данные на новое место. 14.347 + 14.348 +Домен соответствующий виртуализируемому серверу должен быть потушен в момент копирования! 14.349 + 14.350 +Например, если перенос выполняется на том LVM: 14.351 + 14.352 +\begin{verbatim} 14.353 +%# lvcreate -L 20G -n server2003 /dev/XEN 14.354 +%# dd if=/dev/etherd/e1.0 of=/dev/XEN/server2003 14.355 +%# sed -i -e s@/dev/etherd/e1.0@/dev/XEN/server2003@ /etc/xen/win2003 14.356 +\end{verbatim} 14.357 + 14.358 + 14.359 +\subsection{Дополнительная информация} 14.360 +\begin{itemize} 14.361 +\item \htmladdnormallinkfoot{Экспорт установленной системы в домен Xen}{http://xgu.ru/wiki/xen/export} (рус.) 14.362 +\end{itemize}
15.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 15.2 +++ b/xen/hvm2pv.tex Tue Jul 01 16:16:44 2008 +0300 15.3 @@ -0,0 +1,138 @@ 15.4 +\section{Преобразование HVM-домена Xen в паравиртуальный} 15.5 + 15.6 +Здесь описывается каким образом можно преобразовать 15.7 +HVM-машину в паравиртуальную. 15.8 +Такое преобразование возможно только в том случае, 15.9 +если для гостевой операционной системы существует ядро, 15.10 +способное работать в паравиртуальном домене Xen. 15.11 +За некоторыми исключениями, это означает, 15.12 +что в настоящий момент преобразование HVM-домена 15.13 +в паравиртуальный возможно только для ОС Linux. 15.14 + 15.15 +\subsection{Способы подготовки к паравиртуализации} 15.16 +Самый простой способ: 15.17 +загрузиться непосредственно в реальной машине и подготовить её к паравиртуализации. 15.18 +Однако, этот способ не всегда доступен. Например, исходной машины уже может не быть или она может быть занята 15.19 +и недоступна для экспериментов, а образ её есть. 15.20 +Можно загрузить этот образ в HVM-домене или эмуляторе, 15.21 +однако быстрее будет непосредственно обратиться к образу 15.22 +и подготовить его к запуску в паравиртуальном режиме. 15.23 + 15.24 +\subsection{Доступ к файловой системе виртуальной машины} 15.25 +Машина должна быть выключена. 15.26 +Иначе можно повредить файловые системы. 15.27 + 15.28 +С помощью \textit{losetup} нужно подключить диск виртуальной машины к блочному устройству. 15.29 +\begin{verbatim} 15.30 + %$ losetup -d /dev/loop0 virtual-disk 15.31 +\end{verbatim} 15.32 + 15.33 +После этого посмотреть информацию о диске с помощью fdisk: 15.34 +\begin{verbatim} 15.35 + %$ losetup -d /dev/loop0 virtual-disk 15.36 +\end{verbatim} 15.37 + 15.38 +Здесь есть какой-то маленький раздел (вероятно /boot) 15.39 +и LVM. 15.40 + 15.41 +Снова вызовите losetup, и подключите уже отдельный раздел к другому 15.42 +блочному устройству. 15.43 + 15.44 +Например, для раздела /boot: 15.45 + 15.46 +\begin{verbatim} 15.47 + %$ losetup -o $((512*63)) /dev/loop1 /dev/loop0 15.48 + %$ mount /dev/loop1 /mnt 15.49 +\end{verbatim} 15.50 + 15.51 +Ключ \texttt{-o} указывает отступ, который нужно сделать от начала файла 15.52 +при подключении образа к loop-файлу. 15.53 + 15.54 +Если мы хотим подмонтировать файловые системы, которые находятся внутри LVM, 15.55 +то нужно сделать так. 15.56 + 15.57 +Во-первых, подключить второй раздел к блочному устройству. 15.58 + 15.59 +\begin{verbatim} 15.60 + %$ mount -o $$(208845*512) /dev/loop2 /dev/loop0 15.61 +\end{verbatim} 15.62 + 15.63 +Во-вторых, сказать LVM-системе, что loop-устройства тоже могут содержать тома LVM, 15.64 +и что сканировать и их. 15.65 + 15.66 +Для этого нужно отредактировать файл \texttt{/etc/lvm/lvm.conf} 15.67 +и найти строку \texttt{types}. 15.68 +Скорее всего она будет закомментирована, а в комментариях 15.69 +будут указаны значения по умолчанию. 15.70 +\begin{verbatim} 15.71 + # types = [ “fd”, 16] 15.72 +\end{verbatim} 15.73 +Измените её на строку: 15.74 +\begin{verbatim} 15.75 + types = [ “fd”, 16, “loop”, 1] 15.76 +\end{verbatim} 15.77 +и выполните сканирование: 15.78 + 15.79 +\begin{verbatim} 15.80 + %$ losetup -o $((512*63)) /dev/loop1 /dev/loop0 15.81 + %$ mount /dev/loop1 /mnt 15.82 +\end{verbatim} 15.83 + 15.84 +Мы сможем работать с группой томов LogVol00, которая находится на подключенном образе. 15.85 +\begin{verbatim} 15.86 + %$ mount -o $$(208845*512) /dev/loop2 /dev/loop0 15.87 +\end{verbatim} 15.88 + 15.89 +\subsection{Изменение гостевой системы} 15.90 +Теперь вы можете скопировать необходимые файлы 15.91 +внутрь виртуальной машины. 15.92 +В частности, нужно скопировать модули виртуального ядра: 15.93 +\begin{verbatim} 15.94 + %# cp -a /lib/modules/`uname -r` /mnt/lib/modules 15.95 +\end{verbatim} 15.96 +(если мы будем запускать паравиртуальный домен не с тем ядром, которое используем сейчас, 15.97 +то нужно заменить \texttt{`uname -r`} на верстию нужного ядра). 15.98 + 15.99 +Установите libc6-xen или другим способом отключите 15.100 +использование TLS-библиотек. 15.101 +\begin{verbatim} 15.102 + mv /mnt/lib/tls /mnt/lib/tls.disabled 15.103 +\end{verbatim} 15.104 + 15.105 +Вы можете стереть записи udev, касающиеся сетевого интерфейса, 15.106 +поскольку MAC-адрес виртуального сетевого адаптера будет отличаться 15.107 +от реального, который использовался раньше, и который был запомнен udev. 15.108 +Если этого не делать, нужно отредактировать настройки сети 15.109 +(\texttt{/etc/network/interfaces} для Debian GNU/Linux) 15.110 +и указать новое название интерфейсов. Иначе при старте домена 15.111 +сеть настроена не будет. 15.112 + 15.113 +Если у вас в конвертируемой машине раньше загружались какие-то специфичные модули ядра, 15.114 +их загрузку тоже лучше отключить. 15.115 + 15.116 +\subsection{Приведение хост-системы в исходное состояние} 15.117 +После того как все операции по подготовке 15.118 +машины в паравиртуальном режиме 15.119 +завершены, нужно размонтировать все разделы 15.120 +и отключить их от loop-устройств. 15.121 +\begin{verbatim} 15.122 + # types = [ “fd”, 16] 15.123 +\end{verbatim} 15.124 + 15.125 +Можно также привести файл \texttt{/etc/lvm/lvm.conf} в исходное состояние. 15.126 + 15.127 +\subsection{Важные замечания} 15.128 +\begin{itemize} 15.129 +\item LVM имена должны быть уникальными в пределах системы! Поэтому имена в виртуальной и реальной машинах не должны повторяться! 15.130 +\item Если нужно изменить UUID для виртуального диска, почитайте как это сделать в файле uuidgen.py из дистрибутива Xen 15.131 +\item Для решения описанной выше задачи можно использовать не losetup, а kpartx 15.132 +\end{itemize} 15.133 + 15.134 +\subsection{Дополнительная информация} 15.135 +\begin{itemize} 15.136 +\item \htmladdnormallinkfoot{Преобразование HVM-домена Xen в паравиртуальный}{http://xgu.ru/wiki/xen/hvm2pv} 15.137 +\item \htmladdnormallinkfoot{LVM на Xgu.ru}{http://xgu.ru/wiki/LVM}, где рассказывается об использовании \textit{kpartx} 15.138 +\item \htmladdnormallinkfoot{How to manipulate the files stored inside a Xen virtual machine}{http://bitsandchaos.wordpress.com/2007/12/08/how-to-manipulate-the-files-stored-inside-a-xen-virtual-machine/} (англ.) 15.139 +\item \htmladdnormallinkfoot{Creating a customized master image for a Xen virtual server manually}{http://publib.boulder.ibm.com/infocenter/eserver/v1r2/index.jsp ?topic=/eica7/eica7\_creating\_custom\_image\_xen\_manually.htm} (англ.) 15.140 +\end{itemize} 15.141 +
16.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 16.2 +++ b/xen/hw.tex Tue Jul 01 16:16:44 2008 +0300 16.3 @@ -0,0 +1,139 @@ 16.4 + 16.5 +\subsection{Аппаратные требования} 16.6 +В настоящий момент Xen 16.7 +работает на платформах \textbf{Intel x86} и \textbf{Intel x86\_64} (в режиме совместимости i386) 16.8 +и требует процессора не ниже P6. 16.9 +Выполняется поддержка многопроцессорных машин (в том числе и машин с процессорами с архитектурой Hyper-Threading). 16.10 + 16.11 +В ближайшее время Xen будет работать на процессорах архитектуры IA64. 16.12 +Также ведутся работы по подготовке Xen для работы на процессорах с архитектурой PPC и ARM. 16.13 + 16.14 +Для использования \textbf{модифицированных} 16.15 +операционных систем -- подготовленных к использованию в паравиртуальной машине Xen -- никаких дополнительных требований к аппаратному обеспечению 16.16 +компьютера, на котором будут выполняться виртуальные машины, не предъявляется. 16.17 + 16.18 +\subsection{Поддержка аппаратной виртуализации процессорами} 16.19 +Использование операционных систем \textbf{в неизменном 16.20 +виде} возможно при использовании 16.21 +процессоров с поддержкой виртуализации: 16.22 + 16.23 +\begin{itemize} 16.24 +\item VT (Vanderpool) от Intel 16.25 +\item SVM (Pacifica) от AMD 16.26 +\end{itemize} 16.27 + 16.28 +Указанные архитектурные расширения доступны 16.29 +в перечисленных ниже процессорах. 16.30 + 16.31 +\subsubsection{AMD} 16.32 +Поддержка виртуализации на аппаратном уровне 16.33 +обеспечивается во всех процессорах серии AMD-V (SVM). 16.34 +Процессоры для рабочих станций должны 16.35 +работать с сокетом AM2 с поддержкой DDR2. 16.36 + 16.37 +\begin{itemize} 16.38 +\item Athlon™ 64 3800+ 16.39 +\item Athlon™ 64 3500+ 16.40 +\item Athlon™ 64 3500+ 16.41 +\item Athlon™ 64 3500+ 16.42 +\item Athlon™ 64 3200+ 16.43 +\item Athlon™ 64 3000+ 16.44 +\item Athlon™ 64 FX FX-62 16.45 +\item Athlon™ 64 X2 Dual-Core 5000+ 16.46 +\item Athlon™ 64 X2 Dual-Core 4800+ 16.47 +\item Athlon™ 64 X2 Dual-Core 4800+ 16.48 +\item Athlon™ 64 X2 Dual-Core 4600+ 16.49 +\item Athlon™ 64 X2 Dual-Core 4600+ 16.50 +\item Athlon™ 64 X2 Dual-Core 4400+ 16.51 +\item Athlon™ 64 X2 Dual-Core 4400+ 16.52 +\item Athlon™ 64 X2 Dual-Core 4200+ 16.53 +\item Athlon™ 64 X2 Dual-Core 4200+ 16.54 +\item Athlon™ 64 X2 Dual-Core 4000+ 16.55 +\item Athlon™ 64 X2 Dual-Core 4000+ 16.56 +\item Athlon™ 64 X2 Dual-Core 3800+ 16.57 +\item Athlon™ 64 X2 Dual-Core 3800+ 16.58 +\item Athlon™ 64 X2 Dual-Core 3800+ 16.59 +\end{itemize} 16.60 + 16.61 +Notebook processors are all branded Turion 64 X2. 16.62 +Процессоры с поддержкой виртуализации 16.63 +для ноутбуков называются Turion 64 X2: 16.64 +\begin{itemize} 16.65 +\item Turion™ 64 X2 TL-60 16.66 +\item Turion™ 64 X2 TL-56 16.67 +\item Turion™ 64 X2 TL-52 16.68 +\item Turion™ 64 X2 TL-50 16.69 +\end{itemize} 16.70 + 16.71 +Процессоры на Socket939 и Socket940 не поддерживают технологию SVM. 16.72 + 16.73 +\subsubsection{Intel} 16.74 +\begin{itemize} 16.75 +\item Intel® Core(TM) Quad all models 16.76 +\item Intel® Core(TM) Duo processor T2600 16.77 +\item Intel® Core(TM) Duo processor T2500 16.78 +\item Intel® Core(TM) Duo processor T2400 16.79 +\item Intel® Core(TM) Duo processor T2300 16.80 +\item Intel® Core(TM) Duo processor L2400 16.81 +\item Intel® Core(TM) Duo processor L2300 16.82 +\item Intel® Pentium® processor Extreme Edition 965 16.83 +\item Intel® Pentium® processor Extreme Edition 955 16.84 +\item Intel® Pentium® D processor 960 16.85 +\item Intel® Pentium® D processor 950 16.86 +\item Intel® Pentium® D processor 940 16.87 +\item Intel® Pentium® D processor 930 16.88 +\item Intel® Pentium® D processor 920 16.89 +\item Intel® Pentium® 4 processor 672 16.90 +\item Intel® Pentium® 4 processor 662 16.91 +\item Intel® Xeon® processor 7041 16.92 +\item Intel® Xeon® processor 7040 16.93 +\item Intel® Xeon® processor 7030 16.94 +\item Intel® Xeon® processor 7020 16.95 +\item Intel® Xeon® processor 5080 16.96 +\item Intel® Xeon® processor 5063 16.97 +\item Intel® Xeon® processor 5060 16.98 +\item Intel® Xeon® processor 5050 16.99 +\item Intel® Xeon® processor 5030 16.100 +\end{itemize} 16.101 + 16.102 +Для использования технологии Intel VT 16.103 +необходим не только процессор с поддержкой виртуализации, 16.104 +но также и BIOS. 16.105 + 16.106 +Постоянно обновляющийся список процессоров 16.107 +с поддержкой виртуализации находится здесь: \url{http://wiki.xensource.com/xenwiki/HVM\_Compatible\_Processors}. 16.108 + 16.109 +Если у вас в системе установлен Linux, 16.110 +вы можете проверить, поддерживает ли ваш процессор 16.111 +архитектурные расширения следующим образом: 16.112 + 16.113 +\begin{verbatim} 16.114 +%# cat /proc/cpuinfo | egrep flags.*'svm|vmx' 16.115 +\end{verbatim} 16.116 + 16.117 +Должен быть не пустой результат. 16.118 + 16.119 +Пример для процессора Intel поддерживающего HVM: 16.120 + 16.121 +\begin{verbatim} 16.122 +%# cat /proc/cpuinfo | grep flags 16.123 +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr lahf_lm 16.124 +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr lahf_lm 16.125 +\end{verbatim} 16.126 + 16.127 +\subsection{Аппаратная виртуализации и BIOS} 16.128 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/8/8d/GA-M59SLI-S4-img2.jpg}}\\ \textit{Новый пункт в меню расширенных настроек BIOS}\end{center} 16.129 + 16.130 + 16.131 +Для того чтобы аппаратная виртуализация поддерживалась компьютером, необходимо чтобы её поддерживал центральный процессор компьютера и материнская плата. Вообще, от материнской платы не требуется никаких особенных операций по поддержке аппаратной виртуализации, за исключением того, что BIOS материнской платы должен просто включить эту поддержку. 16.132 + 16.133 +Тем не менее, многие производители материнских плат по разным причинам искуственно отключают в BIOS поддержку аппаратной виртуализации. Для того чтобы не получилось так, что ваша система не в состоянии работать с HVM , несмотря на то, что процессор имеет соответствующие архитектурные расширения, нужно при покупке материнской платы проверять, есть ли в BIOS соответствующая поддержка. Если же плата уже куплена, можно попробовать добавить в неё отсутствующую поддержку. 16.134 + 16.135 +Если аппаратная виртуализация искуственно отключена BIOS материнской платы, 16.136 +в выводе \textit{xm dmesg} 16.137 +можно обнаружить строку (или другую аналогичную для Intel): 16.138 + 16.139 +\begin{verbatim} 16.140 +(XEN) AMD SVM Extension is disabled in BIOS. 16.141 +\end{verbatim} 16.142 +
17.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 17.2 +++ b/xen/installation.tex Tue Jul 01 16:16:44 2008 +0300 17.3 @@ -0,0 +1,347 @@ 17.4 +\section{Инсталляция Xen} 17.5 + 17.6 +На этой странице 17.7 +описывается процедура подготовки 17.8 +Linux-машины 17.9 +для использования в качестве 17.10 +хост-системы (домена 0) Xen. 17.11 +Хост система работает под управлением Debian GNU/Linux. 17.12 + 17.13 +\subsection{Начальные требования} 17.14 +<graphviz> 17.15 +digraph G \{ 17.16 +\begin{verbatim} 17.17 +node [shape=rectangle]; 17.18 +a [label="Подготовка\nдомена 0",bgcolor=cyan,style=filled]; 17.19 +b [label="Подготовка\nдомена U"]; 17.20 +c [label="Запуск и эксплуатация\nсистемы"]; 17.21 +a -> b; 17.22 +b -> c; 17.23 +\end{verbatim} 17.24 +\} 17.25 +</graphviz> 17.26 + 17.27 +\subsection{Получение Xen} 17.28 +Xen можно получить одним из нескольких способов: 17.29 +\begin{itemize} 17.30 +\item Скачать архив исходных кодов; 17.31 +\item Получить исходный код непосредственно из репозитория Xen; 17.32 +\item Воспользоваться пакетом Xen, входящим в ваш дистрибутив Linux. 17.33 +\end{itemize} 17.34 + 17.35 +В первом и втором случае Xen нужно будет собирать из исходников, 17.36 +в третьем — в систему, как правило, установливаются уже откомпилированные 17.37 +пакеты. 17.38 + 17.39 +\subsubsection{Получение архива исходных кодов} 17.40 +Архив исходных кодов можно скачать со страницы: 17.41 +\begin{itemize} 17.42 +\item http://xen.xensource.com/download/ 17.43 +\end{itemize} 17.44 + 17.45 +\subsubsection{Получение Xen из репозитория Mercurial} 17.46 +Для получения кода Xen непосредственно из репозитория 17.47 +необходимо установить \textbf{mercurial}. 17.48 +После того как он установлен, 17.49 +код можно получить с помощью команды: 17.50 + 17.51 +\begin{verbatim} 17.52 +node [shape=rectangle]; 17.53 +a [label="Подготовка\nдомена 0",bgcolor=cyan,style=filled]; 17.54 +b [label="Подготовка\nдомена U"]; 17.55 +c [label="Запуск и эксплуатация\nсистемы"]; 17.56 +a -> b; 17.57 +b -> c; 17.58 +\end{verbatim} 17.59 + 17.60 +(здесь вместо версии 3.1 должна быть указана интересующая версия) 17.61 + 17.62 +Или, для получения последнего среза unstable: 17.63 +\begin{verbatim} 17.64 + libncurses5-dev gawk libx11-dev zlib1g-dev libssl-dev python-dev 17.65 +\end{verbatim} 17.66 + 17.67 +Для сборки в Debian GNU/Linux 17.68 +необходимо установить пакеты: 17.69 +\begin{verbatim} 17.70 + libncurses5-dev gawk libx11-dev zlib1g-dev libssl-dev python-dev 17.71 +\end{verbatim} 17.72 + 17.73 +Процедура получения кода из репозитория Mercurial подробна описана 17.74 +на странице: 17.75 +\begin{itemize} 17.76 +\item http://www.cl.cam.ac.uk/research/srg/netos/xen/readmes/hg-cheatsheet.txt 17.77 +\end{itemize} 17.78 + 17.79 +\subsubsection{Инсталляция Xen из репозитория дистрибутива} 17.80 +Можно воспользоваться пакетами Xen, входящими непосредственно в дистрибутив 17.81 +Linux (при условии, что они входят в ваш дистрибутив). 17.82 + 17.83 +Например, для Debian GNU/Linux процедура будет такой: 17.84 + 17.85 +\begin{verbatim} 17.86 +%# apt-get install xen-hypervisor-3.0.4-1-i386 linux-image-2.6.18-4-xen-686 xen-ioemu-3.0.4-1 xen-utils-3.0.4-1 17.87 +\end{verbatim} 17.88 + 17.89 +В случае выполнения команды установятся уже откомпилированные версии пакетов. Будут установлены: 17.90 +\begin{itemize} 17.91 +\item гипервизор; 17.92 +\item ядро Linux откомпилированное под архитектуру Xen; 17.93 +\item userland утилиты для работы с Xen. 17.94 +\end{itemize} 17.95 + 17.96 +\subsection{Инсталляция Xen из архива исходных текстов} 17.97 +Список программного обеспечения, необходимого для сборки: 17.98 +\begin{itemize} 17.99 +\item GCC v3.4 or later 17.100 +\item GNU Make 17.101 +\item GNU Binutils 17.102 +\item Development install of zlib (e.g., zlib-dev) 17.103 +\item Development install of Python v2.3 or later (e.g., python-dev) 17.104 +\item Development install of curses (e.g., libncurses-dev) 17.105 +\item Development install of openssl (e.g., openssl-dev) 17.106 +\item Development install of x11 (e.g. xorg-x11-dev) 17.107 +\item bridge-utils package (/sbin/brctl) 17.108 +\item iproute package (/sbin/ip) 17.109 +\item hotplug or udev 17.110 +\end{itemize} 17.111 + 17.112 +Для Debian GNU/Linux, список такой: 17.113 + 17.114 +\begin{verbatim} 17.115 + 17.116 +\end{verbatim} 17.117 + 17.118 +\subsection{Подготовка хост-системы Xen} 17.119 +\subsubsection{Подготовка домена0} 17.120 +Пусть: 17.121 +\begin{itemize} 17.122 +\item В качестве хост-машины (dom0) будет использоваться Debian GNU/Linux. 17.123 +\item Будут использовать бинарные версии, доступные в репозитории Debian GNU/Linux. 17.124 +\end{itemize} 17.125 + 17.126 +Выполните инсталляцию бинарных версий 17.127 +утилит Xen: 17.128 + 17.129 +\begin{verbatim} 17.130 +# apt-get install xen-hypervisor-3.0-i386 xen-utils-3.0 17.131 +\end{verbatim} 17.132 + 17.133 +Версии могут отличаться; найти текущие версии можно с помощью \textbf{apt-cache}: 17.134 + 17.135 +\begin{verbatim} 17.136 +%# apt-cache search xen hypervisor 17.137 +\end{verbatim} 17.138 + 17.139 +В том случае, если в вашей машине >4GB оперативной памяти, 17.140 +используйте PAE-версию гипервизора Xen: \texttt{xen-hypervisor-3.0-i386-pae}. 17.141 + 17.142 +Проинсталлируйте программное обеспечение, 17.143 +используемое скрипта Xen для настройки сети: 17.144 + 17.145 +\begin{verbatim} 17.146 +# apt-get install iproute bridge-utils 17.147 +\end{verbatim} 17.148 + 17.149 +Отключите поддержку TLS, 17.150 +иначе работа виртуальных машин существенно замедлится. 17.151 +(этот шаг нужен только в более старых системах; в частности в дистрибутиве \textit{sarge} Debian GNU/Linux): 17.152 + 17.153 +\begin{verbatim} 17.154 +# mv /lib/tls /lib/tls.disabled 17.155 +\end{verbatim} 17.156 + 17.157 +В том случае, если вы используете Etch Debian, 17.158 +необходимо установить libc6-xen: 17.159 + 17.160 +\begin{verbatim} 17.161 +# apt-get install libc6-xen 17.162 +\end{verbatim} 17.163 + 17.164 +Подготовьте Grub к загрузке Xen. 17.165 +Такие строки должны присутствовать в конфигурационном 17.166 +файле \texttt{/boot/grub/menu.lst}: 17.167 + 17.168 +\begin{verbatim} 17.169 +title Xen 3.0 / XenLinux 2.6 17.170 +kernel /boot/xen-3.0-i386.gz 17.171 +module /boot/xen0-linux-2.6.16-xen root=/dev/hda1 ro 17.172 +\end{verbatim} 17.173 + 17.174 +Подготовьте ядро, под управлением которого будет работать домен Dom0 Xen: 17.175 +Для этого: 17.176 +\begin{itemize} 17.177 +\item Скачайте исходный код ядра Linux; 17.178 +\item Наложите на него патч Xen; 17.179 +\item Откомпилируйте изменённое ядро. 17.180 +\end{itemize} 17.181 + 17.182 +Получение ядра (используется ядро Debian GNU/Linux): 17.183 + 17.184 +\begin{verbatim} 17.185 +# apt-get install kernel-source-2.6.16 17.186 +\end{verbatim} 17.187 + 17.188 +Разархивирование ядра: 17.189 + 17.190 +\begin{verbatim} 17.191 +# cd /usr/src 17.192 +# tar xfj linux-source-2.6.16.tar.bz2 17.193 +\end{verbatim} 17.194 + 17.195 +Список патчей для ядра Debian GNU/Linux доступен здесь: https://alioth.debian.org/project/showfiles.php?group\_id=30894. 17.196 + 17.197 +Получение патча (точный адрес патча необходимо уточнить на странице, указанной выше): 17.198 + 17.199 +\begin{verbatim} 17.200 +# cd /usr/src 17.201 +# wget --no-check-certificate https://alioth.debian.org/download.php/1561/linux-2.6 17.202 +16-xen3.0.2-hg9629.patch.gz 17.203 +\end{verbatim} 17.204 + 17.205 +Наложение пачта: 17.206 + 17.207 +\begin{verbatim} 17.208 +# cd /usr/src/linux-source-2.6.16 17.209 +# zcat ../linux-2.6.16-xen3.0.2-hg9629.patch.gz | patch -p1 17.210 +patching file include/xen/interface/vcpu.h 17.211 +patching file include/xen/interface/version.h 17.212 +... 17.213 +Hunk #1 succeeded at 422 (offset 4 lines). 17.214 +Hunk #2 succeeded at 717 (offset 5 lines). 17.215 +... 17.216 +\end{verbatim} 17.217 + 17.218 +После того как патч наложен, 17.219 +можно приступить к конфигурированию и сборке ядра: 17.220 + 17.221 +\begin{verbatim} 17.222 +# make menuconfig 17.223 +[configure like a normal machine] 17.224 + 17.225 +Processor type and features ---> Subarchitecture Type (Xen-compatible) 17.226 + 17.227 +Xen ---> 17.228 +[*] Privileged Guest (domain 0) 17.229 +[*] Block-device backend driver 17.230 +[*] Network-device backend driver 17.231 +[*] Scrub memory before freeing it to Xen 17.232 +[*] Block-device frontend driver 17.233 +[*] Network-device frontend driver 17.234 +[*] Disable serial port drivers 17.235 +<*> Export Xen attributes in sysfs 17.236 +\end{verbatim} 17.237 + 17.238 +После конфигурирования, выполните сборку ядра с помощью \texttt{make-kpkg}: 17.239 + 17.240 +\begin{verbatim} 17.241 +# make-kpkg --append-to-version -xen kernel_image 17.242 +\end{verbatim} 17.243 + 17.244 +В результате должен быть получен 17.245 +пакет Debian, который можно проинсталлировать в с помощью программы \texttt{dpkg}. 17.246 + 17.247 +\begin{verbatim} 17.248 +# dpkg -i ../linux-xen0-2.6.16-xen_10.00.Custom_i386.deb 17.249 +\end{verbatim} 17.250 + 17.251 +Ядро будет проинсталлировано в каталог \texttt{/boot}. 17.252 + 17.253 +\begin{verbatim} 17.254 +/boot/xen0-linux-2.6.16-xen 17.255 +\end{verbatim} 17.256 + 17.257 +Подготовка образа initrd: 17.258 +В том случае, если вы используете при загрузке виртуальный диск initrd, 17.259 +его необходимо подготовить для работы с новым ядром. 17.260 + 17.261 +Сейчас можно выполнить перезагрузку 17.262 +системы, и загрузиться на новом ядре. 17.263 +Система будет работать под управление Xen, 17.264 +в домен Dom0. 17.265 + 17.266 +Ещё раз перепроверьте 17.267 +содержимое конфигурационного файла \texttt{/boot/grub/menu.lst} 17.268 +и перезагружайте систему. 17.269 + 17.270 +\subsubsection{Подготовка сетевого моста} 17.271 +<dl><dd> \textit{Основная статья: \textbf{Сеть в Xen}} 17.272 +</dd></dl> 17.273 + 17.274 +По умолчанию пакеты Debian Xen 17.275 +не модифицируют сетевые настройки при инсталляции. 17.276 + 17.277 +Необходимо добавить мост \texttt{br-xen} 17.278 +в файлы \texttt{/etc/network/interfaces}. 17.279 + 17.280 +\begin{verbatim} 17.281 +auto br-xen 17.282 +iface br-xen inet static 17.283 + address 192.168.12.25 17.284 + netmask 255.255.255.0 17.285 + gateway 192.168.12.1 17.286 + bridge_ports eth0 17.287 + # optional 17.288 + bridge_maxwait 0 17.289 +\end{verbatim} 17.290 + 17.291 +Дополнительные сведения о конфигурировании сетевых мостов в Linux, 17.292 +можно узнать в файле \texttt{/usr/share/doc/bridge-utils/README.Debian.gz}, 17.293 +а также в справочном руководстве man на странице brctl(8). 17.294 + 17.295 +\subsection{Что дальше?} 17.296 +После того как домен 0 готов, 17.297 +можно приступать к подготовке гостевых систем - доменов U. 17.298 + 17.299 +Гостевой домен может работать 17.300 +под управлением различных операционных систем 17.301 +(подробнее: Поддержка Xen операционными системами). 17.302 + 17.303 +Процедура подготовки гостевой системы описана 17.304 +на соответствующей странице: 17.305 +\begin{itemize} 17.306 +\item Linux в Xen 17.307 +\item FreeBSD в Xen 17.308 +\item Windows XP в Xen (требует поддержки виртуализации на аппаратном уровне) 17.309 +\end{itemize} 17.310 + 17.311 +В качестве гостевой системы также могут использоваться различные 17.312 +эмуляторы, упакованные в домен Xen, 17.313 +например Xenomips - эмулятор маршрутизатора Cisco 7200. 17.314 + 17.315 +\subsection{Дополнительная информация} 17.316 +\begin{itemize} 17.317 +\item Руководство пользователя Xen 17.318 +\end{itemize} 17.319 + 17.320 +Сборка Xen из архива исходных текстов: 17.321 + 17.322 +\begin{itemize} 17.323 +\item http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/ Архивы исходных текстов Xen 17.324 +\item Mercurial(hg) Cheatsheet for Xen -- Советы по использованию Mercurial для получения текущего архива Xen 17.325 +\end{itemize} 17.326 + 17.327 +Инсталляция на Debian GNU/Linux: 17.328 + 17.329 +\begin{itemize} 17.330 +\item Xen Debian Quick Start 17.331 +\item The Perfect Xen 3.0 Setup For Debian 17.332 +\item Installing Xen 3.0 upon Debian Unstable, with a custom Kernel 17.333 +\end{itemize} 17.334 + 17.335 +Инсталляция на Linux других дистрибутивов: 17.336 + 17.337 +\begin{itemize} 17.338 +\item UbuntuBreezyHowTo на XenSource 17.339 +\item UbuntuHoaryHowTo на XenSource 17.340 +\item HOWTO Xen and Gentoo 17.341 +\end{itemize} 17.342 + 17.343 +Документация по Xen: 17.344 + 17.345 +\begin{itemize} 17.346 +\item Xen v3.0 Users Manual 17.347 +\item Xen Documentation 17.348 +\item HowTos -- сборник HowTo на XenSource 17.349 +\item Xen Wiki на XenSource 17.350 +\end{itemize}
18.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 18.2 +++ b/xen/io.tex Tue Jul 01 16:16:44 2008 +0300 18.3 @@ -0,0 +1,76 @@ 18.4 +\section{Приоритезация ввода/вывода в Xen} 18.5 + 18.6 +\subsection{Приоритеты для использования Disk I/O} 18.7 +\subsubsection{ionice} 18.8 +С выходом CFQ v3 в Linux 2.6.13 появилась возможность выставлять приоритеты использования дисковой подсистемы для процессов, чего раньше так не хватало. Подобно утилите nice для назначение приоритетов использования процессора появилась утилита ionice. 18.9 + 18.10 +Синтаксис команды прост: 18.11 + 18.12 +\begin{verbatim} 18.13 +ionice -c класс -n приоритет -p PID 18.14 +\end{verbatim} 18.15 + 18.16 +Класс: 18.17 + 18.18 +\begin{itemize} 18.19 +\item 3, Idle — Получает приоритет на использование жесткого диска только когда другие программы ничего не пишут. Приоритеты не используются. 18.20 +\item 2, Best Effort — Класс по умолчанию. Доступные приоритеты [0-7]. 18.21 +\item 1, Real Time — Даёт преимущественный доступ к диску процессу, несмотря на другие процессы. Доступные приоритеты [0-7]. 18.22 +\end{itemize} 18.23 + 18.24 +\subsubsection{Приоритеты гостевых доменов} 18.25 +Теперь вернемся к самому Xen. 18.26 +После запуска гостевых систем по \textit{ps aux} можно видеть в квадратных скобках появившиеся драйвера блочных устройств xvd, после которых указан 18.27 +ID гостевого домена. Приоритеты для этих процессов можно устанавливать 18.28 +с помощью \textit{ionice}, точно также как и для всех остальных. 18.29 + 18.30 +\subsubsection{Эксперименты} 18.31 +Проведем 2 эксперимента для операций чтения и записи. 18.32 + 18.33 +Выставим одной гостевой системе класс \textit{Real Time}, а второй — \textit{Idle}. 18.34 + 18.35 +Запустим одновременно \textit{dd} на обеих системах для записи небольшого файла. Конечно слово «одновременно» здесь весьма условно. 18.36 +Для повышения точности лучше провести несколько измерений. 18.37 + 18.38 +\begin{verbatim} 18.39 +%# dd if=/dev/zero of=/root/file.txt bs=1024 count=10240000 18.40 +\end{verbatim} 18.41 + 18.42 +В результате средняя скорость в первой гостевой системе -- 40Mb/sec, во второй -- 20Mb/sec. 18.43 + 18.44 +Другим экспериментом является операция тестирования скорости чтения диска с помощью \textit{hdparm}: 18.45 + 18.46 +\begin{verbatim} 18.47 +%# hdparm -t /dev/xvda 18.48 +\end{verbatim} 18.49 + 18.50 +В результате в первом гостевом домене скорость — 25Mb/sec, во втором — 2Mb/sec. 18.51 + 18.52 +\subsubsection{Заключение} 18.53 +Недостатком данного решения является отсутствие соответствующих опций в конфигурационном файле гостевых доменов Xen, 18.54 +что означает, что при каждом старте домена необходимо устанавливаеть его приоритет заново. 18.55 + 18.56 +Следует обратить внимание, что данная возможность доступна только для CFQ. 18.57 + 18.58 +Проверьте, какой способ приоритезации используется: 18.59 + 18.60 +\begin{verbatim} 18.61 +cat /sys/block/ИМЯ_ДИСКА/queue/scheduler 18.62 +\end{verbatim} 18.63 + 18.64 +Активный sheduler должен быть в квадратных скобках. 18.65 +Например: 18.66 + 18.67 +\begin{verbatim} 18.68 +$ cat /sys/block/sda/queue/scheduler 18.69 +noop anticipatory deadline [cfq] 18.70 +\end{verbatim} 18.71 + 18.72 +\subsection{Дополнительная информация} 18.73 +\begin{itemize} 18.74 +\item Which is the fairest I/O scheduler of them all? (англ.) 18.75 +\item Планировщики ввода/вывода в Linux 18.76 +\item Choosing an I/O Scheduler for Red Hat® Enterprise Linux® 4 and the 2.6 Kernel (англ.) или на русском: Выбор планировщика ввода/вывода в Red Hat® Enterprise Linux® 4 и ядре версии 2.6 18.77 +\item CFQ IO Schedule и /proc/sys/{\dots} Или как уменьшить тормоза при интенсивной работе с диском 18.78 +\end{itemize} 18.79 +
19.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 19.2 +++ b/xen/linux.tex Tue Jul 01 16:16:44 2008 +0300 19.3 @@ -0,0 +1,571 @@ 19.4 +\section{Linux в Xen} 19.5 + 19.6 +На этой странице описана процедура подготовки 19.7 +гостевой системы под управлением Linux 19.8 +для работы в качестве пользовательского домена Xen 19.9 +(domain U). 19.10 + 19.11 +\subsection{Начальные требования} 19.12 +<graphviz> 19.13 +digraph G \{ 19.14 +\begin{verbatim} 19.15 +node [shape=rectangle]; 19.16 +a [label="Подготовка\nдомена 0"]; 19.17 +b [label="Подготовка\nдомена U",bgcolor=cyan,style=filled]; 19.18 +c [label="Запуск и эксплуатация\nсистемы"]; 19.19 +a -> b; 19.20 +b -> c; 19.21 +\end{verbatim} 19.22 +\} 19.23 +</graphviz> 19.24 + 19.25 +Для выполнение описанных ниже действий 19.26 +необходимо наличие проинсталлированной и настроенной 19.27 +хост-системы Xen (домена 0). 19.28 +Как это сделать описано на странице Инсталляция Xen. 19.29 + 19.30 +Предполагается, что в домене 0 установлен Debian GNU/Linux. 19.31 +Для других дистрибутивов некоторые действия будут выполняться 19.32 +иначе. 19.33 + 19.34 +\subsection{Подготовка образа гостевой системы} 19.35 +\subsubsection{Подготовка дисковых разделов для использования в качестве дисков виртуальной машины} 19.36 +Для того чтобы разделы виртуальной машины 19.37 +соответствовали дисковым разделам реальной машины, 19.38 +используйте следующие шаги: 19.39 + 19.40 +\begin{verbatim} 19.41 +node [shape=rectangle]; 19.42 +a [label="Подготовка\nдомена 0"]; 19.43 +b [label="Подготовка\nдомена U",bgcolor=cyan,style=filled]; 19.44 +c [label="Запуск и эксплуатация\nсистемы"]; 19.45 +a -> b; 19.46 +b -> c; 19.47 +\end{verbatim} 19.48 + 19.49 +В том случае, если в виртуальной машине должно быть 19.50 +несколько дисковых разделов, 19.51 +подготовьте их. 19.52 +Например, для /usr: 19.53 + 19.54 +\begin{verbatim} 19.55 +node [shape=rectangle]; 19.56 +a [label="Подготовка\nдомена 0"]; 19.57 +b [label="Подготовка\nдомена U"]; 19.58 +c [label="Запуск и эксплуатация\nсистемы",bgcolor=cyan,style=filled]; 19.59 +a -> b; 19.60 +b -> c; 19.61 +\end{verbatim} 19.62 + 19.63 +Если вам необходимо пространство подкачки (swap) в виртуальной машине, 19.64 +подготовьте его с помощью команды mkswap: 19.65 + 19.66 +\begin{verbatim} 19.67 +# mkswap /dev/hdX 19.68 +\end{verbatim} 19.69 + 19.70 +\subsubsection{Подготовка файлов для использования в качестве диска виртуальной машины} 19.71 +Создайте файл для использования в качестве основного 19.72 +диска виртуальной машины. 19.73 + 19.74 +\begin{verbatim} 19.75 +# dd if=/dev/zero of=/xen/images/debian-host1.img bs=1M count=<size_in_MB> 19.76 +# mkfs.ext3 /xen/images/debian-host1.img 19.77 +# mount -o loop /srv/debian-host1.img /mnt 19.78 +\end{verbatim} 19.79 + 19.80 +В том случае, если в виртуальной машине должно быть 19.81 +несколько дисковых разделов, 19.82 +подготовьте их. 19.83 +Например, для /usr: 19.84 + 19.85 +\begin{verbatim} 19.86 +# dd if=/dev/zero of=/xen/images/debian-host1-usr.img bs=1M count=<size_in_MB> 19.87 +# mkfs.ext3 /xen/images/debian-host1-usr.img 19.88 +# mkdir /mnt/usr 19.89 +# mount -o loop /xen/images/debian-host1-usr.img /mnt/usr 19.90 +\end{verbatim} 19.91 + 19.92 +Если вам необходимо пространство подкачки (swap) в виртуальной машине, 19.93 +подготовьте его с помощью команды mkswap: 19.94 + 19.95 +\begin{verbatim} 19.96 +# mkswap /dev/hdX 19.97 +\end{verbatim} 19.98 + 19.99 +\subsubsection{Подготовка виртуальной системы под управлением Debian GNU/Linux} 19.100 + 19.101 +\paragraph{Инсталляция ОС Debian GNU/Linux} 19.102 +Этот этап может быть выполнен проще, 19.103 +если использовать xen-tools. 19.104 +Ниже показано, как провести инсталляцию 19.105 +системы вручную. 19.106 + 19.107 +Смотрите таже \url{http://www.debuntu.org/2006/05/14/51-how-to-installing-debian-etch-from-a-running-debian-based-system/1/}. 19.108 + 19.109 +Запустите \textbf{debootstrap} для инсталляция базы 19.110 +системы: 19.111 + 19.112 +\begin{verbatim} 19.113 +# debootstrap sarge /mnt http://debian.org.ua/debian 19.114 +\end{verbatim} 19.115 + 19.116 +Скопируйте пакет ядром для работы с Xen, 19.117 +который был подготовлен ранее, 19.118 +в новую виртуальную машину: 19.119 + 19.120 +\begin{verbatim} 19.121 +# cp linux-xen0-2.6.16-xen_10.00.Custom_i386.deb /mnt/root 19.122 +\end{verbatim} 19.123 + 19.124 +Сделайте новую файловую систему корневой (с помощью chroot): 19.125 + 19.126 +\begin{verbatim} 19.127 +# chroot /mnt /bin/bash 19.128 +\end{verbatim} 19.129 + 19.130 +Проинсталлируйте пакет с ранее подготовленным 19.131 +ядро Xen: 19.132 + 19.133 +\begin{verbatim} 19.134 +# dpkg -i /root/linux-xen0-2.6.16-xen_10.00.Custom_i386.deb 19.135 +\end{verbatim} 19.136 + 19.137 +Измените запись, соответствующую корневой системе в файле /etc/fstab: 19.138 + 19.139 +\begin{verbatim} 19.140 +# vi /etc/fstab 19.141 +/dev/hda1 / ext3 defaults,errors=remount-ro 0 1 19.142 +\end{verbatim} 19.143 + 19.144 +Если используется несколько дисковых разделов 19.145 +в виртуальной машине, перечислите их: 19.146 + 19.147 +\begin{verbatim} 19.148 +/dev/hda2 /usr ext3 defaults 0 2 19.149 +/dev/hda3 /var ext3 defaults 0 2 19.150 +... 19.151 +\end{verbatim} 19.152 + 19.153 +Запустите программу \textbf{base-config} для установки базовой 19.154 +системы Debian. 19.155 + 19.156 +\begin{verbatim} 19.157 +# base-config new 19.158 +\end{verbatim} 19.159 + 19.160 +Измените конфигурацию сети в виртуальной машине: 19.161 + 19.162 +\begin{verbatim} 19.163 +# vi /etc/network/interfaces 19.164 +# vi /etc/resolv.conf 19.165 +# vi /etc/hosts 19.166 +\end{verbatim} 19.167 + 19.168 +Отключите использование TLS, 19.169 +в противном случае работа системы может сильно замедлиться. 19.170 + 19.171 +\begin{verbatim} 19.172 +# mv /lib/tls /lib/tls.disabled 19.173 +\end{verbatim} 19.174 + 19.175 +В том случае, если используется дистрибутив Etch, 19.176 +проинсталлируйте \texttt{libc6-xen}. 19.177 + 19.178 +\begin{verbatim} 19.179 +# apt-get install libc6-xen 19.180 +\end{verbatim} 19.181 + 19.182 +Отключите лишние терминалы getty, 19.183 +а первый терминал направьте на файл \texttt{/dev/console} 19.184 +вместо \texttt{/dev/tty1}: 19.185 + 19.186 +\begin{verbatim} 19.187 +1:2345:respawn:/sbin/getty 38400 /dev/console 19.188 +#2:23:respawn:/sbin/getty 38400 tty2 19.189 +#3:23:respawn:/sbin/getty 38400 tty3 19.190 +#4:23:respawn:/sbin/getty 38400 tty4 19.191 +#5:23:respawn:/sbin/getty 38400 tty5 19.192 +#6:23:respawn:/sbin/getty 38400 tty6 19.193 +\end{verbatim} 19.194 + 19.195 +Если в виртуальной машине будут загружаться модули ядра, 19.196 +установить пакет \texttt{module-init-tools} 19.197 +(обязательно для ядер 2.6 domU). 19.198 + 19.199 +\begin{verbatim} 19.200 +# apt-get install module-init-tools 19.201 +\end{verbatim} 19.202 + 19.203 +На этом инсталляция ОС в виртуальной машине завершена, 19.204 +и можно завершить работу оболочки с изменённой корневой системой (chrooted shell). 19.205 + 19.206 +\begin{verbatim} 19.207 +# exit 19.208 +\end{verbatim} 19.209 + 19.210 +Если вы создавали несколько разделов в виртуальной машине, 19.211 +размонтируйте их, начиная с самой глубокой. 19.212 + 19.213 +\begin{verbatim} 19.214 +# umount /mnt/usr 19.215 +# umount /mnt/var 19.216 +\end{verbatim} 19.217 + 19.218 +После чего размонтируйте корневую файловую систему 19.219 +виртуальной машины. 19.220 + 19.221 +\begin{verbatim} 19.222 +# umount /mnt 19.223 +\end{verbatim} 19.224 + 19.225 +\paragraph{Конфигурирование виртуальной машины} 19.226 +Необходимо создать конфигурационный файл виртуальной 19.227 +машины. 19.228 +Пусть виртуальная машина называется debian-vm0. 19.229 + 19.230 +\begin{verbatim} 19.231 +# vi /etc/xen/debian-vm0 19.232 +# Kernel to use 19.233 +kernel = "/boot/xen0-linux-2.6.16-xen" 19.234 +# Memory in megabytes 19.235 +memory = 128 19.236 +# Your domain's name 19.237 +name = "debian-vm0" 19.238 +# Root device 19.239 +root = "/dev/hda1 ro" 19.240 +# Don't forget to specify your bridge correctly here 19.241 +vif = [ 'mac=aa:00:00:00:00:d2, bridge=br-xen' ] 19.242 +\end{verbatim} 19.243 + 19.244 +В том случае, если использует физический дисковый раздел: 19.245 + 19.246 +\begin{verbatim} 19.247 +disk = [ 'phy:/dev/hdX,hda1,w' ] 19.248 +\end{verbatim} 19.249 + 19.250 +В том случае, если используется несколько разделов: 19.251 + 19.252 +\begin{verbatim} 19.253 +disk = [ 'phy:/dev/hdX,hda1,w', 'phy:/dev/hdY,hda2,w' ] 19.254 +\end{verbatim} 19.255 + 19.256 +Если вместо раздела используется файл, 19.257 +конфигурация дисковой подсистемы выглядит так: 19.258 + 19.259 +\begin{verbatim} 19.260 +disk = [ 'file:/xen/images/debian-host1.img,hda1,w' ] 19.261 +\end{verbatim} 19.262 + 19.263 +В том случае, если используется несколько файлов, 19.264 +строка должна выглядеть так: 19.265 + 19.266 +\begin{verbatim} 19.267 +disk = [ 'file:/xen/images/debian-host1.img,hda1,w', 'file:/xen/images/debian-host1-usr.img,hda2,w' ] 19.268 +\end{verbatim} 19.269 + 19.270 +Обратите внимание на то, чтобы записи о диска в конфигурации 19.271 +виртуальной машины соответствовали файлу \texttt{/etc/fstab} 19.272 +операционной системы этой машины. 19.273 + 19.274 +\subsubsection{Инсталляция и настройка Fedora Core в domU} 19.275 + 19.276 +При условии, что домен 0 работает под управлением Debian GNU/Linux, 19.277 +а образ гостевой системы подмонтирован в каталог /mnt, 19.278 +процедура инсталляции выглядит следующим образом: 19.279 + 19.280 +\begin{verbatim} 19.281 +%# apt-get install yum 19.282 +%# yum -c /tmp/yum-xen.conf --installroot=/mnt -y groupinstall Base 19.283 +\end{verbatim} 19.284 + 19.285 +Пример конфигурационного файла \texttt{yum-xen.conf} (вы можете использовать другой репозиторий и другой уровень отладки): 19.286 + 19.287 +\begin{verbatim} 19.288 +[main] 19.289 +cachedir=/var/cache/yum 19.290 +debuglevel=2 19.291 +logfile=/var/log/yum.log 19.292 +exclude=*-debuginfo 19.293 +gpgcheck=0 19.294 +obsoletes=1 19.295 +reposdir=/dev/null 19.296 + 19.297 +[base] 19.298 +name=Fedora Core 6 - i386 - Base 19.299 +#mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-6 19.300 +baseurl=http://redhat.download.fedoraproject.org/pub/fedora/linux/core/6/i386/os/ 19.301 +enabled=1 19.302 + 19.303 +[updates-released] 19.304 +name=Fedora Core 6 - i386 - Released Updates 19.305 +#mirrorlist=http://fedora.redhat.com/download/mirrors/updates-released-fc6 19.306 +baseurl=http://redhat.download.fedoraproject.org/pub/fedora/linux/core/updates/6/i386/ 19.307 +enabled=1 19.308 +\end{verbatim} 19.309 + 19.310 +Если при инсталляции вы получаете ошибку 19.311 + 19.312 +\begin{verbatim} 19.313 +Failed to add groups file for repository: base 19.314 +Error: No Groups on which to run command 19.315 +\end{verbatim} 19.316 + 19.317 +то модифицируйте код \textit{yum} следующим образом: 19.318 + 19.319 +\begin{verbatim} 19.320 +# cp /usr/share/python-support/yum/yum/comps.py{,.ORIG} 19.321 +# vi /usr/share/python-support/yum/yum/comps.py 19.322 +# diff /usr/share/python-support/yum/yum/comps.py{.ORIG,} 19.323 +124c124 19.324 +< if type not in ('mandatory', 'default', 'optional'): 19.325 +--- 19.326 +> if type not in ('mandatory', 'default', 'optional', 'conditional'): 19.327 +143c143 19.328 +< if type not in ('mandatory', 'default', 'optional'): 19.329 +--- 19.330 +> if type not in ('mandatory', 'default', 'optional', 'conditional'): 19.331 +\end{verbatim} 19.332 + 19.333 +Установленную систему можно доработать. 19.334 + 19.335 +\textit{Создать некоторые каталоги и файлы устройств.} 19.336 + 19.337 +\begin{verbatim} 19.338 +%# mkdir /mnt/{dev,proc,etc} 19.339 +%# for i in console null zero ; do /sbin/MAKEDEV -d /mnt/dev -x $i ; done 19.340 +\end{verbatim} 19.341 + 19.342 +\textit{Отключить TLS}. 19.343 + 19.344 +\begin{verbatim} 19.345 +%# mv /mnt/lib/tls /mnt/lib/tls-disabled 19.346 +\end{verbatim} 19.347 + 19.348 +\textit{Создать /etc/fstab} 19.349 + 19.350 +\begin{verbatim} 19.351 +%# cat <<EOL > /mnt/etc/fstab 19.352 +/dev/sda1 / ext3 defaults 1 1 19.353 +none /dev/pts devpts gid=5,mode=620 0 0 19.354 +none /dev/shm tmpfs defaults 0 0 19.355 +none /proc proc defaults 0 0 19.356 +none /sys sysfs defaults 0 0 19.357 +/dev/sda2 /mnt ext3 defaults 1 2 19.358 +/dev/sda3 swap swap defaults 0 0 19.359 +EOL 19.360 +\end{verbatim} 19.361 + 19.362 +\textit{Настроить сетевые интерфейсы}. 19.363 + 19.364 +\begin{verbatim} 19.365 +%# cat <<EOL > /mnt/etc/sysconfig/network 19.366 +NETWORKING=yes 19.367 +HOSTNAME=localhost.localdomain 19.368 +EOL 19.369 + 19.370 +cat <<EOL > /mnt/etc/sysconfig/network-scripts/ifcfg-eth0 19.371 +ONBOOT=yes 19.372 +DEVICE=eth0 19.373 +BOOTPROTO=dhcp 19.374 +EOL 19.375 +\end{verbatim} 19.376 + 19.377 +\textit{Скопировать модули ядра} 19.378 + 19.379 +\begin{verbatim} 19.380 +%# cp -R /lib/modules/2.6.*xen* /mnt/lib/modules/ 19.381 +\end{verbatim} 19.382 + 19.383 +\textit{Установить пароль root\rq{}а} 19.384 + 19.385 +\begin{verbatim} 19.386 +%$ sudo chroot /mnt 19.387 +bash-3.1# pwconv 19.388 +bash-3.1# passwd 19.389 +Changing password for user root. 19.390 +New UNIX password: 19.391 +Retype new UNIX password: 19.392 +passwd: all authentication tokens updated successfully. 19.393 +bash-3.1# exit 19.394 +\end{verbatim} 19.395 + 19.396 +\textit{Отключить сообщения об ошибках ядра на консоль} (не обязательно) 19.397 + 19.398 +\begin{verbatim} 19.399 + 19.400 +\end{verbatim} 19.401 + 19.402 +После того как инсталляция закончена, 19.403 +можно попробовать запустить домен. 19.404 + 19.405 +\begin{verbatim} 19.406 +%# umount /mnt 19.407 +%# xm console -c fc 19.408 +\end{verbatim} 19.409 + 19.410 +(здесь \textit{fc} это конфигурационный файл домена). 19.411 + 19.412 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/9/90/Fc-in-xen.png}}\\ \textit{}\end{center} 19.413 + 19.414 +\subsubsection{Инсталляция и настройка других дистрибутивов Linux в domU} 19.415 +\begin{itemize} 19.416 +\item Centos5 — описание процедуры подготовки domU для Centos5 19.417 +\end{itemize} 19.418 + 19.419 +\subsubsection{Инсталляция Debian из-под других дистрибутивов Linux} 19.420 + 19.421 +\begin{verbatim} 19.422 +%# wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap-udeb_0.3.3_i386.udeb 19.423 +%# ar t debootstrap-udeb_0.3.3_i386.udeb 19.424 +%# mkdir debootstrap 19.425 +%# cd debootstrap 19.426 +%# tar xvzf ../data.tar.gz 19.427 +\end{verbatim} 19.428 + 19.429 +После этого инсталляция с помощью \textit{./deboostrap} выполняется как обычно. 19.430 + 19.431 +\subsection{Запуск виртуальной машины} 19.432 +<graphviz> 19.433 +digraph G \{ 19.434 +\begin{verbatim} 19.435 +node [shape=rectangle]; 19.436 +a [label="Подготовка\nдомена 0"]; 19.437 +b [label="Подготовка\nдомена U"]; 19.438 +c [label="Запуск и эксплуатация\nсистемы",bgcolor=cyan,style=filled]; 19.439 +a -> b; 19.440 +b -> c; 19.441 +\end{verbatim} 19.442 +\} 19.443 +</graphviz> 19.444 + 19.445 +\begin{verbatim} 19.446 +# xm create -c debian-vm0 19.447 +\end{verbatim} 19.448 + 19.449 +Данная команда запустит новую виртуальную машину и создаст 19.450 +подключенную к ней консоль (ключ -c). 19.451 +Можно войти в систему от имени пользователя 19.452 +root и настроить сетевой интерфейс eth0. 19.453 + 19.454 +Обратите внимание на то, что на консоли (\texttt{/dev/console}) 19.455 +по умолчанию комбинация клавиш Ctrl-C не настроена 19.456 +для прерывания процессов. 19.457 + 19.458 +Отключиться от консоли виртуальной машины вернуться в 19.459 +терминал, из которого выполнялось подключение/запуск, 19.460 +можно с помощью комбинации Ctrl-]. 19.461 + 19.462 +Вернуться на отключенную консоль 19.463 +можно с помощью команды: 19.464 + 19.465 +\begin{verbatim} 19.466 +# xm console debian-vm0 19.467 +\end{verbatim} 19.468 + 19.469 +Остановить домен можно командой: 19.470 + 19.471 +\begin{verbatim} 19.472 +# xm shutdown -H debian-vm0 19.473 +\end{verbatim} 19.474 + 19.475 +Выключить домен (как будто бы вырубить виртуальную машину 19.476 +по питанию), можно с помощью команды: 19.477 + 19.478 +\begin{verbatim} 19.479 +# xm destroy debian-vm0 19.480 +\end{verbatim} 19.481 + 19.482 +Для получения полного списка команд, таких как shutdown, destroy 19.483 +и т.д. введите: 19.484 + 19.485 +\begin{verbatim} 19.486 +# xm help 19.487 +\end{verbatim} 19.488 + 19.489 +Для того чтобы виртуальная машина (domU) загружалась автоматически, 19.490 +когда загружает основная система (dom0), 19.491 +необходимо сделать ссылку на 19.492 +конфигурационный файл виртуальной машины: 19.493 + 19.494 +\begin{verbatim} 19.495 +# ln -s <configfile> /etc/xen/auto/ 19.496 +\end{verbatim} 19.497 + 19.498 +\subsection{Дополнительные вопросы} 19.499 +\subsubsection{Сборка ядра Linux под Xen в Debian} 19.500 +<dl><dd> \textit{Основная страница: \textbf{Сборка ядра Linux под Xen в Debian}} 19.501 +</dd></dl> 19.502 + 19.503 +Ядро Linux, с поддержкой Xen, находящееся в репозитории Debian GNU/Linux 19.504 +собрано с поддержкой PAE. 19.505 +С другой стороны, большое количество систем (FreeBSD, NetBSD, Plan 9 и др.), работающих как гостевые системы в паравиртуальном домене Xen 19.506 +не поддерживают PAE. 19.507 +В этом случае потребуется пересобрать ядро домена 0 19.508 +без поддержки PAE. 19.509 +Пересборка ядра может потребоваться и в других случаях. 19.510 + 19.511 +\subsection{Возможные проблемы при подготовке и запуске} 19.512 +Множество проблем, с которыми можно столкнуться 19.513 +при подготовке и запуске гостевой системы Xen, 19.514 +описано на странице Xen FAQ. 19.515 + 19.516 +\subsubsection{Возможные проблемы с udev} 19.517 +При старте домена может возникнуть такая проблема: 19.518 +домен не стартует, на экран выдаётся сообщение 19.519 +об ошибке: 19.520 + 19.521 +\begin{verbatim} 19.522 +Device 768 (vbd) could not be connected. Hotplug scripts not working. 19.523 +\end{verbatim} 19.524 + 19.525 +\textit{Номер устройства (768) может отличаться.} 19.526 + 19.527 +Если такая проблема возникла, причём она не пропадает 19.528 +ни при отключении сетевых интерфейсов в виртуальной машине; 19.529 +ни при изменении конфигурации дисков, проблема может быть связана с \textbf{udev}. 19.530 + 19.531 +Убедитесь, что udev достаточно новый. 19.532 +Последние версии udev находятся здесь: http://kernel.org/pub/linux/utils/kernel/hotplug/ 19.533 + 19.534 +Проверьте, есть ли в конфигурации udev правила xen. 19.535 + 19.536 +Если нет, нужно их добавить. 19.537 +Нужно создать файл \texttt{xen-backend.rules} 19.538 +в каталоге \texttt{/etc/udev/rules.d} следующего содержания: 19.539 + 19.540 +\begin{verbatim} 19.541 +# cat /etc/udev/rules.d/xen-backend.rules 19.542 +SUBSYSTEM=="xen-backend", KERNEL=="tap*", RUN+="/etc/xen/scripts/blktap $env{ACTION}" 19.543 +SUBSYSTEM=="xen-backend", KERNEL=="vbd*", RUN+="/etc/xen/scripts/block $env{ACTION}" 19.544 +SUBSYSTEM=="xen-backend", KERNEL=="vtpm*", RUN+="/etc/xen/scripts/vtpm $env{ACTION}" 19.545 +SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="online", RUN+="$env{script} online" 19.546 +SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="offline", RUN+="$env{script} offline" 19.547 +SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/etc/xen/scripts/xen-hotplug-cleanup" 19.548 +KERNEL=="evtchn", NAME="xen/%k" 19.549 +\end{verbatim} 19.550 + 19.551 +Если такой файл \texttt{xen-backend.rules} уже есть, 19.552 +можно переименовать его или создать символическую ссылку, 19.553 +содержащую номер в названии. Правило должно грузиться предпоследним. 19.554 + 19.555 +\begin{verbatim} 19.556 +# cd /etc/udev/rules.d 19.557 +# mv xen-backend.rules 92-xen-backend.rules 19.558 +\end{verbatim} 19.559 + 19.560 +После этого нужно перезапустить udev и попробовать 19.561 +стартануть домен снова. 19.562 + 19.563 +\begin{verbatim} 19.564 +# ps aux | grep udev 19.565 +root 3321 0.0 0.2 1768 516 ? S<s 22:51 0:00 udevd --daemon 19.566 +root 9349 0.0 0.2 1860 640 pts/2 S+ 23:27 0:00 grep udev 19.567 +# udevd --daemon 19.568 +# ps aux | grep udev 19.569 +root 9352 0.0 0.2 1768 516 ? S<s 23:28 0:00 udevd --daemon 19.570 +root 9356 0.0 0.2 1860 640 pts/2 S+ 23:29 0:00 grep udev 19.571 +\end{verbatim} 19.572 + 19.573 +Дополнительные сведения о проблеме: \url{http://marc.theaimsgroup.com/?l=xen-users\&m=114319459529175\&w=2} 19.574 +
20.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 20.2 +++ b/xen/net.tex Tue Jul 01 16:16:44 2008 +0300 20.3 @@ -0,0 +1,76 @@ 20.4 + 20.5 +На этой странице должна быть представлена 20.6 +информация о 20.7 +построении виртуальных сетей на основе виртуальных 20.8 +машин Xen. 20.9 + 20.10 +Рассмотрены принципы использования сети в доменах 20.11 +Xen, организации и управления виртуальными связями 20.12 +между виртуальными машинами. 20.13 + 20.14 +\subsection{Отключение iptables на мостах} 20.15 +Для того чтобы виртуальные мосты работали более приближенно к простому железу, 20.16 +нужно отключить применение правил iptables на самом мосту. 20.17 + 20.18 +\begin{verbatim} 20.19 +%# sysctl net.bridge.bridge-nf-filter-vlan-tagged = 0 20.20 +%# sysctl net.bridge.bridge-nf-filter-vlan-tagged=0 20.21 +%# sysctl net.bridge.bridge-nf-call-ip6tables=0 20.22 +%# sysctl net.bridge.bridge-nf-call-iptables=0 20.23 +%# sysctl net.bridge.bridge-nf-call-arptables=0 20.24 +\end{verbatim} 20.25 + 20.26 +Это, в частности, помогает справиться 20.27 +с проблемой, когда трафик домена Xen, 20.28 +уходящий через внешний интерфейс обрабатывается 20.29 +правилом MASQUERADE некорректно. 20.30 + 20.31 +Правило в домене 0: 20.32 + 20.33 +\begin{verbatim} 20.34 +%# iptables -t nat -A POSTROUTING -o eth1 -s 192.168.72.0/24 -j MASQUERADE 20.35 +\end{verbatim} 20.36 + 20.37 +Сначала: 20.38 + 20.39 +\begin{verbatim} 20.40 +apt-proxy:~# ping google.com 20.41 +PING google.com (64.233.167.99) 56(84) bytes of data. 20.42 +(молчание) 20.43 +\end{verbatim} 20.44 + 20.45 +После отключения фильтрации на мостах в домене 0: 20.46 + 20.47 +\begin{verbatim} 20.48 +# ping google.com 20.49 +PING google.com (64.233.187.99) 56(84) bytes of data. 20.50 +64 bytes from jc-in-f99.google.com (64.233.187.99): icmp_seq=2 ttl=239 time=145 ms 20.51 +64 bytes from jc-in-f99.google.com (64.233.187.99): icmp_seq=3 ttl=239 time=143 ms 20.52 +64 bytes from jc-in-f99.google.com (64.233.187.99): icmp_seq=4 ttl=239 time=142 ms 20.53 + 20.54 +--- google.com ping statistics --- 20.55 +4 packets transmitted, 3 received, 25% packet loss, time 3009ms 20.56 +rtt min/avg/max/mdev = 142.956/143.791/145.231/1.022 ms 20.57 +\end{verbatim} 20.58 + 20.59 +В данном случае домен был подключен через dummy-интерфейс (однако, проблема существует не только для такого подключения, но и прямого подключения через интерфейс): 20.60 + 20.61 +\begin{verbatim} 20.62 +%# brctl show 20.63 +bridge name bridge id STP enabled interfaces 20.64 +dummy0br 8000.feffffffffff no pdummy0 20.65 + vif0.1 20.66 + vif5.0 20.67 +\end{verbatim} 20.68 + 20.69 +\section{Дополнительная информация} 20.70 +Процедуры конфигурирования виртуальных 20.71 +сетей различной сложности детально описаны здесь: 20.72 +\begin{itemize} 20.73 +\item XenWiki XenNetworking (англ.) 20.74 +\item Xen and Shorewall (англ.) 20.75 +\item an attempt to explain xen networking (англ.) — сообщение в списке рассылки Xen 20.76 +\item Debian Administration :: Using multiple network cards in XEN 3.0 (англ.) 20.77 +\item Xen Networking over bonded VLANs. (англ.) 20.78 +\end{itemize} 20.79 +
21.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 21.2 +++ b/xen/os.tex Tue Jul 01 16:16:44 2008 +0300 21.3 @@ -0,0 +1,210 @@ 21.4 +\section{Поддержка Xen операционными системами} 21.5 + 21.6 +\subsection{Linux} 21.7 +<dl><dd>Debian GNU/Linux: 21.8 +\begin{itemize} 21.9 +\item http://julien.danjou.info/xen.html 21.10 +\item https://alioth.debian.org/project/showfiles.php?group\_id=30894 21.11 +\item http://wiki.xensource.com/xenwiki/DebianPackageMaintenance 21.12 +\end{itemize} 21.13 +</dd></dl> 21.14 + 21.15 +<dl><dd>SuSE 21.16 +\begin{itemize} 21.17 +\item http://en.opensuse.org/Xen\_Full\_Virtualization\_Example 21.18 +\end{itemize} 21.19 +</dd></dl> 21.20 + 21.21 +<dl><dd>Fedora: 21.22 +\begin{itemize} 21.23 +\item http://fedoraproject.org/wiki/Tools/Xen 21.24 +\item http://searchopensource.techtarget.com/tip/0,289483,sid39\_gci1205361,00.html Fedora Core 5: Virtualization-capable and ready to go 21.25 +\item http://www.fedoraproject.org/wiki/FedoraXenQuickstart 21.26 +\item http://fedoraproject.org/wiki/FedoraXenQuickstartFC5 21.27 +\end{itemize} 21.28 +</dd></dl> 21.29 + 21.30 +Ссылка про синтаксис: 21.31 +\begin{itemize} 21.32 +\item http://article.gmane.org/gmane.comp.emulators.xen.devel/27996 HVM cdrom/disk configuration changed 21.33 +\end{itemize} 21.34 + 21.35 +\subsection{OpenSolaris} 21.36 +Поддержка OpenSolaris для работы в режиме домена domU 21.37 +и в режиме dom0 находятся в процессе разработки. 21.38 + 21.39 +Подробности: 21.40 +\begin{itemize} 21.41 +\item OpenSolaris Community: Xen 21.42 +\item Solaris and Xen 21.43 +\item Finding \dq{}Ready To Use\dq{} domU Images 21.44 +\end{itemize} 21.45 + 21.46 +На последней странице доступен для загрузки (июнь 2007) образ диска для Xen domU с Solaris-b44 на борту. Все прекрасно запускается под ядром RHEL5-xen (без PAE), работает сеть. Следующий снапшот Solaris для domU однако планируется выпустить уже для xen-dom0 с PAE. 21.47 + 21.48 +Ещё: 21.49 +\begin{itemize} 21.50 +\item http://wiki.tardis.ed.ac.uk/index.php/OpenSolaris\_Xen\_domU 21.51 +\item Install OpenSolaris (SNV78) DomU at CentOS 5.1 Dom0 (x86\_64) 21.52 +\end{itemize} 21.53 + 21.54 +\subsection{NetBSD} 21.55 +<dl><dd> \textit{Основная страница: \textbf{NetBSD в Xen}} 21.56 +</dd></dl> 21.57 + 21.58 +NetBSD, наряду с Linux, была одной из первых операционных систем, 21.59 +поддерживающих Xen. 21.60 +Более того, по некоторым данным, работа Xen с NetBSD оказывается более эффективной. Смотрите, например, сравнение \url{http://users.piuha.net/martti/comp/xendom0/xendom0.html}. 21.61 + 21.62 +Запуск NetBSD в режиме хост-системы (в домене dom0) возможен. 21.63 +Запуск NetBSD в режиме гостевой ОС (в домене domU) \textbf{в паравиртуальном режиме} (требует модификации системы) возможен. 21.64 +Запуск NetBSD в режиме гостевой ОС \textbf{на процессорах с поддержкой виртуализации} возможен. 21.65 + 21.66 +Процедура по запуску NetBSD в домене domU описана здесь: 21.67 +\begin{itemize} 21.68 +\item netbsd as xen domu on suse 10.1 howto 21.69 +\item Finding \dq{}Ready To Use\dq{} domU Images 21.70 +\end{itemize} 21.71 +Хотя на последней странице сказано, что имели проблемы с NetBSD, но то было осенью 2006. На июнь 2007 взятые с сайта NetBSD бинарники ядра отлично запустились в domU (по данной инструкции) под управлением ядра RHEL5-xen (без PAE). Правда ядро netbsd-XEN3\_DOMU.gz от NetBSD-3.1 очень часто подвисало (переставало отвечать). Возможны различные варианты причин этого, однако ядро от NetBSD 4.0-BETA в тех же условиях работает без проблем. 21.72 + 21.73 +Другие материалы, касающиеся совместного использования Xen и NetBSD: 21.74 + 21.75 +\begin{itemize} 21.76 +\item NetBSD/xen Howto (англ.) 21.77 +\item http://wiki.xensource.com/xenwiki/NetBSDdomU (англ.) 21.78 +\item Xen on NetBSD (англ.) 21.79 +\end{itemize} 21.80 + 21.81 +\subsection{FreeBSD} 21.82 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/c/c3/Xen-unstable-intel-vt-freebsd.png}}\\ \textit{FreeBSD в HVM-домене Xen (3.3-unstable) на хост-системе с процессором Intel}\end{center} 21.83 + 21.84 +<dl><dd> \textit{Основная страница: \textbf{FreeBSD в Xen}} 21.85 +</dd></dl> 21.86 + 21.87 +Запуск FreeBSD в \textbf{режиме хост-системы (в домене dom0) пока что невозможен}. 21.88 + 21.89 +Запуск FreeBSD в режиме гостевой ОС (в домене domU) \textbf{в паравиртуальном режиме (требует модификации системы) уже возможен}. 21.90 +Пока что, патч не интегрирован в основную ветвь FreeBSD, 21.91 +и его необходимо накладывать вручную. 21.92 +\begin{itemize} 21.93 +\item http://www.fsmware.com/xenofreebsd/7.0/ 21.94 +\end{itemize} 21.95 + 21.96 +Запуск FreeBSD в режиме гостевой ОС \textbf{на процессорах с поддержкой виртуализации} 21.97 +возможен на хост-системах с процессором AMD начиная с 3.0.2 21.98 +и на хост-системах с процессором Intel начиная с Xen 3.3-unstable (или при некоторой доработке Xen 3.2). 21.99 + 21.100 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/8/82/Xen-vt-freebsd.png}}\\ \textit{Ошибка при запуске FreeBSD в качестве гостевой ОС на процессорах с поддержкой VT}\end{center} 21.101 + 21.102 +На более ранних версиях существует проблема 21.103 +известная как Xen Bug 622, 21.104 +которая не позволяет запускать немодифицированную систему FreeBSD 21.105 +в режиме полной виртуализации на процессорах Intel 21.106 +(при запуске на процессорах AMD этой проблемы нет). 21.107 + 21.108 +Обсуждение проблемы: 21.109 +\begin{itemize} 21.110 +\item http://lists.xensource.com/archives/html/xen-devel/2006-06/msg00113.html 21.111 +\item http://lists.freebsd.org/pipermail/freebsd-hackers/2006-July/017172.html 21.112 +\end{itemize} 21.113 + 21.114 +Патч, который может устранить проблему: 21.115 +\begin{itemize} 21.116 +\item http://lists.xensource.com/archives/html/xen-devel/2006-06/msg00081.html 21.117 +\end{itemize} 21.118 + 21.119 +При подготовке вручную образа FreeBSD для запуска в домене DomU, 21.120 +могут помочь материалы статьи FreeBSD на USB-диске. 21.121 + 21.122 +По поводу запуска FreeBSD на Xen в режиме DomU 21.123 +смотрите также: 21.124 +\begin{itemize} 21.125 +\item http://wikitest.freebsd.org/YuanJue 21.126 +\item http://www.yuanjue.net/xen/howto.html 21.127 +\end{itemize} 21.128 +Данные статьи -- о реализации domU для FreeBSD-7 от февраля (или лето) 2006. Писались студентом, для участия в конкурсе Google\_SoC\_2006 (или по результатам гранта). Потом Xen во FreeBSD-7 был заморожен и к нему разработчики вернулись только весной 2007. 21.129 + 21.130 +На момент \dq{}июнь 2007\dq{} поддержка domU присутствует только в FreeBSD-7 (developmennt), базируется на API Xen 3.1, имеются проблемы с тем, как текущий код FreeBSD-7 строит список свободной памяти (с точки зрения Xen) некорректно. 21.131 + 21.132 +По состоянию на середину февраля 2008 интеграция порта FreeBSD на Xen в основную ветвь FreeBSD так и не завершена. 21.133 + 21.134 +\subsection{OpenBSD} 21.135 +<dl><dd> \textit{Основная страница: \textbf{OpenBSD в Xen}} 21.136 +</dd></dl> 21.137 + 21.138 +Запуск OpenBSD в режиме хост-системы (в домене dom0) пока что невозможен.<br/> 21.139 +Запуск OpenBSD в режиме гостевой ОС (в домене domU) \textbf{в паравиртуальном режиме} (требует модификации системы) возможен (только без PAE!). 21.140 +Подробнее: \url{http://marc.info/?l=openbsd-misc\&m=115020845610220\&w=2}, \url{http://ropersonline.com/openbsd/xen/openbsd-xen-howto}, 21.141 +\url{http://www.seattlecentral.edu/cgi-bin/cgiwrap/dmartin/moin.cgi/Xen}<br/> 21.142 +Запуск OpenBSD в режиме гостевой ОС \textbf{на процессорах с поддержкой виртуализации} возможен. 21.143 + 21.144 +Материалы посвящённые запуску OpenBSD в паравиртуальном домене Xen: 21.145 +\begin{itemize} 21.146 +\item OpenBSD as Xen domU (англ.) 21.147 +\item [obsdfr-misc Xen 3 et openbsd] (фр.) 21.148 +\item OpenBSD/Xen, bsdtalk Christoph Egger interview transcript (англ.) 21.149 +\end{itemize} 21.150 + 21.151 +\subsection{Plan 9} 21.152 +Поддержка Plan 9 в домене domU 21.153 +возможна. 21.154 + 21.155 +Процедура инсталляции Plan9 в домене U Xen детально описана на 21.156 +странице Installing in Xen 3.0 (англ.). 21.157 + 21.158 +При подготовке домена U к запуску 21.159 +потребуются файлы из дерева исходников Plan9, 21.160 +которые можно взять здесь \url{http://plan9.bell-labs.com/sources/xen/xen3/}. 21.161 + 21.162 +\subsection{GNU/Hurd} 21.163 +GNU/Hurd можно запустить в паравиртуальном домене Xen. 21.164 +Гипервизор Xen и ядро домена 0 должны быть без поддержки PAE. 21.165 + 21.166 +Подробности: 21.167 +\begin{itemize} 21.168 +\item http://www.bddebian.com/~wiki/microkernel/mach/gnumach/ports/xen/ 21.169 +\end{itemize} 21.170 + 21.171 +\subsection{Windows} 21.172 +<dl><dd> Основная статья: \textit{Windows в Xen} 21.173 +</dd></dl> 21.174 + 21.175 +Запуск Windows в режиме хост-системы (в домене dom0) пока что невозможен, 21.176 +но планируется в будущем. 21.177 +Появление первых общедоступных проектов в этой области запланировано 21.178 +на конец 2006 года и полноценная поддержка -- на 2007 год \url{http://www.microsoft.com/presspass/press/2006/jul06/07-17MSXenSourcePR.mspx}. 21.179 +Дополнительно почитать о поддержке Windows Server в dom0 можно почитать в 21.180 +в списке рассылки Xen 21.181 +и на Slashdot. 21.182 + 21.183 +Запуск Windows в режиме гостевой ОС (в домене domU) \textbf{в паравиртуальном режиме} (требует модификации системы) 21.184 +был осуществлён разработчиками Xen, но в силу ограничений поставленных компанией Microsoft этот способ не публикуется. 21.185 + 21.186 +Запуск Windows в режиме гостевой ОС \textbf{на процессорах с поддержкой виртуализации} возможен 21.187 +и описан. В настоящее время существуют проблемы производительности 21.188 +при использовании Windows в домене XenU, связанный с неэффективной 21.189 +драйверной поддержкой. 21.190 +Проблемы обсуждаются в списке рассылки Xen 21.191 +\url{http://lists.xensource.com/archives/html/xen-users/2006-04/msg00144.html}, \url{http://lists.xensource.com/archives/html/xen-devel/2006-01/msg00795.html}, \url{http://lists.xensource.com/archives/html/xen-devel/2005-12/msg00342.html}, \url{http://lists.xensource.com/archives/html/xen-devel/2006-02/msg00429.html}, \url{http://lists.xensource.com/archives/html/xen-users/2005-09/msg00410.html}, \url{http://lists.xensource.com/archives/html/xen-devel/2006-07/msg00259.html}, \url{http://lists.xensource.com/archives/html/xen-users/2005-09/msg00468.html} 21.192 + 21.193 +\subsection{Minix 3} 21.194 +Minix 3 работает под Xen (Xen 2) в паравиртуальном режиме. 21.195 + 21.196 +Подробнее: 21.197 +\begin{itemize} 21.198 +\item http://minixonxen.skynet.ie/cgi-bin/trac.cgi/wiki/Report 21.199 +\item http://minixonxen.skynet.ie/html/ 21.200 +\end{itemize} 21.201 + 21.202 +\subsection{ReactOS} 21.203 +Запуск ReactOS в паравиртаульном режиме в Xen возможен. 21.204 +Подробности о запуске 21.205 +на странце http://www.reactos.org/wiki/index.php/Xen\_port. 21.206 + 21.207 +\subsection{Дополнительная информация} 21.208 +\begin{itemize} 21.209 +\item http://wiki.xensource.com/xenwiki/OSCompatibility 21.210 +\item http://www.opensolaris.org/os/community/os\_user\_groups/czosug/czosug11\_xenaware\_oses.pdf 21.211 +\item Virtualization and BSD 21.212 +\end{itemize} 21.213 +
22.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 22.2 +++ b/xen/pxe.tex Tue Jul 01 16:16:44 2008 +0300 22.3 @@ -0,0 +1,75 @@ 22.4 +\section{Бездисковая загрузка узла Xen с помощью PXE} 22.5 + 22.6 +Здесь рассматривается процедура загрузки 22.7 +домена 0 Xen с помощью PXELINUX на бездисковой станции. 22.8 + 22.9 +\subsection{Бездисковая загрузка Xen} 22.10 +Бездисковая загрузка узла под управлением Xen 22.11 +может потребоваться при построении кластера 22.12 +виртуализации: хост-системы, 22.13 +на которых будут выполняться домены Xen не содержат дисков, 22.14 +нужна только их вычислительная мощность. 22.15 +Загруженные впоследствии домены Xen используют в качестве 22.16 +дисковых систем сетевые хранилища, доступные, например, по AoE, 22.17 +GNBD или iSCSI. 22.18 + 22.19 +Варианты загрузки бездискового 22.20 +узла, на котором будет работать Xenolinux: 22.21 +\begin{enumerate} 22.22 +\item Использовать GRUB; 22.23 +\item Использовать PXELINUX и специальный модуль \textbf{mboot32}. 22.24 +\end{enumerate} 22.25 +Здесь мы рассматрим процедуру загрузки 22.26 +с помощью PXELINUX. 22.27 + 22.28 +Бездисковая загрузка узла в соответствии с описанной процедурой 22.29 +невозможна при использовании PXELINUX версии меньше 2.12. 22.30 + 22.31 +\subsection{Подготовка сервера бездисковой загрузки} 22.32 +Процедура подготовки сервера загрузки 22.33 +при условии что в качестве загрузчика используется PXELINUX, 22.34 +описана на странице \htmladdnormallinkfoot{PXE}{http://xgu.ru/wiki/PXE}. 22.35 + 22.36 +\subsection{Настройка сервера для загрузки Xen} 22.37 +После этого, необходимо: 22.38 + 22.39 +\textbf{1.} Скачать загрузчик \textbf{mboot.c32} и разместить его в корне \textbf{tftpboot}. 22.40 + 22.41 +Получить загрузкик можно по адресу: 22.42 +\begin{itemize} 22.43 +\item http://www.cl.cam.ac.uk/~tjd21/tmp/mboot.c32 22.44 +\item http://xgu.ru/download/mboot.c32 22.45 +\end{itemize} 22.46 + 22.47 +\textbf{2.} Скопировать гипервизор Xen, ядро Linux и файл initrd в корень \textbf{tftpboot}. 22.48 + 22.49 +\textbf{3.} Отредактировать конфигурационный файл pxelinux и добавть в него вызов mboot.c32. 22.50 +Модули mboot32 нужно разделять с помощью символов \verb|---| (три минуса подряд). 22.51 + 22.52 +Пример: 22.53 + 22.54 +\begin{verbatim} 22.55 +DEFAULT mboot.c32 xen-2.0.5.gz dom0_mem=258048 --- 22.56 + vmlinuz-2.6.10-xen0 ro console=tty root=/dev/hda --- initrd-2.6.10-xen0 22.57 +\end{verbatim} 22.58 + 22.59 +Другой пример: 22.60 + 22.61 +\begin{verbatim} 22.62 +label xen 22.63 + kernel pxelinux/com32/modules/mboot.c32 22.64 + append boot/xen.gz nosmp noacpi --- boot/res-1-kernel 22.65 + ramdisk_size=131072 ramdisk_blocksize=1024 console=ttyS0 apm=off id=1 22.66 + qrm=10.0.1.1 ip=10.0.0.99:10.0.1.1:10.0.0.1:255.0.0.0 22.67 + BOOTIF=00:0d:60:d5:d6:3b --- boot/res-1-initrd.img 22.68 + ipappend 3 22.69 +\end{verbatim} 22.70 + 22.71 +\subsection{Дополнительная информация} 22.72 +\begin{itemize} 22.73 +\item \htmladdnormallinkfoot{Бездисковая загрузка узла Xen с помощью PXE}{http://xgu.ru/wiki/xen/pxe} (рус.) 22.74 +\item http://lists.xensource.com/archives/html/xen-devel/2006-08/msg00009.html (англ.) — обсуждение в списке рассылки Xen-devel 22.75 +\item http://lists.xensource.com/archives/html/xen-users/2005-05/msg00039.html (англ.) — оригинальное сообщение в списке рассылки Xen-users 22.76 +\item \htmladdnormallinkfoot{Booting Xen hypervisor}{http://syslinux.zytor.com/archives/2006-November/007725.html} (англ.) — пример в списке рассылки syslinux 22.77 +\end{itemize} 22.78 +
23.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 23.2 +++ b/xen/resources.tex Tue Jul 01 16:16:44 2008 +0300 23.3 @@ -0,0 +1,78 @@ 23.4 +\section{Распределение ресурсов межде доменами Xen} 23.5 + 23.6 +\subsection{Распределение процессорной мощности} 23.7 +Виртуальные процессоры (VCPU) виртуальных машин автоматически распределяются 23.8 +планировщиком между доступными физическими процессорами. 23.9 +Назначать соответствие виртуального процесса реальному вручную не нужно. 23.10 +Однако, при возникновении такой необходимости, 23.11 +можно указать на каком процессоре будет выполняться виртуальный процессор. 23.12 +Это делается с помощью команды \textbf{xm vcpu-pin}. 23.13 + 23.14 +Каждый домен характеризуется двумя числами -- весом (weight) и лимитом (cap). 23.15 + 23.16 +Домен с весом 512 получает на том же хосте в два раза больше 23.17 +процессорного времени чем домен с весом 256. 23.18 +Вес может изменяться в диапазоне от 1 до 65535, 23.19 +и он равен по умолчанию 256. 23.20 + 23.21 +Значение лимита (cap) может использоваться для того чтобы указать максимальную величину 23.22 +процессорного времени, который может получить домен, даже в случае, если хост-система 23.23 +простаивает. Значение выражается в процентах: 100 это 1 физический процессор, 50 это половина процессора, 400 -- 4 процессора и т.д. 23.24 +Значение по умолчанию равно 0, что означает, что верхнее ограничение отсутствует. 23.25 + 23.26 +Значения лимита и веса можно просматривать и модифицировать с помощью команд: 23.27 + 23.28 +\begin{itemize} 23.29 +\item \textbf{xm sched-credit -d domain} — показать значение вес (weight) и верх (cap) для домена 23.30 +\item \textbf{xm sched-credit -d domain -w weight} — установить вес равным \textbf{weight} 23.31 +\item \textbf{xm sched-credit -d domain -c cap} — установить верх равным \textbf{cap} 23.32 +\end{itemize} 23.33 + 23.34 +Для того чтобы эти значения сохранялись всегда для домена, 23.35 +их нужно указать в конфигурационном файле 23.36 +с помощью параметров: 23.37 +\begin{itemize} 23.38 +\item cpu\_cap — верх (по умолчанию 0) 23.39 +\item cpu\_weight — вес (по умолчанию 256) 23.40 +\end{itemize} 23.41 + 23.42 +\subsection{Распределение сетевых ресурсов} 23.43 +Распределение сетевых ресурсов между виртуальными машинами 23.44 +выполняется штатными средствами управления трафиком 23.45 +хост-системы. В частности, с помощью механизмов QoS. 23.46 + 23.47 +\subsection{Распределение памяти} 23.48 +Объём памяти, выделяемой виртуальной машине, 23.49 +задаётся при её настройке в конфигурационном файле 23.50 +с помощью опции \textbf{mem}. 23.51 +Параметр может быть указан с суффиксом B, K, M или G, что означает байты, килобайты, мегабайты или гигабайты соответственно. 23.52 +По умолчанию подразумевается, что объём памяти указан в килобайтах. 23.53 + 23.54 +Значение памяти, выделяемой для домена 0, задаётся как параметр \textbf{dom0\_mem} гипервизора xen. 23.55 + 23.56 +По результатам тестирования RHEL 5: 23.57 +\begin{itemize} 23.58 +\item нельзя добавить оперативной памяти больше чем указано в конфигурационном файле, т.е. лучше в конфигурационном файле указать больше, а после запуска уменьшить, с помощью xm mem-set 23.59 +\item по-умолчанию объем оперативной памяти все же в мегабайтах 23.60 +\end{itemize} 23.61 + 23.62 +Подробнее: \url{http://lists.xensource.com/archives/html/xen-users/2007-05/msg00548.html} 23.63 + 23.64 +\subsection{Распределение устройств} 23.65 +Устройство можно выделить 23.66 +в монопольное пользование домену. 23.67 + 23.68 +Расширители PCI: 23.69 +\begin{itemize} 23.70 +\item http://hardware.mcse.ms/archive66-2005-5-188216.html 23.71 +\item http://mobilityelectronics.com/expansion/products/pci\_expansion/7slot3233/index.html 23.72 +\item http://www.nexcom.com.tw/index.jsp 23.73 +\item http://www.portwell.com/bpicmg.htm 23.74 +\end{itemize} 23.75 + 23.76 +\subsection{Приоритезация ввода/вывода} 23.77 + 23.78 +Приоритезация ввода/вывода доменами Xen 23.79 +выполняется средствами CFQ Linux 23.80 +в домене 0. 23.81 +
24.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 24.2 +++ b/xg-scale.tex Tue Jul 01 16:16:44 2008 +0300 24.3 @@ -0,0 +1,62 @@ 24.4 +\documentclass[10pt,a4paper,oneside,fleqn,leqno]{article} 24.5 + 24.6 +%\usepackage{mathtext} 24.7 +%\usepackage{amsfonts} 24.8 +\usepackage{ucs} 24.9 +\usepackage[utf8x]{inputenc} 24.10 +\usepackage[american,russian]{babel} 24.11 +\usepackage[dvipdf]{graphicx} 24.12 +\usepackage[pdftex,% 24.13 + bookmarks,% 24.14 + unicode,% 24.15 + pdftitle={XG-SCALE},% 24.16 + pdfauthor={Igor Chubin},% 24.17 + colorlinks]{hyperref} 24.18 +%\usepackage{tabularx} 24.19 +%\usepackage{amsthm} 24.20 +%\usepackage{amssymb} 24.21 +%\usepackage{fancyhdr} 24.22 +\pagestyle{plain} 24.23 + 24.24 +\author{Игорь Чубин} 24.25 +\title{Построение масштабируемых систем на базе операционной системы GNU/Linux и системы виртуализации Xen} 24.26 + 24.27 +\begin{document} 24.28 + 24.29 +\include{raid} 24.30 +\include{lvm} 24.31 +\include{evms} 24.32 + 24.33 +\include{aoe} 24.34 +\include{drbd} 24.35 +\include{bridge} 24.36 + 24.37 +\include{xen} 24.38 +\include{xen/hw} 24.39 +\include{xen/os} 24.40 +\include{xen/installation} 24.41 +\include{xen/linux} 24.42 +\include{xen/block} 24.43 +\include{xen/block-attach} 24.44 +\include{xen/net} 24.45 +\include{xen/resources} 24.46 +\include{xen/io} 24.47 + 24.48 +\include{windowsxp} 24.49 +\include{xen/pxe} 24.50 + 24.51 +%%%Виртуализаци существующей инфраструктуры 24.52 +\include{xen/export} 24.53 +\include{xen/hvm2pv} 24.54 +% 24.55 +%%%Построение отказоустойчивого кластера виртуальных машин Xen+DRBD} 24.56 +\include{xen/drbd} 24.57 +\include{xen-drbd-install} 24.58 +\include{xen-drbd} 24.59 + 24.60 + 24.61 + 24.62 + 24.63 +\end{document} 24.64 + 24.65 +