rev |
line source |
igor@0
|
1 \section{Преобразование независимых систем в виртуальные домены Xen}
|
igor@0
|
2
|
igor@0
|
3 Здесь описывается как выполнять систему, установленную на компьютере,
|
igor@0
|
4 внутри домена Xen или с помощью эмулятора QEMU, исполняющегося на другом компьютере.
|
igor@0
|
5 Может быть полезно при консолидации и виртуализации систем,
|
igor@0
|
6 при работе с устаревшими системами, при тестировании.
|
igor@0
|
7
|
igor@0
|
8 \subsection{Идея}
|
igor@0
|
9 В связи с постоянным увеличением вычислительной мощности и объёма оперативной памяти машин, наблюдающимся в настоящее время, большую популярность приобретает идея виртуализации систем. В особенности популярным этот подход становится
|
igor@0
|
10 при построении серверной инфраструктуры.
|
igor@0
|
11
|
igor@0
|
12 Виртуализированная серверная инфраструктура редко строится с нуля. Чаще всего существует парк физических (не виртуализированных) серверов, которые безостановочно работают, выполняя возложенные на них задачи.
|
igor@0
|
13 Нередко для хранения информации (операционной системы, программного обеспечения и данных) эти серверы используют не внешние хранилища, а собственные жётские
|
igor@0
|
14 диски.
|
igor@0
|
15
|
igor@0
|
16 Виртуализация сервера в данном случае может быть выполнена одним из указанных способов:
|
igor@0
|
17 \begin{enumerate}
|
igor@0
|
18 \item \textit{Миграция служб.} В виртуальной системе новый сервер разворачивается с нуля. Затем на него переносятся службы старого сервера. После чего старый сервер выводится из эксплуатации.
|
igor@0
|
19 \item \textit{Миграция операционной системы.} Старый сервер останавливается, а затем на нём по сети (с компакт-диска или другого внешнего носителя информации) запускается другая операционная система, которая экспортирует установленный в сервере жёсткий диск системе виртуализации. Система виртуализации исполняет операционную систему, проинсталированную на этом диске. При условии, что виртуализация удалась, данные переносятся на хранилище системы виртуализации и старый сервер выключается.
|
igor@0
|
20 \end{enumerate}
|
igor@0
|
21
|
igor@0
|
22 Последний способ проще и быстрее, но он должен допускать возможность
|
igor@0
|
23 временной, непродолжительной остановки сервера (на время запуска другой операционной системы, экспорта, запуска виртуальной машины поверх экспортированных данных).
|
igor@0
|
24 В случае правильного выполнения всех операций простой в этом случае составит до 10 минут.
|
igor@0
|
25
|
igor@0
|
26 Обратите внимание что данные, расположенные на жёстком диске,
|
igor@0
|
27 при загрузке новой операционной системы, выполнящей экспорт,
|
igor@0
|
28 никак не используются. Загрузка выполняется по сети, с компакт-диска или другого внешнего носителя. Диск экспортируется для доступа к нему системы виртуализации. Изменения на диске может делать только сама операционная система, установленная на этом же диске, после того как она запущена в виртуальном домене.
|
igor@0
|
29
|
igor@0
|
30 Ниже детально рассматривается процесс миграции,
|
igor@0
|
31 выполненный по второму сценарию.
|
igor@0
|
32
|
igor@0
|
33 \subsection{Постановка задачи}
|
igor@0
|
34 Пусть есть две системы:
|
igor@0
|
35 \begin{itemize}
|
igor@0
|
36 \item \textit{Старая система} (old) --- система, которая должна быть экспортирована.
|
igor@0
|
37 \item \textit{Xen-система} (xen) --- система, внутри которой должен исполняться домен под управлением экспортированной системы.
|
igor@0
|
38 \end{itemize}
|
igor@0
|
39
|
igor@0
|
40 Необходимо создать новую виртуальную машину,
|
igor@0
|
41 которая будет использовать в качестве жёсткого диска жёсткий диск удалённого хоста, экспортированный для доступа по сети с помощью протоколов сетевого доступа к дисковым хранилищам.
|
igor@0
|
42
|
igor@0
|
43 \subsection{Запуск второй операционной системы в домене Xen установленной на том же компьютере}
|
igor@0
|
44 Рассмотрим для начала простейший случай, когда на одном компьютере
|
igor@0
|
45 установлено две операционные системы.
|
igor@0
|
46 Он отличается от интересующей нас задачии тем, что не нужно
|
igor@0
|
47 выполнять экспорт диска как сетевого устройства.
|
igor@0
|
48
|
igor@0
|
49 Если на компьютере установлены две операционные системы,
|
igor@0
|
50 и одна из них это Xenolinux (Xen + Linux),
|
igor@0
|
51 то вторую можно запустить как пользовательский домен Xen.
|
igor@0
|
52
|
igor@0
|
53 Запуск систем, не подготовленных для использования в паравиртуальном домене Xen,
|
igor@0
|
54 внутри Xen возможен только в том случае, если центральный процессор системы поддерживает аппаратную виртуализацию.
|
igor@0
|
55 В противном случае вместо Xen можно использовать QEMU.
|
igor@0
|
56
|
igor@0
|
57 Операционная система, загруженная в родном режиме:
|
igor@0
|
58
|
igor@0
|
59 \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/2/29/Win2003_native.JPG}}\\ \textit{}\end{center}
|
igor@0
|
60
|
igor@0
|
61 Конфигурационный файл домена Xen:
|
igor@0
|
62
|
igor@0
|
63 \begin{verbatim}
|
igor@0
|
64 %$ egrep -v '^#|^\ *$' /etc/xen/win2003
|
igor@0
|
65 kernel = "hvmloader"
|
igor@0
|
66 builder='hvm'
|
igor@0
|
67 memory = 512
|
igor@0
|
68 shadow_memory = 8
|
igor@0
|
69 name = "win2003"
|
igor@0
|
70 acpi=1
|
igor@0
|
71 vif = [ 'type=ioemu, bridge=br0' ]
|
igor@0
|
72 disk = ['phy:/dev/hda,hda,w' ]
|
igor@0
|
73 device_model = 'qemu-dm'
|
igor@0
|
74 boot="c"
|
igor@0
|
75 sdl=0
|
igor@0
|
76 vnc=1
|
igor@0
|
77 vnclisten="127.0.0.1"
|
igor@0
|
78 stdvga=0
|
igor@0
|
79 serial='pty'
|
igor@0
|
80 soundhw='sb16'
|
igor@0
|
81 \end{verbatim}
|
igor@0
|
82
|
igor@0
|
83 В данном случае операционная система Windows установлена
|
igor@0
|
84 на жёсткий диск IDE, подключенный в системе в режиме Primary Master
|
igor@0
|
85 (блочное устройство \texttt{/dev/hda}).
|
igor@0
|
86
|
igor@0
|
87 Старт домена выполняется стандартным образом:
|
igor@0
|
88
|
igor@0
|
89 \begin{verbatim}
|
igor@0
|
90 %# xm create win2003
|
igor@0
|
91 %# vncviewer 127.0.0.1:0
|
igor@0
|
92 \end{verbatim}
|
igor@0
|
93
|
igor@0
|
94 Здесь вместо 0 может быть указан другой номер, в зависимости от номера
|
igor@0
|
95 VNC-сеанса, который будет соответствовать заданному домену Xen.
|
igor@0
|
96 Подробнее см. руководство пользователя Xen.
|
igor@0
|
97
|
igor@0
|
98 Домен Xen, загруженный с жёсткого диска:
|
igor@0
|
99
|
igor@0
|
100 \begin{itemize}
|
igor@0
|
101 \item Процессор AMD 3000+
|
igor@0
|
102 \item 512 Mb ОЗУ
|
igor@0
|
103 \end{itemize}
|
igor@0
|
104
|
igor@0
|
105 \begin{figure}
|
igor@0
|
106 \includegraphics[width=12cm]{/var/lib/mediawiki/images/b/bc/W2003_xen.png}
|
igor@0
|
107 \end{figure}
|
igor@0
|
108
|
igor@0
|
109 На домен, в котором работает установленная операционная система
|
igor@0
|
110 распространяются все те же законы, которые распространяются на систему, которая установлена в домен с нуля
|
igor@0
|
111 традиционным способом.
|
igor@0
|
112
|
igor@0
|
113 \subsection{Запуск домена с экспортированного образа}
|
igor@0
|
114 Если операционная система установлена не локально,
|
igor@0
|
115 а на другом компьютере, необходимо каким-то образом его донести системе виртуализации, так что бы, грубо говоря, виртуальный домен увидел диск.
|
igor@0
|
116
|
igor@0
|
117 Процедура включает три шага:
|
igor@0
|
118 \begin{enumerate}
|
igor@0
|
119 \item Выполнить бездисковую загрузку старой системы \textit{old} под управлением Linux;
|
igor@0
|
120 \item Выполнить экспорт диска загруженной системы \textit{old} с помощью AoE или iSCSI;
|
igor@0
|
121 \item На работающей Xen-системе \textit{xen} запустить домен, который будет использовать экспортированный старой машиной.
|
igor@0
|
122 \end{enumerate}
|
igor@0
|
123
|
igor@0
|
124 \subsubsection{Подготовка сервера бездисковой загрузки}
|
igor@0
|
125 Детально процедура подготовки сервера бездисковой загрузки
|
igor@0
|
126 описана на странице \htmladdnormallinkfoot{PXE}{http://xgu.ru/wiki/PXE}.
|
igor@0
|
127 Ниже приводятся только примеры конфигурационных
|
igor@0
|
128 файлов ключевых систем, использующихся в работе.
|
igor@0
|
129
|
igor@0
|
130 \paragraph{DHCP}
|
igor@0
|
131 Конфигурация демона dhcpd в файле \textbf{/etc/default/dhcp}:
|
igor@0
|
132
|
igor@0
|
133 \begin{verbatim}
|
igor@0
|
134 %$ egrep -v '^#|^\ *$' /etc/default/dhcp
|
igor@0
|
135 INTERFACES="br0"
|
igor@0
|
136 \end{verbatim}
|
igor@0
|
137
|
igor@0
|
138 Сам конфигурационный файл \textbf{/etc/dhcpd.conf}:
|
igor@0
|
139
|
igor@0
|
140 \begin{verbatim}
|
igor@0
|
141 %$ egrep -v '^#|^\ *$' /etc/dhcpd.conf
|
igor@0
|
142 option domain-name "clinika.com";
|
igor@0
|
143 option domain-name-servers 192.168.15.254;
|
igor@0
|
144 option subnet-mask 255.255.255.0;
|
igor@0
|
145 default-lease-time 600;
|
igor@0
|
146 max-lease-time 7200;
|
igor@0
|
147 subnet 192.168.7.0 netmask 255.255.255.0 {
|
igor@0
|
148 range 192.168.7.200 192.168.7.220;
|
igor@0
|
149 option routers 192.168.7.254;
|
igor@0
|
150 filename "pxelinux.0";
|
igor@0
|
151 }
|
igor@0
|
152 host clinika {
|
igor@0
|
153 hardware ethernet 00:13:8f:49:b0:31;
|
igor@0
|
154 fixed-address 192.168.7.253;
|
igor@0
|
155 }
|
igor@0
|
156 \end{verbatim}
|
igor@0
|
157
|
igor@0
|
158 \paragraph{TFTP}
|
igor@0
|
159
|
igor@0
|
160 \begin{verbatim}
|
igor@0
|
161 %$ egrep -v '^#|^\ *$' /etc/default/tftpd-hpa
|
igor@0
|
162 RUN_DAEMON="yes"
|
igor@0
|
163 OPTIONS="-l -s /var/lib/tftpboot/ltsp/i386/"
|
igor@0
|
164 \end{verbatim}
|
igor@0
|
165
|
igor@0
|
166 \paragraph{PXE}
|
igor@0
|
167 Наполнение каталога TFTP-сервера.
|
igor@0
|
168 Здесь присутствуют файлы загрузчика PXELINUX.
|
igor@0
|
169
|
igor@0
|
170 \begin{verbatim}
|
igor@0
|
171 %$ ls -l /var/lib/tftpboot/ltsp/i386/
|
igor@0
|
172 итого 10690
|
igor@0
|
173 -rw-r--r-- 1 root root 203 2007-10-04 boot.msg
|
igor@0
|
174 -rw-r--r-- 1 root root 80023 2007-07-11 config-2.6.21-2-486
|
igor@0
|
175 lrwxrwxrwx 1 root root 23 2007-10-04 initrd.img -> initrd.img-2.6.21-2-486
|
igor@0
|
176 -rw-r--r-- 1 root root 3691052 2007-10-04 initrd.img-2.6.21-2-486
|
igor@0
|
177 -rw-r--r-- 1 root root 9519 2007-10-04 logo.16_1
|
igor@0
|
178 lrwxrwxrwx 1 root root 20 2007-10-04 nbi.img -> nbi.img-2.6.21-2-486
|
igor@0
|
179 -rw-r--r-- 1 root root 5019136 2007-10-04 nbi.img-2.6.21-2-486
|
igor@0
|
180 -rw-r--r-- 1 root root 13944 2007-10-04 pxelinux.0
|
igor@0
|
181 drwxr-xr-x 2 root root 104 2007-10-05 pxelinux.cfg
|
igor@0
|
182 -rw-r--r-- 1 root root 780664 2007-07-11 System.map-2.6.21-2-486
|
igor@0
|
183 lrwxrwxrwx 1 root root 20 2007-10-04 vmlinuz -> vmlinuz-2.6.21-2-486
|
igor@0
|
184 -rw-r--r-- 1 root root 1319152 2007-07-11 vmlinuz-2.6.21-2-486
|
igor@0
|
185 \end{verbatim}
|
igor@0
|
186
|
igor@0
|
187 Конфигурационный файл загрузчика PXELINUX:
|
igor@0
|
188
|
igor@0
|
189 \begin{verbatim}
|
igor@0
|
190 clint:Dom0~$ cat /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default
|
igor@0
|
191 DISPLAY boot.msg
|
igor@0
|
192 TIMEOUT 150
|
igor@0
|
193 DEFAULT vmlinuz
|
igor@0
|
194 PROMPT 1
|
igor@0
|
195
|
igor@0
|
196 LABEL 2.6.21.2
|
igor@0
|
197 KERNEL vmlinuz
|
igor@0
|
198 APPEND nfsdir=192.168.7.254:/opt/ltsp/i386 lang=ru ramdisk_size=1000000
|
igor@0
|
199 root=/dev/nfs rw nfsroot=192.168.7.254:/opt/ltsp/i386/ ip=dhcp initrd=initrd.img
|
igor@0
|
200 \end{verbatim}
|
igor@0
|
201
|
igor@0
|
202 \paragraph{Корневая файловая система, загружаемая по сети}
|
igor@0
|
203 В каталоге \texttt{/opt/ltsp/i386/}
|
igor@0
|
204 развёрнута операционная система Linux.
|
igor@0
|
205 Инсталляция выполняется с помощью \textit{debootstrap}
|
igor@0
|
206 или аналогичным способом.
|
igor@0
|
207
|
igor@0
|
208 В системе должны быть установлены пакеты:
|
igor@0
|
209 \begin{itemize}
|
igor@0
|
210 \item vblade
|
igor@0
|
211 \end{itemize}
|
igor@0
|
212
|
igor@0
|
213 \subsubsection{Экспорт диска старой машины по сети}
|
igor@0
|
214 Сервер, который будет экспортирован,
|
igor@0
|
215 перезагружается и загружается
|
igor@0
|
216 по сети.
|
igor@0
|
217
|
igor@0
|
218 После этого необходимо выполнить следующие действия.
|
igor@0
|
219
|
igor@0
|
220 Будем считать, что экспорт выполняется с помощью протокола
|
igor@0
|
221 ATA over Ethernet.
|
igor@0
|
222 Можно использовать другой протокол доступа к диску по сети.
|
igor@0
|
223
|
igor@0
|
224 Убедитесь, что загружен модуль \textbf{aoe}:
|
igor@0
|
225
|
igor@0
|
226 \begin{verbatim}
|
igor@0
|
227 ltsp:~# lsmod | grep aoe
|
igor@0
|
228 aoe 24416 0
|
igor@0
|
229 \end{verbatim}
|
igor@0
|
230
|
igor@0
|
231 Экспортируйте диск \texttt{/dev/hda} (или другой -- тот, на котором установлена система) с помощью \textbf{vblade}:
|
igor@0
|
232
|
igor@0
|
233 \begin{verbatim}
|
igor@0
|
234 ltsp:~# vblade 1 0 eth0 /dev/hda
|
igor@0
|
235 pid 3344: e1.0, 78165360 sectors O_RDWR
|
igor@0
|
236 \end{verbatim}
|
igor@0
|
237
|
igor@0
|
238 \subsubsection{Запуск домена с экспортированного образа}
|
igor@0
|
239 На системе виртуализации
|
igor@0
|
240 загрузите модуль \textbf{aoe}:
|
igor@0
|
241
|
igor@0
|
242 \begin{verbatim}
|
igor@0
|
243 clint:Dom0~$ ls -l /dev/etherd
|
igor@0
|
244 ls: /dev/etherd: Heт такого файла или каталога
|
igor@0
|
245 %# modprobe aoe
|
igor@0
|
246 aoe: aoe_init: AoE v22 initialised.
|
igor@0
|
247 aoe: 00138f49b031 e1.0 v400c has 78165360 sectors
|
igor@0
|
248 %# sudo lsmod | grep aoe
|
igor@0
|
249 aoe 23456 0
|
igor@0
|
250 \end{verbatim}
|
igor@0
|
251
|
igor@0
|
252 При этом
|
igor@0
|
253 в \texttt{/var/log/messages}
|
igor@0
|
254 должны появиться сообщения:
|
igor@0
|
255
|
igor@0
|
256 \begin{verbatim}
|
igor@0
|
257 ... kernel: aoe: aoe_init: AoE v22 initialised.
|
igor@0
|
258 ... kernel: aoe: 00138f49b031 e1.0 v400c has 78165360 sectors
|
igor@0
|
259 ... kernel: etherd/e1.0: p2 < p5 p6 p7 p8 p9 > p3
|
igor@0
|
260 \end{verbatim}
|
igor@0
|
261
|
igor@0
|
262 В каталоге \texttt{/dev/etherd}
|
igor@0
|
263 должны появиться новые файлы устройств,
|
igor@0
|
264 соответствующие обнаруженным дискам
|
igor@0
|
265 ATA over Ethernet:
|
igor@0
|
266
|
igor@0
|
267 \begin{verbatim}
|
igor@0
|
268 %# ls -l /dev/etherd/
|
igor@0
|
269 итого 0
|
igor@0
|
270 c-w--w---- 1 root disk 152, 3 2007-10-05 21:46 discover
|
igor@0
|
271 brw-rw---- 1 root disk 152, 256 2007-10-05 21:57 e1.0
|
igor@0
|
272 brw-rw---- 1 root disk 152, 258 2007-10-05 21:46 e1.0p2
|
igor@0
|
273 brw-rw---- 1 root disk 152, 259 2007-10-05 21:46 e1.0p3
|
igor@0
|
274 brw-rw---- 1 root disk 152, 261 2007-10-05 21:46 e1.0p5
|
igor@0
|
275 brw-rw---- 1 root disk 152, 262 2007-10-05 21:46 e1.0p6
|
igor@0
|
276 brw-rw---- 1 root disk 152, 263 2007-10-05 21:46 e1.0p7
|
igor@0
|
277 brw-rw---- 1 root disk 152, 264 2007-10-05 21:46 e1.0p8
|
igor@0
|
278 brw-rw---- 1 root disk 152, 265 2007-10-05 21:46 e1.0p9
|
igor@0
|
279 cr--r----- 1 root disk 152, 2 2007-10-05 21:46 err
|
igor@0
|
280 c-w--w---- 1 root disk 152, 4 2007-10-05 21:46 interfaces
|
igor@0
|
281 c-w--w---- 1 root disk 152, 5 2007-10-05 21:46 revalidate
|
igor@0
|
282 \end{verbatim}
|
igor@0
|
283
|
igor@0
|
284 Далее необходимо создать конфигурационный файл
|
igor@0
|
285 нового домена Xen
|
igor@0
|
286 или модифицровать существующий.
|
igor@0
|
287
|
igor@0
|
288 \begin{verbatim}
|
igor@0
|
289 %$ egrep -v '^#|^\ *$' /etc/xen/win2k
|
igor@0
|
290 kernel = "hvmloader"
|
igor@0
|
291 builder='hvm'
|
igor@0
|
292 memory = 512
|
igor@0
|
293 shadow_memory = 8
|
igor@0
|
294 name = "win2k"
|
igor@0
|
295 acpi=1
|
igor@0
|
296 vif = [ 'type=ioemu, bridge=br0' ]
|
igor@0
|
297 disk = ['phy:/dev/etherd/e1.0,hda,w' ]
|
igor@0
|
298 device_model = 'qemu-dm'
|
igor@0
|
299 boot="c"
|
igor@0
|
300 sdl=0
|
igor@0
|
301 vnc=1
|
igor@0
|
302 vnclisten="127.0.0.1"
|
igor@0
|
303 stdvga=0
|
igor@0
|
304 serial='pty'
|
igor@0
|
305 soundhw='sb16'
|
igor@0
|
306 \end{verbatim}
|
igor@0
|
307
|
igor@0
|
308 После чего запустить домен:
|
igor@0
|
309
|
igor@0
|
310 \begin{verbatim}
|
igor@0
|
311 %@ xm create win2k
|
igor@0
|
312 \end{verbatim}
|
igor@0
|
313
|
igor@0
|
314 \subsubsection{Результат запуска}
|
igor@0
|
315 Старая машина, загруженная самостоятельно.
|
igor@0
|
316 \begin{itemize}
|
igor@0
|
317 \item Процессор Sempron 2600
|
igor@0
|
318 \item 457968KB ОЗУ
|
igor@0
|
319 \end{itemize}
|
igor@0
|
320 \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/b/b9/W2k.jpg}}\\ \textit{}\end{center}
|
igor@0
|
321
|
igor@0
|
322 Домен Xen, загруженный удалённо
|
igor@0
|
323 с жёсткого диска старой системы:
|
igor@0
|
324 \begin{itemize}
|
igor@0
|
325 \item Процессор AMD 3000+
|
igor@0
|
326 \item 523800KB ОЗУ
|
igor@0
|
327 \end{itemize}
|
igor@0
|
328 \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/c/cd/W2k_2.png}}\\ \textit{}\end{center}
|
igor@0
|
329
|
igor@0
|
330 Другие изображения:
|
igor@0
|
331
|
igor@0
|
332 \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/f/f9/W2k_0.png}}\\ \textit{}\end{center}
|
igor@0
|
333 \begin{center} \resizebox{10cm}{!}{\includegraphics[width=12cm]{/var/lib/mediawiki/images/7/75/W2k_1.png}}\\ \textit{}\end{center}
|
igor@0
|
334
|
igor@0
|
335 Мы бы не смогли подключиться к этой системе удалённо
|
igor@0
|
336 в момент запуска, поскольку сетевая подсистема ещё не работает.
|
igor@0
|
337 Такие изображения можно сделать только при запуске машины
|
igor@0
|
338 в виртуальной системе или в эмуляторе.
|
igor@0
|
339
|
igor@0
|
340 \subsubsection{Перенесение образа старой машины}
|
igor@0
|
341 Если старый сервер должен быть выведен
|
igor@0
|
342 из эксплуатации, необходимо скопировать
|
igor@0
|
343 данные на новое место.
|
igor@0
|
344
|
igor@0
|
345 Домен соответствующий виртуализируемому серверу должен быть потушен в момент копирования!
|
igor@0
|
346
|
igor@0
|
347 Например, если перенос выполняется на том LVM:
|
igor@0
|
348
|
igor@0
|
349 \begin{verbatim}
|
igor@0
|
350 %# lvcreate -L 20G -n server2003 /dev/XEN
|
igor@0
|
351 %# dd if=/dev/etherd/e1.0 of=/dev/XEN/server2003
|
igor@0
|
352 %# sed -i -e s@/dev/etherd/e1.0@/dev/XEN/server2003@ /etc/xen/win2003
|
igor@0
|
353 \end{verbatim}
|
igor@0
|
354
|
igor@0
|
355
|
igor@0
|
356 \subsection{Дополнительная информация}
|
igor@0
|
357 \begin{itemize}
|
igor@0
|
358 \item \htmladdnormallinkfoot{Экспорт установленной системы в домен Xen}{http://xgu.ru/wiki/xen/export} (рус.)
|
igor@0
|
359 \end{itemize}
|