xg-scale

annotate xen/hvm2pv.tex @ 3:7ad41782e1ad

Иcправлены небольшие опечатки в xen/export
author Igor Chubin <igor@chub.in>
date Tue Jul 01 16:59:46 2008 +0300 (2008-07-01)
parents 4730a0d07d88
children
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