igor@6: \section{Windows в Xen} igor@0: igor@6: Здесь рассматривается процедура подготовки и запуска домена с Windows в системе виртуализации Xen на платформе с аппаратной поддержкой виртуализации (HVM). Выполнять Windows в паравиртуальном режиме (т.е. без использования аппаратных архитектурных расширений виртуализации) на сегодняшний день нельзя. Возможно, это можно будет сделать в будущем. igor@0: igor@6: \section{Предварительные требования} igor@6: В первую очередь, для установки Windows XP, как и любой другой не портированной на Xen системы, igor@6: необходима поддержка центральным процессором технологии виртуализации Intel®Virtualization Technology (VT) или Pacifica (AMD). igor@6: Информацию о поддержке процессорами аппаратной виртуализации можно посмотреть на странице Аппаратные требования Xen. igor@6: Поддержка аппаратной виртуализации должна быть и у Xen. igor@0: igor@6: \subsection{Поддержка VMX} igor@6: Убедиться в наличии поддержки VMX можно так. igor@0: igor@6: Для процессоров Intel: igor@0: \begin{verbatim} igor@0: # xm dmesg | grep VMX igor@0: (XEN) VMXON is done igor@0: (XEN) VMXON is done igor@0: ... igor@0: \end{verbatim} igor@0: igor@0: Если используется процессор AMD: igor@0: \begin{verbatim} igor@0: # xm dmesg | grep -i svm igor@0: (XEN) AMD SVM Extension is enabled for cpu 0. igor@0: (XEN) AMD SVM Extension is enabled for cpu 1. igor@0: \end{verbatim} igor@0: igor@0: В общем случае: igor@0: \begin{verbatim} igor@0: # xm info | grep caps igor@0: hw_caps : 178bfbff:ebd3fbff:00000000:00000010:00002001:00000000:0000001f igor@0: xen_caps : xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p igor@0: \end{verbatim} igor@0: igor@0: hvm-3.0-x86\_32 говорит о том, что XEN успешно обнаружил процессор, который поддерживает технологии Intel VT или AMD-V. igor@0: igor@6: Если у вас другое сообщение, но вы уверены, что у процессора есть архитектурные расширения виртуализации, то проверьте настройки BIOS и, igor@6: если вы этого ещё не сделали, задействуйте поддержку VT. igor@0: igor@6: Возможно, BIOS вашей материнской платы искусственно отключает виртуализацию. igor@6: В этом случае нужно обновить или исправить BIOS (см. например GA-M59SLI-S4) igor@6: igor@6: \section{Конфигурационный файл домена} igor@6: В терминологии Xen гостевые домены, исполняющиеся в режиме аппаратной виртуализации называются HVM-доменами (Hardware Virtualization Mode). igor@6: Для облегчения процесса настройки существует пример конфигурационного файла такого домена igor@6: (при установке из исходников он называется \texttt{/etc/xen/xmexample.hvm}; при установке из пакетов путь может быть другим). igor@6: Множество параметров, использующихся в этом файле, igor@6: шире чем в конфигурационном файле паравиртуального домена: igor@6: \begin{itemize} igor@6: \item \textbf{kernel} — VMX firmware loader, для HVM-домена обычно \texttt{hvmloader} igor@6: \item \textbf{builder} — Тип домена. Для HVM-домена обязательно \texttt{hvm} igor@6: \item \textbf{acpi} — Поддержка ACPI внутри HVM-домена, по умолчанию равно \dq{}0\dq{} (отключено) igor@6: \item \textbf{apic} — Поддержка APIC внутри HVM-домена, по умолчанию равно \dq{}0\dq{} (отключено) igor@6: \item \textbf{pae} — Поддержка PAE внутри HVM-домена, по умолчанию равно \dq{}0\dq{} (отключено) igor@6: \item \textbf{vif} — Описание сетевых интерфейсов. Представляет собой список строк, каждая из которых описывает один интерфейс. В каждой строке, соответствующей интерфейсу, обязательно должен присутствовать компонент \texttt{bridge}, указывающий к какому мосту подключён интерфейс. Опционально может указываться MAC-адрес интерфейса (по умолчанию генерируется случайным образом внутри диапазона, выделенного Xen Source). Здесь же может задаваться модель эмулируемой сетевой карты (параметр \texttt{model}). igor@6: \item \textbf{disk} -- Определяет дисковые устройства, к которым гостевой домен должен иметь доступ. Если для домена используется физический носитель в качестве диска, то он должен быть описан строкой типа: igor@6: \end{itemize} igor@6: \begin{verbatim} igor@6: phy:UNAME,DEV,MODE igor@6: \end{verbatim} igor@6: где \textbf{UNAME} -- имя устройства, \textbf{DEV} -- имя диска, как его видит домен и \textbf{MODE} принимает значения \textbf{r} для read-only и \textbf{w} для read-write. Раньше нужно было ещё указывать параметр \texttt{ioemu}, сейчас это уже не обязательно \url{http://lists.xensource.com/archives/html/xen-devel/2006-08/msg00369.html}. igor@6: igor@6: Если используется образ диска, находящийся в файле, то строка принимает вид: igor@6: \begin{verbatim} igor@6: file:FILEPATH,DEV,MODE igor@6: \end{verbatim} igor@6: igor@6: Если используется больше одного диска, то они разделяются запятой. Например: igor@6: \begin{verbatim} igor@6: disk = ['file:/var/images/image1.img,hda,w', 'file:/var/images/image2.img,hdb,w'] igor@6: \end{verbatim} igor@6: igor@6: Если какой-то из образов является образом компакт-диска, и предполагается, что в виртуальной машине должен эмулироваться привод CD-ROM, нужно использовать суффикс \texttt{:cdrom} в описании диска: igor@6: \begin{verbatim} igor@6: disk = ['file:/var/images/image1.img,hda,w', 'file:/var/images/image2.iso,hdc:cdrom,w'] igor@6: \end{verbatim} igor@6: igor@6: CD-ROM\rq{}ов может быть несколько. igor@6: \begin{itemize} igor@6: \item \textbf{boot} — Загрузка с floppy (a), hard disk (c) или CD-ROM (d). igor@6: \item \textbf{device\_model} — Инструмент эмуляции устройств для HVM-домена. Обычно \texttt{qemu-dm} igor@6: \item \textbf{sdl} — Задействует библиотеку SDL для отображения графики, по умолчанию равно \dq{}0\dq{} (отключено) igor@6: \item \textbf{vnc} — Задействует библиотеку VNC для отображения графики, по умолчанию равно \dq{}0\dq{} (отключено) igor@6: \end{itemize} igor@6: Пользователь может использовать \textbf{vncviewer} для подключения к домену. Например: igor@6: \begin{verbatim} igor@6: $ vncviewer domain0_IP_address:0 igor@6: \end{verbatim} igor@6: igor@6: \begin{itemize} igor@6: \item \textbf{vncconsole} — Нужно ли автоматически запускать \textbf{vncviewer} при старте домена. Имеет смысла только если \texttt{vnc=1}. По умолчанию равно 0. igor@6: \item \textbf{serial} — Перенаправление последовательных портов гостевого домена на файл устройства в домене 0. igor@6: \item \textbf{usb} — Включение поддержки USB без указания специфического устройства. По умолчанию эта функция отключена, в случае же определения параметра usbdevice, ее необходимо задействовать. igor@6: \item \textbf{usbdevice} — Включение поддержки конкретных устройств. Например, поддержка мыши PS/2 через USB: igor@6: \end{itemize} igor@6: igor@6: \begin{verbatim} igor@6: usbdevice='mouse' igor@6: \end{verbatim} igor@6: igor@6: \begin{itemize} igor@6: \item \textbf{localtime} — Установка локального времени. По умолчанию равно \dq{}0\dq{}, т.е UTC igor@6: \item \textbf{soundhw} — Тип звукового устройства для эмуляции. Обычно \texttt{sb16} igor@6: \item \textbf{full-screen} — Поддержка полноэкранного режима. igor@6: \item \textbf{nographic} — Не использовать графический интерфейс, работать только через консоль. В этом случае опции \rq{}sdl\rq{} или \rq{}vnc\rq{} не работают. igor@6: \end{itemize} igor@6: igor@6: \section{Создание дискового раздела для гостевой системы} igor@0: Создаем образ диска Xen: igor@0: igor@0: \begin{verbatim} igor@6: # mkdir -p /root/xenimages igor@0: # cd /root/xenimages igor@0: # dd if=/dev/zero of=WS128.img bs=1M count=4096 igor@0: \end{verbatim} igor@0: igor@6: Также необходимо создать ISO-образ системы Windows XP, который мы собираемся использовать при инсталляции. В данном случае, разместим его в каталоге \texttt{/root/xenimages}. igor@0: igor@0: На основе эталонного файла конфигурации создадим свой собственный: igor@0: igor@0: \begin{verbatim} igor@6: # cat /etc/xen/winxp igor@6: kernel = "hvmloader" igor@6: builder='hvm' igor@6: memory = 512 igor@6: name = "winxp" igor@6: vcpus=1 igor@6: pae=0 igor@6: acpi=0 igor@6: apic=0 igor@6: cpus = "" igor@6: vif = [ 'bridge=xenbr0' ] igor@6: disk = [ igor@6: 'file:/root/xenimages/winXP128.img,hda,w', igor@6: 'file:/root/xenimages/en_winxp_pro_with_sp2.iso,hdc:cdrom,r' igor@6: ] igor@6: on_poweroff = 'destroy' igor@6: on_reboot = 'destroy' igor@6: on_crash = 'destroy' igor@6: device_model = 'qemu-dm' igor@6: boot='d' igor@6: sdl=0 igor@6: vnc=1 igor@6: vncconsole=0 igor@6: stdvga=0 igor@6: serial='pty' igor@0: \end{verbatim} igor@0: igor@6: Обратите внимание на то, что указан параметр \texttt{boot=\rq{}d\rq{}}, что необходимо для установки. igor@6: Впоследствии его необходимо заменить на \texttt{boot=\rq{}c\rq{}}. Доступ к гостевому домену будет осуществляться через VNC, использование SDL не предполагается. igor@0: igor@6: \section{Запуск домена и инсталляция гостевой системы} igor@6: Начинаем установку и подсоединяемся к домену с помощью VNC. Для этого сразу после создания домена запускаем \textbf{vncviewer}. igor@0: igor@0: \begin{verbatim} igor@6: # xm create /etc/xen/winxp igor@6: Using config file "/etc/xen/winxp". igor@6: Started domain Winxp igor@6: % vncviewer :0 igor@0: \end{verbatim} igor@0: igor@0: С установкой могут быть проблемы. Можно попробовать решить проблему так: на экране установки, предлагающем нажать F6 для установки SCSI или RAID контроллера, надо нажать F5 и выбрать пункт \texttt{Standard PC} из предложенного меню. igor@0: igor@0: \begin{verbatim} igor@0: ACPI Multiprocessor PC igor@0: ACPI Uniprocessor PC igor@0: Advanced Configuration and Power Interface (ACPI) PC igor@0: Compaq SystemPro Multiprocessor or 100% Compatible PC igor@0: MPS Uniprocessor PC igor@0: MPS Multiprocessor PC igor@0: Standard PC igor@0: Standard PC with C-Step i486 igor@0: Other igor@0: \end{verbatim} igor@0: igor@6: После того как программа установки Windows отформатирует диск и скопирует на него необходимые файлы, выполняется перезагрузка. В соответствии с файлом конфигурации, igor@6: виртуальная машина при перезагрузке будет завершена, и нам предоставится возможность отредактировать параметр \texttt{boot=\rq{}c\rq{}}, igor@6: после чего виртуальную машину можно будет запускать вновь и соединяться с её консолью: igor@0: igor@0: \begin{verbatim} igor@6: # xm create /etc/xen/winxp igor@6: Using config file "/etc/xen/winxp". igor@6: Started domain winxp igor@6: % vncviewer :0 igor@0: \end{verbatim} igor@0: igor@0: igor@6: \subsection{Паравиртуальные драйверы} igor@0: igor@6: Аппаратная виртуализация берёт на себя основные трудности по переключению контекстов гостевых операционных систем и хост-системы, но она ничего (пока что) не делает для ускорения ввода/вывода. Как только задача требует ввода/вывода любая система виртуализации (но не паравиртуализации!) существенно замедляет свою работу. igor@0: igor@6: Одна из главных причин разработки и использования паравиртуальных драйверов — возможность существенного повышения производительности работы гостевых систем, работающих в режиме полной виртуализации. igor@6: igor@6: Во второй половине 2007 года появились первая реализация свободных паравиртуальных драйверов под Windows, сделанная Джеймсом Харпером (James Harper). igor@6: igor@6: В конце 2007 года вышла версия 0.5.0 драйверов, которые можно рассматривать как экспериментальные. Их можно ставить в виртуальную машину и играться с ними, но их пока что ни в коем случае не стоит использовать на производственных системах. igor@6: igor@6: В настоящий момент свободные паравиртуальные драйверы Xen для Windows находятся в сыром состоянии и могут использоваться исключительно в экспериментальных целях. igor@6: igor@6: Последняя известная (на момент правки) версия свободных паравиртуальных драйверов — 0.9.10. igor@6: igor@6: \subsection{Проброс PCI-устройств внутрь домена Windows} igor@6: igor@6: Начиная с Xen 3.2.0 при наличии в системе аппаратной поддерживи виртуализации ввода/вывода igor@6: Intel VT-d (не путать с виртуализацией процессора VT-x!) igor@6: существует возможность выполнять монопольное выделение PCI-устройства igor@6: домену Xen. igor@6: Раньше это было возможно для паравиртуальных доменов, но было невозможно для igor@6: HVM-доменов, а именно в таком исполняется Windows. igor@6: igor@6: При выполнении проброс PCI-устройства Windows работает с ним напрямую, igor@6: на полной скорости, и использую собственные драйвера. igor@6: Это позволяет обойти проблемы с производительностью, которые есть при эмуляции устройств, igor@6: а также задействовать все возможности устройства, о которых знает драйвер. igor@6: igor@6: При выделении устройства гостевому оно становится igor@6: недоступным для домена 0 и используется гостевым доменом монопольно. igor@6: igor@6: Графический адаптер является очень специфическим устройством, igor@6: монопольное выделение которого пока не поддерживается. igor@6: Это означает, что запускать Counter Strike внутри гостевого igor@6: домена Xen и при этом напрямую использовать графическую карту igor@6: пока не получится. igor@0: igor@0: \subsection{Вопросы и ответы} igor@6: \textbf{Вопрос: Виртуальная машина начала загружаться с образа компакт-диска или жёсткого диска. Спустя некоторое время её экран стал чёрным. Потреблённое процессорное время увеличивается, значит виртуальная машина работает. Но на экране нет никакой реакции. Что делать?} igor@0: igor@6: Да, скорее всего виртуальная машина нормально работает. igor@6: Подключение к экрану виртуальной машины выполняется через VNC, igor@6: при смене разрешения экрана (а при загрузке Windows igor@6: именно это и происходит) нужно переподключаться, igor@6: то есть закрывать VNC-клиент, а потом запускать его вновь. igor@0: igor@6: \textbf{Вопрос: не успел нажать никакую кнопку, когда было соответствующее приглашение при загрузке с компакт-диска, и виртуальная машина попыталась загрузиться с пустого жёсткого диска. А как вообще указать откуда именно будет выполняться загрузка виртуальной машины?} igor@0: igor@6: Откуда именно будет загружаться виртуальная машина igor@6: определяется её конфигурационным файлом, а точнее параметром igor@6: \texttt{boot}, указанном в нём. igor@0: привода CDROM. igor@0: igor@0: \begin{itemize} igor@6: \item \texttt{boot=\rq{}d\rq{}} — загружаться с CDROM\rq{}а (мнемоническое правило — «с диска D:» ) igor@6: \item \texttt{boot=\rq{}c\rq{}} — загружаться с диска (мнемоническое правило — «с диска C:» ) igor@0: \end{itemize} igor@0: igor@6: \textbf{Вопрос: должен ли работать звук в виртуальной машине при подключении через RDP?} igor@0: igor@6: Звук должен работать и работает. igor@6: Звук действительно можно прослушать только при подключении при помощи \textbf{rdesktop} по протоколу RDP. igor@6: Вообще с системой работать удобнее через RDP, чем через служебное VNC-подключение. igor@0: igor@6: При заходе через \textbf{rdesktop}, для того чтобы igor@0: звук проигрывался локально, используйте ключ \textit{-rsound}: igor@0: \begin{verbatim} igor@0: rdesktop -rsound 192.168.1.1 igor@0: \end{verbatim} igor@0: igor@6: \textbf{Вопрос: мышь внутри виртуальной машины и точка-курсор соответствующая указателю VNC-клиента разбегаются. При использовании RDP-подключения такого нет. Почему?} igor@0: igor@6: Расхождение одной и второй мыши связано с тем, igor@6: что \textbf{qemu-dm} эмулирует мышь, устройство относительно позиционирования, igor@6: на основе информации полученной от VNC-подключения, устройства абсолютного позиционирования. igor@6: Эмуляция выполняется с допущениями, поэтому точного совпадения курсоров нет. igor@6: igor@6: VNC-подключение имеет множество других ограничений в сравнении с RDP, igor@6: и его стоит рассматривать как аварийный вариант. igor@6: Если возможности использовать RDP-подключение нет, стоит рассмотреть хотя бы возможность igor@6: использования полноценного VNC-сервера внутри виртуальной машины. igor@6: igor@6: Если вы всё же используете встроенный VNC, то желательно отключить аппаратное ускорение мыши в Control Panel, igor@6: или перейти на эмуляцию другого устройства (не мыши, а планшета) в Xen. igor@0: Иначе у вас будет два курсора, одному из которых будет соответствовать ваша реальная мышь, а вторым виртуальная. igor@0: igor@6: \textbf{Вопрос: Как поменять образ компакт-диска внутри виртуальной машины без её перезапуска?} igor@0: igor@6: Есть два метода. Один для домашнего использования (он является небезопасным и по умолчанию в новых версиях Xen блокируется; чтобы использовать, его надо явно разрешать) igor@6: и второй — промышленный. igor@0: igor@6: Первый способ. igor@6: В VNC-окне нажать ctr-alt-2, что переключит вас на консоль \textbf{qemu}. igor@6: Дальше использовать \textbf{eject} и прочие команды для смены диска. igor@6: После того как образ заменён, нажать ctrl-alt-1 (не F1! не путайте!) для возврата в консоль (графическую) гостевой операционной системы. igor@0: igor@6: По умолчанию в новых версиях Xen эта возможность отключена. igor@6: Для того чтобы её включить, нужно указать в конфигурационном igor@6: файле домена igor@6: igor@6: \begin{verbatim} igor@6: monitor=1 igor@6: \end{verbatim} igor@6: igor@6: (однако это считается небезопасным, см. ниже). igor@6: igor@6: Второй: использовать \textbf{xm} \texttt{block-attach}, \textbf{xm} \texttt{block-detach} igor@0: (подробнее: Xen-block-attach). igor@0: igor@6: Второй метод намного более правильный и более безопасный (первый является небезопасным, поскольку из консоли \textbf{qemu} можно сделать с доменом всё что угодно, igor@6: и, естественно, что это абсолютно не зависит от того, под каким пользователем вы вошли в гостевой домен). igor@6: Кроме того, второй метод позволяет менять не только компакт-диски, но и жёсткие дискаи и сетевые карты igor@6: (это касается PV-доменов, у HVM-доменов этот метод будет работать только при использовании паравиртуальных драйверов). igor@0: igor@6: \textbf{Вопрос: Можно ли запускать HVM-домены на серверах с ОЗУ более 4 GB? В системе х86\_64 с 4GB ядро зависает с сообщением:\dq{}agpgart: Detected an Intel 965G Chipset.\dq{}, с 3GB — нормально.} igor@0: igor@0: Это нормально. igor@0: Точнее, это не совсем нормально, но это возможно. igor@0: igor@0: Можно попробовать следующие решения: igor@0: igor@0: \begin{enumerate} igor@6: \item Использовать параметр ядра \texttt{agp=off}; igor@6: \item Добавить модуль intel\_agp в чёрный список незагружаемых модулей; igor@6: \item Включить в BIOS фичу Memory Remap Feature (если она есть); это должно быть в конфигурации северного моста; igor@6: \item Использовать AMD. igor@0: \end{enumerate} igor@0: igor@6: \textbf{Вопрос: На сервере 8Гб памяти, но больше 4 на гостевую систему в свободной версии xen выделить не получается. Поддержка PAE включена.} igor@0: igor@6: Вероятно, речь идёт о гостевом HVM-домене (потому что если это PV-домен и он не видит >4G, то это странно вдвойне). igor@6: Скорее всего, проблема связана с багом \#971, из-за которого действительно нельзя было увидеть больше 4G памяти в HVM-домене. igor@6: Если так, то он уже давно исправлен и этой проблемы быть не должно. igor@0: igor@0: Проверьте, что у вас: igor@0: \begin{enumerate} igor@0: \item Если в HVM-домене запускается Linux, ядро под которым запускается HVM-домен, имеет поддержку PAE. (это HVM, поэтому может работать и ядро без PAE на хосте с PAE, но конечно видеть >4G оно при этом не будет) igor@0: \item Если в HVM-домене запускается Windows, в конфигурации загрузчика (boot.ini) присутствует ключ /PAE igor@0: \end{enumerate} igor@0: igor@6: \textbf{Вопрос: как передать Windows-системе, запущенной внутри домена Xen, флоппи-диск, если есть его образ?} igor@0: igor@6: Используйте параметр \texttt{fda} в конфигурационном файле. igor@6: igor@6: \begin{verbatim} igor@6: fda='/iso/winxp.img' igor@6: \end{verbatim} igor@6: igor@6: \section{Дополнительная информация} igor@6: \subsection{Описание процесса запуска Windows в домене XenU} igor@0: \begin{itemize} igor@6: \item \htmladdnormallinkfoot{Инсталляция Windows XP в HVM-домене Xen}{http://xgu.ru/wiki/xen/winxp} (рус.) igor@0: \end{itemize} igor@0: