xg-scale
view xen/linux.tex @ 4:253d66dd74bb
Добавлено подробное описание управления памятью домена и выделением устройств домену
author | Igor Chubin <igor@chub.in> |
---|---|
date | Sun Jul 06 23:27:46 2008 +0300 (2008-07-06) |
parents | |
children |
line source
1 \section{Linux в Xen}
3 На этой странице описана процедура подготовки
4 гостевой системы под управлением Linux
5 для работы в качестве пользовательского домена Xen
6 (domain U).
8 \subsection{Начальные требования}
9 <graphviz>
10 digraph G \{
11 \begin{verbatim}
12 node [shape=rectangle];
13 a [label="Подготовка\nдомена 0"];
14 b [label="Подготовка\nдомена U",bgcolor=cyan,style=filled];
15 c [label="Запуск и эксплуатация\nсистемы"];
16 a -> b;
17 b -> c;
18 \end{verbatim}
19 \}
20 </graphviz>
22 Для выполнение описанных ниже действий
23 необходимо наличие проинсталлированной и настроенной
24 хост-системы Xen (домена 0).
25 Как это сделать описано на странице Инсталляция Xen.
27 Предполагается, что в домене 0 установлен Debian GNU/Linux.
28 Для других дистрибутивов некоторые действия будут выполняться
29 иначе.
31 \subsection{Подготовка образа гостевой системы}
32 \subsubsection{Подготовка дисковых разделов для использования в качестве дисков виртуальной машины}
33 Для того чтобы разделы виртуальной машины
34 соответствовали дисковым разделам реальной машины,
35 используйте следующие шаги:
37 \begin{verbatim}
38 node [shape=rectangle];
39 a [label="Подготовка\nдомена 0"];
40 b [label="Подготовка\nдомена U",bgcolor=cyan,style=filled];
41 c [label="Запуск и эксплуатация\nсистемы"];
42 a -> b;
43 b -> c;
44 \end{verbatim}
46 В том случае, если в виртуальной машине должно быть
47 несколько дисковых разделов,
48 подготовьте их.
49 Например, для /usr:
51 \begin{verbatim}
52 node [shape=rectangle];
53 a [label="Подготовка\nдомена 0"];
54 b [label="Подготовка\nдомена U"];
55 c [label="Запуск и эксплуатация\nсистемы",bgcolor=cyan,style=filled];
56 a -> b;
57 b -> c;
58 \end{verbatim}
60 Если вам необходимо пространство подкачки (swap) в виртуальной машине,
61 подготовьте его с помощью команды mkswap:
63 \begin{verbatim}
64 # mkswap /dev/hdX
65 \end{verbatim}
67 \subsubsection{Подготовка файлов для использования в качестве диска виртуальной машины}
68 Создайте файл для использования в качестве основного
69 диска виртуальной машины.
71 \begin{verbatim}
72 # dd if=/dev/zero of=/xen/images/debian-host1.img bs=1M count=<size_in_MB>
73 # mkfs.ext3 /xen/images/debian-host1.img
74 # mount -o loop /srv/debian-host1.img /mnt
75 \end{verbatim}
77 В том случае, если в виртуальной машине должно быть
78 несколько дисковых разделов,
79 подготовьте их.
80 Например, для /usr:
82 \begin{verbatim}
83 # dd if=/dev/zero of=/xen/images/debian-host1-usr.img bs=1M count=<size_in_MB>
84 # mkfs.ext3 /xen/images/debian-host1-usr.img
85 # mkdir /mnt/usr
86 # mount -o loop /xen/images/debian-host1-usr.img /mnt/usr
87 \end{verbatim}
89 Если вам необходимо пространство подкачки (swap) в виртуальной машине,
90 подготовьте его с помощью команды mkswap:
92 \begin{verbatim}
93 # mkswap /dev/hdX
94 \end{verbatim}
96 \subsubsection{Подготовка виртуальной системы под управлением Debian GNU/Linux}
98 \paragraph{Инсталляция ОС Debian GNU/Linux}
99 Этот этап может быть выполнен проще,
100 если использовать xen-tools.
101 Ниже показано, как провести инсталляцию
102 системы вручную.
104 Смотрите таже \url{http://www.debuntu.org/2006/05/14/51-how-to-installing-debian-etch-from-a-running-debian-based-system/1/}.
106 Запустите \textbf{debootstrap} для инсталляция базы
107 системы:
109 \begin{verbatim}
110 # debootstrap sarge /mnt http://debian.org.ua/debian
111 \end{verbatim}
113 Скопируйте пакет ядром для работы с Xen,
114 который был подготовлен ранее,
115 в новую виртуальную машину:
117 \begin{verbatim}
118 # cp linux-xen0-2.6.16-xen_10.00.Custom_i386.deb /mnt/root
119 \end{verbatim}
121 Сделайте новую файловую систему корневой (с помощью chroot):
123 \begin{verbatim}
124 # chroot /mnt /bin/bash
125 \end{verbatim}
127 Проинсталлируйте пакет с ранее подготовленным
128 ядро Xen:
130 \begin{verbatim}
131 # dpkg -i /root/linux-xen0-2.6.16-xen_10.00.Custom_i386.deb
132 \end{verbatim}
134 Измените запись, соответствующую корневой системе в файле /etc/fstab:
136 \begin{verbatim}
137 # vi /etc/fstab
138 /dev/hda1 / ext3 defaults,errors=remount-ro 0 1
139 \end{verbatim}
141 Если используется несколько дисковых разделов
142 в виртуальной машине, перечислите их:
144 \begin{verbatim}
145 /dev/hda2 /usr ext3 defaults 0 2
146 /dev/hda3 /var ext3 defaults 0 2
147 ...
148 \end{verbatim}
150 Запустите программу \textbf{base-config} для установки базовой
151 системы Debian.
153 \begin{verbatim}
154 # base-config new
155 \end{verbatim}
157 Измените конфигурацию сети в виртуальной машине:
159 \begin{verbatim}
160 # vi /etc/network/interfaces
161 # vi /etc/resolv.conf
162 # vi /etc/hosts
163 \end{verbatim}
165 Отключите использование TLS,
166 в противном случае работа системы может сильно замедлиться.
168 \begin{verbatim}
169 # mv /lib/tls /lib/tls.disabled
170 \end{verbatim}
172 В том случае, если используется дистрибутив Etch,
173 проинсталлируйте \texttt{libc6-xen}.
175 \begin{verbatim}
176 # apt-get install libc6-xen
177 \end{verbatim}
179 Отключите лишние терминалы getty,
180 а первый терминал направьте на файл \texttt{/dev/console}
181 вместо \texttt{/dev/tty1}:
183 \begin{verbatim}
184 1:2345:respawn:/sbin/getty 38400 /dev/console
185 #2:23:respawn:/sbin/getty 38400 tty2
186 #3:23:respawn:/sbin/getty 38400 tty3
187 #4:23:respawn:/sbin/getty 38400 tty4
188 #5:23:respawn:/sbin/getty 38400 tty5
189 #6:23:respawn:/sbin/getty 38400 tty6
190 \end{verbatim}
192 Если в виртуальной машине будут загружаться модули ядра,
193 установить пакет \texttt{module-init-tools}
194 (обязательно для ядер 2.6 domU).
196 \begin{verbatim}
197 # apt-get install module-init-tools
198 \end{verbatim}
200 На этом инсталляция ОС в виртуальной машине завершена,
201 и можно завершить работу оболочки с изменённой корневой системой (chrooted shell).
203 \begin{verbatim}
204 # exit
205 \end{verbatim}
207 Если вы создавали несколько разделов в виртуальной машине,
208 размонтируйте их, начиная с самой глубокой.
210 \begin{verbatim}
211 # umount /mnt/usr
212 # umount /mnt/var
213 \end{verbatim}
215 После чего размонтируйте корневую файловую систему
216 виртуальной машины.
218 \begin{verbatim}
219 # umount /mnt
220 \end{verbatim}
222 \paragraph{Конфигурирование виртуальной машины}
223 Необходимо создать конфигурационный файл виртуальной
224 машины.
225 Пусть виртуальная машина называется debian-vm0.
227 \begin{verbatim}
228 # vi /etc/xen/debian-vm0
229 # Kernel to use
230 kernel = "/boot/xen0-linux-2.6.16-xen"
231 # Memory in megabytes
232 memory = 128
233 # Your domain's name
234 name = "debian-vm0"
235 # Root device
236 root = "/dev/hda1 ro"
237 # Don't forget to specify your bridge correctly here
238 vif = [ 'mac=aa:00:00:00:00:d2, bridge=br-xen' ]
239 \end{verbatim}
241 В том случае, если использует физический дисковый раздел:
243 \begin{verbatim}
244 disk = [ 'phy:/dev/hdX,hda1,w' ]
245 \end{verbatim}
247 В том случае, если используется несколько разделов:
249 \begin{verbatim}
250 disk = [ 'phy:/dev/hdX,hda1,w', 'phy:/dev/hdY,hda2,w' ]
251 \end{verbatim}
253 Если вместо раздела используется файл,
254 конфигурация дисковой подсистемы выглядит так:
256 \begin{verbatim}
257 disk = [ 'file:/xen/images/debian-host1.img,hda1,w' ]
258 \end{verbatim}
260 В том случае, если используется несколько файлов,
261 строка должна выглядеть так:
263 \begin{verbatim}
264 disk = [ 'file:/xen/images/debian-host1.img,hda1,w', 'file:/xen/images/debian-host1-usr.img,hda2,w' ]
265 \end{verbatim}
267 Обратите внимание на то, чтобы записи о диска в конфигурации
268 виртуальной машины соответствовали файлу \texttt{/etc/fstab}
269 операционной системы этой машины.
271 \subsubsection{Инсталляция и настройка Fedora Core в domU}
273 При условии, что домен 0 работает под управлением Debian GNU/Linux,
274 а образ гостевой системы подмонтирован в каталог /mnt,
275 процедура инсталляции выглядит следующим образом:
277 \begin{verbatim}
278 %# apt-get install yum
279 %# yum -c /tmp/yum-xen.conf --installroot=/mnt -y groupinstall Base
280 \end{verbatim}
282 Пример конфигурационного файла \texttt{yum-xen.conf} (вы можете использовать другой репозиторий и другой уровень отладки):
284 \begin{verbatim}
285 [main]
286 cachedir=/var/cache/yum
287 debuglevel=2
288 logfile=/var/log/yum.log
289 exclude=*-debuginfo
290 gpgcheck=0
291 obsoletes=1
292 reposdir=/dev/null
294 [base]
295 name=Fedora Core 6 - i386 - Base
296 #mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-6
297 baseurl=http://redhat.download.fedoraproject.org/pub/fedora/linux/core/6/i386/os/
298 enabled=1
300 [updates-released]
301 name=Fedora Core 6 - i386 - Released Updates
302 #mirrorlist=http://fedora.redhat.com/download/mirrors/updates-released-fc6
303 baseurl=http://redhat.download.fedoraproject.org/pub/fedora/linux/core/updates/6/i386/
304 enabled=1
305 \end{verbatim}
307 Если при инсталляции вы получаете ошибку
309 \begin{verbatim}
310 Failed to add groups file for repository: base
311 Error: No Groups on which to run command
312 \end{verbatim}
314 то модифицируйте код \textit{yum} следующим образом:
316 \begin{verbatim}
317 # cp /usr/share/python-support/yum/yum/comps.py{,.ORIG}
318 # vi /usr/share/python-support/yum/yum/comps.py
319 # diff /usr/share/python-support/yum/yum/comps.py{.ORIG,}
320 124c124
321 < if type not in ('mandatory', 'default', 'optional'):
322 ---
323 > if type not in ('mandatory', 'default', 'optional', 'conditional'):
324 143c143
325 < if type not in ('mandatory', 'default', 'optional'):
326 ---
327 > if type not in ('mandatory', 'default', 'optional', 'conditional'):
328 \end{verbatim}
330 Установленную систему можно доработать.
332 \textit{Создать некоторые каталоги и файлы устройств.}
334 \begin{verbatim}
335 %# mkdir /mnt/{dev,proc,etc}
336 %# for i in console null zero ; do /sbin/MAKEDEV -d /mnt/dev -x $i ; done
337 \end{verbatim}
339 \textit{Отключить TLS}.
341 \begin{verbatim}
342 %# mv /mnt/lib/tls /mnt/lib/tls-disabled
343 \end{verbatim}
345 \textit{Создать /etc/fstab}
347 \begin{verbatim}
348 %# cat <<EOL > /mnt/etc/fstab
349 /dev/sda1 / ext3 defaults 1 1
350 none /dev/pts devpts gid=5,mode=620 0 0
351 none /dev/shm tmpfs defaults 0 0
352 none /proc proc defaults 0 0
353 none /sys sysfs defaults 0 0
354 /dev/sda2 /mnt ext3 defaults 1 2
355 /dev/sda3 swap swap defaults 0 0
356 EOL
357 \end{verbatim}
359 \textit{Настроить сетевые интерфейсы}.
361 \begin{verbatim}
362 %# cat <<EOL > /mnt/etc/sysconfig/network
363 NETWORKING=yes
364 HOSTNAME=localhost.localdomain
365 EOL
367 cat <<EOL > /mnt/etc/sysconfig/network-scripts/ifcfg-eth0
368 ONBOOT=yes
369 DEVICE=eth0
370 BOOTPROTO=dhcp
371 EOL
372 \end{verbatim}
374 \textit{Скопировать модули ядра}
376 \begin{verbatim}
377 %# cp -R /lib/modules/2.6.*xen* /mnt/lib/modules/
378 \end{verbatim}
380 \textit{Установить пароль root\rq{}а}
382 \begin{verbatim}
383 %$ sudo chroot /mnt
384 bash-3.1# pwconv
385 bash-3.1# passwd
386 Changing password for user root.
387 New UNIX password:
388 Retype new UNIX password:
389 passwd: all authentication tokens updated successfully.
390 bash-3.1# exit
391 \end{verbatim}
393 \textit{Отключить сообщения об ошибках ядра на консоль} (не обязательно)
395 \begin{verbatim}
397 \end{verbatim}
399 После того как инсталляция закончена,
400 можно попробовать запустить домен.
402 \begin{verbatim}
403 %# umount /mnt
404 %# xm console -c fc
405 \end{verbatim}
407 (здесь \textit{fc} это конфигурационный файл домена).
409 \begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/9/90/Fc-in-xen.png}}\\ \textit{}\end{center}
411 \subsubsection{Инсталляция и настройка других дистрибутивов Linux в domU}
412 \begin{itemize}
413 \item Centos5 — описание процедуры подготовки domU для Centos5
414 \end{itemize}
416 \subsubsection{Инсталляция Debian из-под других дистрибутивов Linux}
418 \begin{verbatim}
419 %# wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap-udeb_0.3.3_i386.udeb
420 %# ar t debootstrap-udeb_0.3.3_i386.udeb
421 %# mkdir debootstrap
422 %# cd debootstrap
423 %# tar xvzf ../data.tar.gz
424 \end{verbatim}
426 После этого инсталляция с помощью \textit{./deboostrap} выполняется как обычно.
428 \subsection{Запуск виртуальной машины}
429 <graphviz>
430 digraph G \{
431 \begin{verbatim}
432 node [shape=rectangle];
433 a [label="Подготовка\nдомена 0"];
434 b [label="Подготовка\nдомена U"];
435 c [label="Запуск и эксплуатация\nсистемы",bgcolor=cyan,style=filled];
436 a -> b;
437 b -> c;
438 \end{verbatim}
439 \}
440 </graphviz>
442 \begin{verbatim}
443 # xm create -c debian-vm0
444 \end{verbatim}
446 Данная команда запустит новую виртуальную машину и создаст
447 подключенную к ней консоль (ключ -c).
448 Можно войти в систему от имени пользователя
449 root и настроить сетевой интерфейс eth0.
451 Обратите внимание на то, что на консоли (\texttt{/dev/console})
452 по умолчанию комбинация клавиш Ctrl-C не настроена
453 для прерывания процессов.
455 Отключиться от консоли виртуальной машины вернуться в
456 терминал, из которого выполнялось подключение/запуск,
457 можно с помощью комбинации Ctrl-].
459 Вернуться на отключенную консоль
460 можно с помощью команды:
462 \begin{verbatim}
463 # xm console debian-vm0
464 \end{verbatim}
466 Остановить домен можно командой:
468 \begin{verbatim}
469 # xm shutdown -H debian-vm0
470 \end{verbatim}
472 Выключить домен (как будто бы вырубить виртуальную машину
473 по питанию), можно с помощью команды:
475 \begin{verbatim}
476 # xm destroy debian-vm0
477 \end{verbatim}
479 Для получения полного списка команд, таких как shutdown, destroy
480 и т.д. введите:
482 \begin{verbatim}
483 # xm help
484 \end{verbatim}
486 Для того чтобы виртуальная машина (domU) загружалась автоматически,
487 когда загружает основная система (dom0),
488 необходимо сделать ссылку на
489 конфигурационный файл виртуальной машины:
491 \begin{verbatim}
492 # ln -s <configfile> /etc/xen/auto/
493 \end{verbatim}
495 \subsection{Дополнительные вопросы}
496 \subsubsection{Сборка ядра Linux под Xen в Debian}
497 <dl><dd> \textit{Основная страница: \textbf{Сборка ядра Linux под Xen в Debian}}
498 </dd></dl>
500 Ядро Linux, с поддержкой Xen, находящееся в репозитории Debian GNU/Linux
501 собрано с поддержкой PAE.
502 С другой стороны, большое количество систем (FreeBSD, NetBSD, Plan 9 и др.), работающих как гостевые системы в паравиртуальном домене Xen
503 не поддерживают PAE.
504 В этом случае потребуется пересобрать ядро домена 0
505 без поддержки PAE.
506 Пересборка ядра может потребоваться и в других случаях.
508 \subsection{Возможные проблемы при подготовке и запуске}
509 Множество проблем, с которыми можно столкнуться
510 при подготовке и запуске гостевой системы Xen,
511 описано на странице Xen FAQ.
513 \subsubsection{Возможные проблемы с udev}
514 При старте домена может возникнуть такая проблема:
515 домен не стартует, на экран выдаётся сообщение
516 об ошибке:
518 \begin{verbatim}
519 Device 768 (vbd) could not be connected. Hotplug scripts not working.
520 \end{verbatim}
522 \textit{Номер устройства (768) может отличаться.}
524 Если такая проблема возникла, причём она не пропадает
525 ни при отключении сетевых интерфейсов в виртуальной машине;
526 ни при изменении конфигурации дисков, проблема может быть связана с \textbf{udev}.
528 Убедитесь, что udev достаточно новый.
529 Последние версии udev находятся здесь: http://kernel.org/pub/linux/utils/kernel/hotplug/
531 Проверьте, есть ли в конфигурации udev правила xen.
533 Если нет, нужно их добавить.
534 Нужно создать файл \texttt{xen-backend.rules}
535 в каталоге \texttt{/etc/udev/rules.d} следующего содержания:
537 \begin{verbatim}
538 # cat /etc/udev/rules.d/xen-backend.rules
539 SUBSYSTEM=="xen-backend", KERNEL=="tap*", RUN+="/etc/xen/scripts/blktap $env{ACTION}"
540 SUBSYSTEM=="xen-backend", KERNEL=="vbd*", RUN+="/etc/xen/scripts/block $env{ACTION}"
541 SUBSYSTEM=="xen-backend", KERNEL=="vtpm*", RUN+="/etc/xen/scripts/vtpm $env{ACTION}"
542 SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="online", RUN+="$env{script} online"
543 SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="offline", RUN+="$env{script} offline"
544 SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/etc/xen/scripts/xen-hotplug-cleanup"
545 KERNEL=="evtchn", NAME="xen/%k"
546 \end{verbatim}
548 Если такой файл \texttt{xen-backend.rules} уже есть,
549 можно переименовать его или создать символическую ссылку,
550 содержащую номер в названии. Правило должно грузиться предпоследним.
552 \begin{verbatim}
553 # cd /etc/udev/rules.d
554 # mv xen-backend.rules 92-xen-backend.rules
555 \end{verbatim}
557 После этого нужно перезапустить udev и попробовать
558 стартануть домен снова.
560 \begin{verbatim}
561 # ps aux | grep udev
562 root 3321 0.0 0.2 1768 516 ? S<s 22:51 0:00 udevd --daemon
563 root 9349 0.0 0.2 1860 640 pts/2 S+ 23:27 0:00 grep udev
564 # udevd --daemon
565 # ps aux | grep udev
566 root 9352 0.0 0.2 1768 516 ? S<s 23:28 0:00 udevd --daemon
567 root 9356 0.0 0.2 1860 640 pts/2 S+ 23:29 0:00 grep udev
568 \end{verbatim}
570 Дополнительные сведения о проблеме: \url{http://marc.theaimsgroup.com/?l=xen-users\&m=114319459529175\&w=2}