xg-scale

annotate 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
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@0 32 %$ losetup -d /dev/loop0 virtual-disk
igor@0 33 \end{verbatim}
igor@0 34
igor@0 35 Здесь есть какой-то маленький раздел (вероятно /boot)
igor@0 36 и LVM.
igor@0 37
igor@0 38 Снова вызовите losetup, и подключите уже отдельный раздел к другому
igor@0 39 блочному устройству.
igor@0 40
igor@0 41 Например, для раздела /boot:
igor@0 42
igor@0 43 \begin{verbatim}
igor@0 44 %$ losetup -o $((512*63)) /dev/loop1 /dev/loop0
igor@0 45 %$ mount /dev/loop1 /mnt
igor@0 46 \end{verbatim}
igor@0 47
igor@0 48 Ключ \texttt{-o} указывает отступ, который нужно сделать от начала файла
igor@0 49 при подключении образа к loop-файлу.
igor@0 50
igor@0 51 Если мы хотим подмонтировать файловые системы, которые находятся внутри LVM,
igor@0 52 то нужно сделать так.
igor@0 53
igor@0 54 Во-первых, подключить второй раздел к блочному устройству.
igor@0 55
igor@0 56 \begin{verbatim}
igor@0 57 %$ mount -o $$(208845*512) /dev/loop2 /dev/loop0
igor@0 58 \end{verbatim}
igor@0 59
igor@0 60 Во-вторых, сказать LVM-системе, что loop-устройства тоже могут содержать тома LVM,
igor@0 61 и что сканировать и их.
igor@0 62
igor@0 63 Для этого нужно отредактировать файл \texttt{/etc/lvm/lvm.conf}
igor@0 64 и найти строку \texttt{types}.
igor@0 65 Скорее всего она будет закомментирована, а в комментариях
igor@0 66 будут указаны значения по умолчанию.
igor@0 67 \begin{verbatim}
igor@0 68 # types = [ “fd”, 16]
igor@0 69 \end{verbatim}
igor@0 70 Измените её на строку:
igor@0 71 \begin{verbatim}
igor@0 72 types = [ “fd”, 16, “loop”, 1]
igor@0 73 \end{verbatim}
igor@0 74 и выполните сканирование:
igor@0 75
igor@0 76 \begin{verbatim}
igor@0 77 %$ losetup -o $((512*63)) /dev/loop1 /dev/loop0
igor@0 78 %$ mount /dev/loop1 /mnt
igor@0 79 \end{verbatim}
igor@0 80
igor@0 81 Мы сможем работать с группой томов LogVol00, которая находится на подключенном образе.
igor@0 82 \begin{verbatim}
igor@0 83 %$ mount -o $$(208845*512) /dev/loop2 /dev/loop0
igor@0 84 \end{verbatim}
igor@0 85
igor@0 86 \subsection{Изменение гостевой системы}
igor@0 87 Теперь вы можете скопировать необходимые файлы
igor@0 88 внутрь виртуальной машины.
igor@0 89 В частности, нужно скопировать модули виртуального ядра:
igor@0 90 \begin{verbatim}
igor@0 91 %# cp -a /lib/modules/`uname -r` /mnt/lib/modules
igor@0 92 \end{verbatim}
igor@0 93 (если мы будем запускать паравиртуальный домен не с тем ядром, которое используем сейчас,
igor@0 94 то нужно заменить \texttt{`uname -r`} на верстию нужного ядра).
igor@0 95
igor@0 96 Установите libc6-xen или другим способом отключите
igor@0 97 использование TLS-библиотек.
igor@0 98 \begin{verbatim}
igor@0 99 mv /mnt/lib/tls /mnt/lib/tls.disabled
igor@0 100 \end{verbatim}
igor@0 101
igor@0 102 Вы можете стереть записи udev, касающиеся сетевого интерфейса,
igor@0 103 поскольку MAC-адрес виртуального сетевого адаптера будет отличаться
igor@0 104 от реального, который использовался раньше, и который был запомнен udev.
igor@0 105 Если этого не делать, нужно отредактировать настройки сети
igor@0 106 (\texttt{/etc/network/interfaces} для Debian GNU/Linux)
igor@0 107 и указать новое название интерфейсов. Иначе при старте домена
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 и отключить их от loop-устройств.
igor@0 118 \begin{verbatim}
igor@0 119 # types = [ “fd”, 16]
igor@0 120 \end{verbatim}
igor@0 121
igor@0 122 Можно также привести файл \texttt{/etc/lvm/lvm.conf} в исходное состояние.
igor@0 123
igor@0 124 \subsection{Важные замечания}
igor@0 125 \begin{itemize}
igor@0 126 \item LVM имена должны быть уникальными в пределах системы! Поэтому имена в виртуальной и реальной машинах не должны повторяться!
igor@0 127 \item Если нужно изменить UUID для виртуального диска, почитайте как это сделать в файле uuidgen.py из дистрибутива Xen
igor@0 128 \item Для решения описанной выше задачи можно использовать не losetup, а kpartx
igor@0 129 \end{itemize}
igor@0 130
igor@0 131 \subsection{Дополнительная информация}
igor@0 132 \begin{itemize}
igor@0 133 \item \htmladdnormallinkfoot{Преобразование HVM-домена Xen в паравиртуальный}{http://xgu.ru/wiki/xen/hvm2pv}
igor@0 134 \item \htmladdnormallinkfoot{LVM на Xgu.ru}{http://xgu.ru/wiki/LVM}, где рассказывается об использовании \textit{kpartx}
igor@0 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/} (англ.)
igor@0 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} (англ.)
igor@0 137 \end{itemize}
igor@0 138