xg-scale
annotate xen/hvm2pv.tex @ 2:ae9c8cec3315
Иправлены небольшие опечатки
и ошибки переноса <pre>-блоков,
которые возникли при автоматическом
создании файла из wiki.
и ошибки переноса <pre>-блоков,
которые возникли при автоматическом
создании файла из wiki.
author | Igor Chubin <igor@chub.in> |
---|---|
date | Tue Jul 01 16:49:38 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 |