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 +