xg-scale

view xen/hvm2pv.tex @ 0:4730a0d07d88

Исходники курса после первого прочтения.
Правки (которых должно быть много),
ещё пока не вносились.
author Igor Chubin <igor@chub.in>
date Tue Jul 01 16:16:44 2008 +0300 (2008-07-01)
parents
children ae9c8cec3315
line source
1 \section{Преобразование HVM-домена Xen в паравиртуальный}
3 Здесь описывается каким образом можно преобразовать
4 HVM-машину в паравиртуальную.
5 Такое преобразование возможно только в том случае,
6 если для гостевой операционной системы существует ядро,
7 способное работать в паравиртуальном домене Xen.
8 За некоторыми исключениями, это означает,
9 что в настоящий момент преобразование HVM-домена
10 в паравиртуальный возможно только для ОС Linux.
12 \subsection{Способы подготовки к паравиртуализации}
13 Самый простой способ:
14 загрузиться непосредственно в реальной машине и подготовить её к паравиртуализации.
15 Однако, этот способ не всегда доступен. Например, исходной машины уже может не быть или она может быть занята
16 и недоступна для экспериментов, а образ её есть.
17 Можно загрузить этот образ в HVM-домене или эмуляторе,
18 однако быстрее будет непосредственно обратиться к образу
19 и подготовить его к запуску в паравиртуальном режиме.
21 \subsection{Доступ к файловой системе виртуальной машины}
22 Машина должна быть выключена.
23 Иначе можно повредить файловые системы.
25 С помощью \textit{losetup} нужно подключить диск виртуальной машины к блочному устройству.
26 \begin{verbatim}
27 %$ losetup -d /dev/loop0 virtual-disk
28 \end{verbatim}
30 После этого посмотреть информацию о диске с помощью fdisk:
31 \begin{verbatim}
32 %$ losetup -d /dev/loop0 virtual-disk
33 \end{verbatim}
35 Здесь есть какой-то маленький раздел (вероятно /boot)
36 и LVM.
38 Снова вызовите losetup, и подключите уже отдельный раздел к другому
39 блочному устройству.
41 Например, для раздела /boot:
43 \begin{verbatim}
44 %$ losetup -o $((512*63)) /dev/loop1 /dev/loop0
45 %$ mount /dev/loop1 /mnt
46 \end{verbatim}
48 Ключ \texttt{-o} указывает отступ, который нужно сделать от начала файла
49 при подключении образа к loop-файлу.
51 Если мы хотим подмонтировать файловые системы, которые находятся внутри LVM,
52 то нужно сделать так.
54 Во-первых, подключить второй раздел к блочному устройству.
56 \begin{verbatim}
57 %$ mount -o $$(208845*512) /dev/loop2 /dev/loop0
58 \end{verbatim}
60 Во-вторых, сказать LVM-системе, что loop-устройства тоже могут содержать тома LVM,
61 и что сканировать и их.
63 Для этого нужно отредактировать файл \texttt{/etc/lvm/lvm.conf}
64 и найти строку \texttt{types}.
65 Скорее всего она будет закомментирована, а в комментариях
66 будут указаны значения по умолчанию.
67 \begin{verbatim}
68 # types = [ “fd”, 16]
69 \end{verbatim}
70 Измените её на строку:
71 \begin{verbatim}
72 types = [ “fd”, 16, “loop”, 1]
73 \end{verbatim}
74 и выполните сканирование:
76 \begin{verbatim}
77 %$ losetup -o $((512*63)) /dev/loop1 /dev/loop0
78 %$ mount /dev/loop1 /mnt
79 \end{verbatim}
81 Мы сможем работать с группой томов LogVol00, которая находится на подключенном образе.
82 \begin{verbatim}
83 %$ mount -o $$(208845*512) /dev/loop2 /dev/loop0
84 \end{verbatim}
86 \subsection{Изменение гостевой системы}
87 Теперь вы можете скопировать необходимые файлы
88 внутрь виртуальной машины.
89 В частности, нужно скопировать модули виртуального ядра:
90 \begin{verbatim}
91 %# cp -a /lib/modules/`uname -r` /mnt/lib/modules
92 \end{verbatim}
93 (если мы будем запускать паравиртуальный домен не с тем ядром, которое используем сейчас,
94 то нужно заменить \texttt{`uname -r`} на верстию нужного ядра).
96 Установите libc6-xen или другим способом отключите
97 использование TLS-библиотек.
98 \begin{verbatim}
99 mv /mnt/lib/tls /mnt/lib/tls.disabled
100 \end{verbatim}
102 Вы можете стереть записи udev, касающиеся сетевого интерфейса,
103 поскольку MAC-адрес виртуального сетевого адаптера будет отличаться
104 от реального, который использовался раньше, и который был запомнен udev.
105 Если этого не делать, нужно отредактировать настройки сети
106 (\texttt{/etc/network/interfaces} для Debian GNU/Linux)
107 и указать новое название интерфейсов. Иначе при старте домена
108 сеть настроена не будет.
110 Если у вас в конвертируемой машине раньше загружались какие-то специфичные модули ядра,
111 их загрузку тоже лучше отключить.
113 \subsection{Приведение хост-системы в исходное состояние}
114 После того как все операции по подготовке
115 машины в паравиртуальном режиме
116 завершены, нужно размонтировать все разделы
117 и отключить их от loop-устройств.
118 \begin{verbatim}
119 # types = [ “fd”, 16]
120 \end{verbatim}
122 Можно также привести файл \texttt{/etc/lvm/lvm.conf} в исходное состояние.
124 \subsection{Важные замечания}
125 \begin{itemize}
126 \item LVM имена должны быть уникальными в пределах системы! Поэтому имена в виртуальной и реальной машинах не должны повторяться!
127 \item Если нужно изменить UUID для виртуального диска, почитайте как это сделать в файле uuidgen.py из дистрибутива Xen
128 \item Для решения описанной выше задачи можно использовать не losetup, а kpartx
129 \end{itemize}
131 \subsection{Дополнительная информация}
132 \begin{itemize}
133 \item \htmladdnormallinkfoot{Преобразование HVM-домена Xen в паравиртуальный}{http://xgu.ru/wiki/xen/hvm2pv}
134 \item \htmladdnormallinkfoot{LVM на Xgu.ru}{http://xgu.ru/wiki/LVM}, где рассказывается об использовании \textit{kpartx}
135 \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/} (англ.)
136 \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} (англ.)
137 \end{itemize}