xg-scale

diff 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
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/xen/hvm2pv.tex	Tue Jul 01 16:16:44 2008 +0300
     1.3 @@ -0,0 +1,138 @@
     1.4 +\section{Преобразование HVM-домена Xen в паравиртуальный}
     1.5 +
     1.6 +Здесь описывается каким образом можно преобразовать 
     1.7 +HVM-машину в паравиртуальную.
     1.8 +Такое преобразование возможно только в том случае, 
     1.9 +если для гостевой операционной системы существует ядро,
    1.10 +способное работать в паравиртуальном домене Xen.
    1.11 +За некоторыми исключениями, это означает, 
    1.12 +что в настоящий момент преобразование HVM-домена
    1.13 +в паравиртуальный возможно только для ОС Linux.
    1.14 +
    1.15 +\subsection{Способы подготовки к паравиртуализации}
    1.16 +Самый простой способ:
    1.17 +загрузиться непосредственно в реальной машине и подготовить её к паравиртуализации.
    1.18 +Однако, этот способ не всегда доступен. Например, исходной машины уже может не быть или она может быть занята
    1.19 +и недоступна для экспериментов, а образ её есть. 
    1.20 +Можно загрузить этот образ в HVM-домене или эмуляторе, 
    1.21 +однако быстрее будет непосредственно обратиться к образу
    1.22 +и подготовить его к запуску в паравиртуальном режиме.
    1.23 +
    1.24 +\subsection{Доступ к файловой системе виртуальной машины}
    1.25 +Машина должна быть выключена.
    1.26 +Иначе можно повредить файловые системы.
    1.27 +
    1.28 +С помощью \textit{losetup} нужно подключить диск виртуальной машины к блочному устройству.
    1.29 +\begin{verbatim}
    1.30 +   %$ losetup -d /dev/loop0 virtual-disk
    1.31 +\end{verbatim}
    1.32 +
    1.33 +После этого посмотреть информацию о диске с помощью fdisk:
    1.34 +\begin{verbatim}
    1.35 +   %$ losetup -d /dev/loop0 virtual-disk
    1.36 +\end{verbatim}
    1.37 +
    1.38 +Здесь есть какой-то маленький раздел (вероятно /boot)
    1.39 +и LVM.
    1.40 +
    1.41 +Снова вызовите losetup, и подключите уже отдельный раздел к другому
    1.42 +блочному устройству.
    1.43 +
    1.44 +Например, для раздела /boot:
    1.45 +
    1.46 +\begin{verbatim}
    1.47 +   %$ losetup -o $((512*63)) /dev/loop1 /dev/loop0
    1.48 +   %$ mount /dev/loop1 /mnt
    1.49 +\end{verbatim}
    1.50 +
    1.51 +Ключ \texttt{-o} указывает отступ, который нужно сделать от начала файла
    1.52 +при подключении образа к loop-файлу.
    1.53 +
    1.54 +Если мы хотим подмонтировать файловые системы, которые находятся внутри LVM, 
    1.55 +то нужно сделать так.
    1.56 +
    1.57 +Во-первых, подключить второй раздел к блочному устройству.
    1.58 +
    1.59 +\begin{verbatim}
    1.60 +   %$ mount -o $$(208845*512) /dev/loop2 /dev/loop0
    1.61 +\end{verbatim}
    1.62 +
    1.63 +Во-вторых, сказать LVM-системе, что loop-устройства тоже могут содержать тома LVM, 
    1.64 +и что сканировать и их.
    1.65 +
    1.66 +Для этого нужно отредактировать файл \texttt{/etc/lvm/lvm.conf}
    1.67 +и найти строку \texttt{types}.
    1.68 +Скорее всего она будет закомментирована, а в комментариях
    1.69 +будут указаны значения по умолчанию.
    1.70 +\begin{verbatim}
    1.71 +   # types = [ “fd”, 16]
    1.72 +\end{verbatim}
    1.73 +Измените её на строку:
    1.74 +\begin{verbatim}
    1.75 +   types = [ “fd”, 16, “loop”, 1]
    1.76 +\end{verbatim}
    1.77 +и выполните сканирование:
    1.78 +
    1.79 +\begin{verbatim}
    1.80 +   %$ losetup -o $((512*63)) /dev/loop1 /dev/loop0
    1.81 +   %$ mount /dev/loop1 /mnt
    1.82 +\end{verbatim}
    1.83 +
    1.84 +Мы сможем работать с группой томов LogVol00, которая находится на подключенном образе.
    1.85 +\begin{verbatim}
    1.86 +   %$ mount -o $$(208845*512) /dev/loop2 /dev/loop0
    1.87 +\end{verbatim}
    1.88 +
    1.89 +\subsection{Изменение гостевой системы}
    1.90 +Теперь вы можете скопировать необходимые файлы
    1.91 +внутрь виртуальной машины.
    1.92 +В частности, нужно скопировать модули виртуального ядра:
    1.93 +\begin{verbatim}
    1.94 +  %# cp -a /lib/modules/`uname -r` /mnt/lib/modules
    1.95 +\end{verbatim}
    1.96 +(если мы будем запускать паравиртуальный домен не с тем ядром, которое используем сейчас,
    1.97 +то нужно заменить \texttt{`uname -r`} на верстию нужного ядра).
    1.98 +
    1.99 +Установите libc6-xen или другим способом отключите
   1.100 +использование TLS-библиотек.
   1.101 +\begin{verbatim}
   1.102 +   mv /mnt/lib/tls /mnt/lib/tls.disabled
   1.103 +\end{verbatim}
   1.104 +
   1.105 +Вы можете стереть записи udev, касающиеся сетевого интерфейса, 
   1.106 +поскольку MAC-адрес виртуального сетевого адаптера будет отличаться
   1.107 +от реального, который использовался раньше, и который был запомнен udev.
   1.108 +Если этого не делать, нужно отредактировать настройки сети
   1.109 +(\texttt{/etc/network/interfaces} для Debian GNU/Linux)
   1.110 +и указать новое название интерфейсов. Иначе при старте домена
   1.111 +сеть настроена не будет.
   1.112 +
   1.113 +Если у вас в конвертируемой машине раньше загружались какие-то специфичные модули ядра, 
   1.114 +их загрузку тоже лучше отключить.
   1.115 +
   1.116 +\subsection{Приведение хост-системы в исходное состояние}
   1.117 +После того как все операции по подготовке
   1.118 +машины в паравиртуальном режиме
   1.119 +завершены, нужно размонтировать все разделы
   1.120 +и отключить их от loop-устройств.
   1.121 +\begin{verbatim}
   1.122 +   # types = [ “fd”, 16]
   1.123 +\end{verbatim}
   1.124 +
   1.125 +Можно также привести файл \texttt{/etc/lvm/lvm.conf} в исходное состояние.
   1.126 +
   1.127 +\subsection{Важные замечания}
   1.128 +\begin{itemize}
   1.129 +\item  LVM имена должны быть уникальными в пределах системы! Поэтому имена в виртуальной и реальной машинах не должны повторяться!
   1.130 +\item  Если нужно изменить UUID для виртуального диска, почитайте как это сделать в файле uuidgen.py из дистрибутива Xen
   1.131 +\item  Для решения описанной выше задачи можно использовать не losetup, а kpartx
   1.132 +\end{itemize}
   1.133 +
   1.134 +\subsection{Дополнительная информация}
   1.135 +\begin{itemize}
   1.136 +\item \htmladdnormallinkfoot{Преобразование HVM-домена Xen в паравиртуальный}{http://xgu.ru/wiki/xen/hvm2pv}
   1.137 +\item \htmladdnormallinkfoot{LVM на Xgu.ru}{http://xgu.ru/wiki/LVM}, где рассказывается об использовании \textit{kpartx}
   1.138 +\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/} (англ.)
   1.139 +\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} (англ.)
   1.140 +\end{itemize}
   1.141 +