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