rev |
line source |
igor@0
|
1 \section{Преобразование HVM-домена Xen в паравиртуальный}
|
igor@0
|
2
|
igor@0
|
3 Здесь описывается каким образом можно преобразовать
|
igor@0
|
4 HVM-машину в паравиртуальную.
|
igor@0
|
5 Такое преобразование возможно только в том случае,
|
igor@0
|
6 если для гостевой операционной системы существует ядро,
|
igor@0
|
7 способное работать в паравиртуальном домене Xen.
|
igor@0
|
8 За некоторыми исключениями, это означает,
|
igor@0
|
9 что в настоящий момент преобразование HVM-домена
|
igor@0
|
10 в паравиртуальный возможно только для ОС Linux.
|
igor@0
|
11
|
igor@0
|
12 \subsection{Способы подготовки к паравиртуализации}
|
igor@0
|
13 Самый простой способ:
|
igor@0
|
14 загрузиться непосредственно в реальной машине и подготовить её к паравиртуализации.
|
igor@0
|
15 Однако, этот способ не всегда доступен. Например, исходной машины уже может не быть или она может быть занята
|
igor@0
|
16 и недоступна для экспериментов, а образ её есть.
|
igor@0
|
17 Можно загрузить этот образ в HVM-домене или эмуляторе,
|
igor@0
|
18 однако быстрее будет непосредственно обратиться к образу
|
igor@0
|
19 и подготовить его к запуску в паравиртуальном режиме.
|
igor@0
|
20
|
igor@0
|
21 \subsection{Доступ к файловой системе виртуальной машины}
|
igor@0
|
22 Машина должна быть выключена.
|
igor@0
|
23 Иначе можно повредить файловые системы.
|
igor@0
|
24
|
igor@0
|
25 С помощью \textit{losetup} нужно подключить диск виртуальной машины к блочному устройству.
|
igor@0
|
26 \begin{verbatim}
|
igor@0
|
27 %$ losetup -d /dev/loop0 virtual-disk
|
igor@0
|
28 \end{verbatim}
|
igor@0
|
29
|
igor@0
|
30 После этого посмотреть информацию о диске с помощью fdisk:
|
igor@0
|
31 \begin{verbatim}
|
igor@2
|
32 %$ fdisk -l -u /dev/loop0
|
igor@2
|
33
|
igor@2
|
34 Disk /dev/loop0: 8388 MB, 8388608000 bytes
|
igor@2
|
35 255 heads, 63 sectors/track, 1019 cylinders, total 16384000 sectors
|
igor@2
|
36 Units = sectors of 1 * 512 = 512 bytes
|
igor@2
|
37
|
igor@2
|
38 Device Boot Start End Blocks Id System
|
igor@2
|
39 /dev/loop0p1 * 63 208844 104391 83 Linux
|
igor@2
|
40 /dev/loop0p2 208845 16370234 8080695 8e Linux LVM
|
igor@0
|
41 \end{verbatim}
|
igor@0
|
42
|
igor@0
|
43 Здесь есть какой-то маленький раздел (вероятно /boot)
|
igor@0
|
44 и LVM.
|
igor@0
|
45
|
igor@0
|
46 Снова вызовите losetup, и подключите уже отдельный раздел к другому
|
igor@0
|
47 блочному устройству.
|
igor@0
|
48
|
igor@0
|
49 Например, для раздела /boot:
|
igor@0
|
50
|
igor@0
|
51 \begin{verbatim}
|
igor@0
|
52 %$ losetup -o $((512*63)) /dev/loop1 /dev/loop0
|
igor@0
|
53 %$ mount /dev/loop1 /mnt
|
igor@0
|
54 \end{verbatim}
|
igor@0
|
55
|
igor@0
|
56 Ключ \texttt{-o} указывает отступ, который нужно сделать от начала файла
|
igor@0
|
57 при подключении образа к loop-файлу.
|
igor@0
|
58
|
igor@0
|
59 Если мы хотим подмонтировать файловые системы, которые находятся внутри LVM,
|
igor@0
|
60 то нужно сделать так.
|
igor@0
|
61
|
igor@0
|
62 Во-первых, подключить второй раздел к блочному устройству.
|
igor@0
|
63
|
igor@0
|
64 \begin{verbatim}
|
igor@0
|
65 %$ mount -o $$(208845*512) /dev/loop2 /dev/loop0
|
igor@0
|
66 \end{verbatim}
|
igor@0
|
67
|
igor@0
|
68 Во-вторых, сказать LVM-системе, что loop-устройства тоже могут содержать тома LVM,
|
igor@0
|
69 и что сканировать и их.
|
igor@0
|
70
|
igor@0
|
71 Для этого нужно отредактировать файл \texttt{/etc/lvm/lvm.conf}
|
igor@0
|
72 и найти строку \texttt{types}.
|
igor@0
|
73 Скорее всего она будет закомментирована, а в комментариях
|
igor@0
|
74 будут указаны значения по умолчанию.
|
igor@0
|
75 \begin{verbatim}
|
igor@0
|
76 # types = [ “fd”, 16]
|
igor@0
|
77 \end{verbatim}
|
igor@0
|
78 Измените её на строку:
|
igor@0
|
79 \begin{verbatim}
|
igor@0
|
80 types = [ “fd”, 16, “loop”, 1]
|
igor@0
|
81 \end{verbatim}
|
igor@0
|
82 и выполните сканирование:
|
igor@0
|
83
|
igor@0
|
84 \begin{verbatim}
|
igor@2
|
85 $ vgscan
|
igor@2
|
86
|
igor@2
|
87 ACTIVE '/dev/system/root' [14.62 GB] inherit
|
igor@2
|
88 ACTIVE '/dev/system/home' [97.66 GB] inherit
|
igor@2
|
89 ACTIVE '/dev/system/tmp' [512.00 MB] inherit
|
igor@2
|
90 ACTIVE '/dev/system/swap' [4.00 GB] inherit
|
igor@2
|
91 inactive '/dev/VolGroup00/LogVol00' [5.75 GB] inherit
|
igor@2
|
92 inactive '/dev/VolGroup00/LogVol01' [1.94 GB] inherit
|
igor@0
|
93 \end{verbatim}
|
igor@0
|
94
|
igor@0
|
95 Мы сможем работать с группой томов LogVol00, которая находится на подключенном образе.
|
igor@0
|
96 \begin{verbatim}
|
igor@0
|
97 %$ mount -o $$(208845*512) /dev/loop2 /dev/loop0
|
igor@0
|
98 \end{verbatim}
|
igor@0
|
99
|
igor@0
|
100 \subsection{Изменение гостевой системы}
|
igor@0
|
101 Теперь вы можете скопировать необходимые файлы
|
igor@0
|
102 внутрь виртуальной машины.
|
igor@0
|
103 В частности, нужно скопировать модули виртуального ядра:
|
igor@0
|
104 \begin{verbatim}
|
igor@0
|
105 %# cp -a /lib/modules/`uname -r` /mnt/lib/modules
|
igor@0
|
106 \end{verbatim}
|
igor@0
|
107 (если мы будем запускать паравиртуальный домен не с тем ядром, которое используем сейчас,
|
igor@0
|
108 то нужно заменить \texttt{`uname -r`} на верстию нужного ядра).
|
igor@0
|
109
|
igor@0
|
110 Установите libc6-xen или другим способом отключите
|
igor@0
|
111 использование TLS-библиотек.
|
igor@0
|
112 \begin{verbatim}
|
igor@0
|
113 mv /mnt/lib/tls /mnt/lib/tls.disabled
|
igor@0
|
114 \end{verbatim}
|
igor@0
|
115
|
igor@2
|
116 Вы можете стереть записи \textbf{udev}, касающиеся сетевого интерфейса,
|
igor@0
|
117 поскольку MAC-адрес виртуального сетевого адаптера будет отличаться
|
igor@2
|
118 от реального, который использовался раньше, и который был запомнен \textbf{udev}.
|
igor@0
|
119 Если этого не делать, нужно отредактировать настройки сети
|
igor@0
|
120 (\texttt{/etc/network/interfaces} для Debian GNU/Linux)
|
igor@0
|
121 и указать новое название интерфейсов. Иначе при старте домена
|
igor@0
|
122 сеть настроена не будет.
|
igor@0
|
123
|
igor@2
|
124 Если у вас в конвертируемой машине раньше загружались какие-то специфичные
|
igor@2
|
125 (предполагающие наличие определённого оборудования)
|
igor@2
|
126 модули ядра, их загрузку тоже лучше отключить.
|
igor@0
|
127
|
igor@0
|
128 \subsection{Приведение хост-системы в исходное состояние}
|
igor@0
|
129 После того как все операции по подготовке
|
igor@0
|
130 машины в паравиртуальном режиме
|
igor@0
|
131 завершены, нужно размонтировать все разделы
|
igor@0
|
132 и отключить их от loop-устройств.
|
igor@0
|
133 \begin{verbatim}
|
igor@2
|
134 $ umount /mnt
|
igor@2
|
135 $ vgchange –activate n VolGroup00
|
igor@2
|
136 $ losetup -d /dev/loop2
|
igor@2
|
137 $ losetup -d /dev/loop1
|
igor@2
|
138 $ losetup -d /dev/loop0
|
igor@0
|
139 \end{verbatim}
|
igor@0
|
140
|
igor@0
|
141 Можно также привести файл \texttt{/etc/lvm/lvm.conf} в исходное состояние.
|
igor@0
|
142
|
igor@0
|
143 \subsection{Важные замечания}
|
igor@0
|
144 \begin{itemize}
|
igor@0
|
145 \item LVM имена должны быть уникальными в пределах системы! Поэтому имена в виртуальной и реальной машинах не должны повторяться!
|
igor@0
|
146 \item Если нужно изменить UUID для виртуального диска, почитайте как это сделать в файле uuidgen.py из дистрибутива Xen
|
igor@0
|
147 \item Для решения описанной выше задачи можно использовать не losetup, а kpartx
|
igor@0
|
148 \end{itemize}
|
igor@0
|
149
|
igor@0
|
150 \subsection{Дополнительная информация}
|
igor@0
|
151 \begin{itemize}
|
igor@0
|
152 \item \htmladdnormallinkfoot{Преобразование HVM-домена Xen в паравиртуальный}{http://xgu.ru/wiki/xen/hvm2pv}
|
igor@0
|
153 \item \htmladdnormallinkfoot{LVM на Xgu.ru}{http://xgu.ru/wiki/LVM}, где рассказывается об использовании \textit{kpartx}
|
igor@0
|
154 \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/} (англ.)
|
igor@0
|
155 \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} (англ.)
|
igor@0
|
156 \end{itemize}
|
igor@0
|
157
|