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 |