Windows XP в Xen

Материал из Xgu.ru

Перейти к: навигация, поиск


В основу этой страницы положена статья Михаила Сгибнева.

Короткий URL: xen/winxp

На этой странице рассматривается процедура подготовки и запуска домена с Windows в системе виртуализации Xen на платформе с аппаратной поддержкой виртуализации (HVM). Выполнять Windows в паравиртуальном режиме (т.е. без использования аппаратных архитектурных расширений виртуализации) на сегодняшний день нельзя. Возможно, это можно будет сделать в будущем.
Подробности на странице: Windows в паравиртуальном домене Xen.

Содержание

[править] Предварительные требования

В первую очередь, для установки Windows XP, как и любой другой не портированной на Xen системы, необходима поддержка центральным процессором технологии виртуализации Intel®Virtualization Technology (VT) или Pacifica (AMD). Информацию о поддержке процессорами аппаратной виртуализации можно посмотреть на странице Аппаратные требования Xen. Поддержка аппаратной виртуализации должна быть и у Xen.

[править] Поддержка VMX

Убедиться в наличии поддержки VMX можно так.

Для процессоров Intel:

# xm dmesg | grep VMX
(XEN) VMXON is done
(XEN) VMXON is done
...
(XEN) VMXON is done
(XEN) VMXON is done
(XEN) VMXON is done
#

Если используется процессор AMD:

# xm dmesg | grep -i svm
(XEN) AMD SVM Extension is enabled for cpu 0.
(XEN) AMD SVM Extension is enabled for cpu 1.

В общем случае:

# xm info | grep caps
hw_caps                : 178bfbff:ebd3fbff:00000000:00000010:00002001:00000000:0000001f
xen_caps               : xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p

hvm-3.0-x86_32 говорит о том, что XEN успешно обнаружил процессор, который поддерживает технологии Intel VT или AMD-V.

Если у вас другое сообщение, но вы уверены, что у процессора есть архитектурные расширения виртуализации, то проверьте настройки BIOS и, если вы этого ещё не сделали, задействуйте поддержку VT.

Возможно, BIOS вашей материнской платы искусственно отключает виртуализацию. В этом случае нужно обновить или исправить BIOS (см. например GA-M59SLI-S4)

[править] Конфигурационный файл домена

В терминологии Xen гостевые домены, исполняющиеся в режиме аппаратной виртуализации называются HVM-доменами (Hardware Virtualization Mode). Для облегчения процесса настройки существует пример конфигурационного файла такого домена (при установке из исходников он называется /etc/xen/xmexample.hvm; при установке из пакетов путь может быть другим). Множество параметров, использующихся в этом файле, шире чем в конфигурационном файле паравиртуального домена:

  • kernel — VMX firmware loader, для HVM-домена обычно hvmloader
  • builder — Тип домена. Для HVM-домена обязательно hvm
  • acpi — Поддержка ACPI внутри HVM-домена, по умолчанию равно "0" (отключено)
  • apic — Поддержка APIC внутри HVM-домена, по умолчанию равно "0" (отключено)
  • pae — Поддержка PAE внутри HVM-домена, по умолчанию равно "0" (отключено)
  • vif — Описание сетевых интерфейсов. Представляет собой список строк, каждая из которых описывает один интерфейс. В каждой строке, соответствующей интерфейсу, обязательно должен присутствовать компонент bridge, указывающий к какому мосту подключён интерфейс. Опционально может указываться MAC-адрес интерфейса (по умолчанию генерируется случайным образом внутри диапазона, выделенного Xen Source). Здесь же может задаваться модель эмулируемой сетевой карты (параметр model).
  • disk - Определяет дисковые устройства, к которым гостевой домен должен иметь доступ. Если для домена используется физический носитель в качестве диска, то он должен быть описан строкой типа:
     phy:UNAME,DEV,MODE,
где UNAME - имя устройства, DEV - имя диска, как его видит домен и MODE принимает значения r для read-only и w для read-write. Раньше нужно было ещё указывать параметр ioemu, сейчас это уже не обязательно [1].
Если используется образ диска, находящийся в файле, то строка принимает вид:
     file:FILEPATH,DEV,MODE
Если используется больше одного диска, то они разделяются запятой. Например:
     disk = ['file:/var/images/image1.img,hda,w', 'file:/var/images/image2.img,hdb,w']
Если какой-то из образов является образом компакт-диска, и предполагается, что в виртуальной машине должен эмулироваться привод CD-ROM, нужно использовать суффикс :cdrom в описании диска:
     disk = ['file:/var/images/image1.img,hda,w', 'file:/var/images/image2.iso,hdc:cdrom,w']
CD-ROM'ов может быть несколько.
  • boot — Загрузка с floppy (a), hard disk (c) или CD-ROM (d).
  • device_model — Инструмент эмуляции устройств для HVM-домена. Обычно qemu-dm
  • sdl — Задействует библиотеку SDL для отображения графики, по умолчанию равно "0" (отключено)
  • vnc — Задействует библиотеку VNC для отображения графики, по умолчанию равно "0" (отключено)
Пользователь может использовать vncviewer для подключения к домену. Например:
     $ vncviewer domain0_IP_address:0
  • vncconsole — Нужно ли автоматически запускать vncviewer при старте домена. Имеет смысла только если vnc=1. По умолчанию равно 0.
  • serial — Перенаправление последовательных портов гостевого домена на файл устройства в домене 0.
  • usb — Включение поддержки USB без указания специфического устройства. По умолчанию эта функция отключена, в случае же определения параметра usbdevice, ее необходимо задействовать.
  • usbdevice — Включение поддержки конкретных устройств. Например, поддержка мыши PS/2 через USB:
    usbdevice='mouse'
  • localtime — Установка локального времени. По умолчанию равно "0", т.е UTC
  • soundhw — Тип звукового устройства для эмуляции. Обычно sb16
  • full-screen — Поддержка полноэкранного режима.
  • nographic — Не использовать графический интерфейс, работать только через консоль. В этом случае опции 'sdl' или 'vnc' не работают.

[править] Создание дискового раздела для гостевой системы

Создаем образ диска Xen:

    # mkdir -p /root/xenimages
    # cd /root/xenimages
    # dd if=/dev/zero of=WS128.img bs=1M count=4096

Также необходимо создать ISO-образ системы Windows XP, который мы собираемся использовать при инсталляции. В данном случае, разместим его в каталоге /root/xenimages.

На основе эталонного файла конфигурации создадим свой собственный:

# cat /etc/xen/winxp
kernel = "hvmloader"
builder='hvm'
memory = 512
name = "winxp"
vcpus=1
pae=0
acpi=0
apic=0
vif = [ 'bridge=xenbr0' ]
disk = [ 
'file:/root/xenimages/WS128.img,hda,w',
'file:/root/xenimages/en_winxp_pro_with_sp2.iso,hdc:cdrom,r'
]
on_poweroff = 'destroy'
on_reboot   = 'destroy'
on_crash    = 'destroy'
device_model = 'qemu-dm'
boot='d'
sdl=0
vnc=1
vncconsole=0
stdvga=0
serial='pty'

Обратите внимание на то, что указан параметр boot='d', что необходимо для установки. Впоследствии его необходимо заменить на boot='c'. Доступ к гостевому домену будет осуществляться через VNC, использование SDL не предполагается.

[править] Запуск домена и инсталляция гостевой системы

Начинаем установку и подсоединяемся к домену с помощью VNC. Для этого сразу после создания домена запускаем vncviewer.

# xm create /etc/xen/winxp
Using config file "/etc/xen/winxp".
Started domain Winxp
% vncviewer :0

С установкой могут быть проблемы. Можно попробовать решить проблему так: на экране установки, предлагающем нажать F6 для установки SCSI или RAID контроллера, надо нажать F5 и выбрать пункт Standard PC из предложенного меню.

ACPI Multiprocessor PC 
ACPI Uniprocessor PC 
Advanced Configuration and Power Interface (ACPI) PC 
Compaq SystemPro Multiprocessor or 100% Compatible PC 
MPS Uniprocessor PC 
MPS Multiprocessor PC 
Standard PC 
Standard PC with C-Step i486 
Other

После того как программа установки Windows отформатирует диск и скопирует на него необходимые файлы, выполняется перезагрузка. В соответствии с файлом конфигурации, виртуальная машина при перезагрузке будет завершена, и нам предоставится возможность отредактировать параметр boot='c', после чего виртуальную машину можно будет запускать вновь и соединяться с её консолью:

# xm create /etc/xen/winxp
Using config file "/etc/xen/winxp".
Started domain winxp
% vncviewer :0

[править] Запуск виртуальной машины Xen на голом железе и наоборот

Операционная система Windows одного хоста, запущенная в домене Xen на другом хосте
Основная страница: Экспорт установленной системы в домен Xen

Если на компьютере установлено две операционные системы, и одна из них это Xenolinux (Xen + Linux), то вторую можно запустить как пользовательский домен Xen. Если операционная система установлена не локально, а на другом компьютере, её тоже можно запустить в домене Xen, только для этого необходимо как-то дать возможность доступа системе виртуализации к образу установленной системы, так чтобы, грубо говоря, виртуальный домен увидел диск. Это можно сделать, например, с помощью AoE или iSCSI.


И наоборот, вы можете установить Windows в Xen, а потом запускать её на голом железе. Вот, например, конфигурационный файл домена, который использовался для инсталляции Windows на жёсткий диск. Впоследствии систему можно запускать непосредственно (то есть, без домена 0 и без Xen).

kernel = "hvmloader"
builder='hvm'
memory = 512
shadow_memory = 8
name = "winxp-hdd"
vcpus=1
pae=1
acpi=1
apic=1
vif = [ 'type=ioemu, bridge=service0, mac=00:16:3e:03:00:c1' ]
disk = [ 'phy:sdc,hda,w', 'file:/Volumes/ISO/windows-xp-pro-sp2.iso,hdc:cdrom,r' ]
device_model = 'qemu-dm'
boot="c"
sdl=0
vnc=1
vncpasswd=''
stdvga=0
serial='pty'

перед первым запуском на голом железе нужно изменить в Windows драйвер контроллера жёсткого диска. Для этого, выбрать:

Панель управления 
> Система 
  > Оборудование 
    > Диспетчер устройств 
      > IDE ATA/ATAPI контроллеры 
        > правой кнопкой по установленному IDE-контроллеру 
        > Обновить драйвер  
        > Нет, не в этот раз 
        > Установка из указанного места 
        > Не выполнять поиск. Я сам выберу нужный драйвер 
        > Стандартный двухканальный контроллер PCI IDE 
        > Далее 
        > Готово! 

Процедура переключения на стандартный драйвер контроллера IDE показана на флэш-ролике.

Flash icon.jpg

Флэш-ролик
http://nt.ua/swf/Standard_ide.html

[править] Бесшовная виртуализация

Основная страница: Бесшовная виртуализация

[править] Паравиртуальные драйверы

Окно Device Manager в Windows с установленными свободными паравиртуальными драйверами
Основная страница: Паравиртуальные драйверы Xen для Windows

Аппаратная виртуализация берёт на себя основные трудности по переключению контекстов гостевых операционных систем и хост-системы, но она ничего (пока что) не делает для ускорения ввода/вывода. Как только задача требует ввода/вывода любая система виртуализации (но не паравиртуализации!) существенно замедляет свою работу.

Одна из главных причин разработки и использования паравиртуальных драйверов — возможность существенного повышения производительности работы гостевых систем, работающих в режиме полной виртуализации.

Во второй половине 2007 года появились первая реализация свободных паравиртуальных драйверов под Windows, сделанная Джеймсом Харпером (James Harper).

В конце 2007 года вышла версия 0.5.0 драйверов, которые можно рассматривать как экспериментальные. Их можно ставить в виртуальную машину и играться с ними, но их пока что ни в коем случае не стоит использовать на производственных системах.

В настоящий момент свободные паравиртуальные драйверы Xen для Windows находятся в сыром состоянии и могут использоваться исключительно в экспериментальных целях.

Последняя известная (на момент правки) версия свободных паравиртуальных драйверов — 0.9.11.

[править] Проброс PCI-устройств внутрь домена Windows

Основная страница: Использование VT-d в Xen

Начиная с Xen 3.2.0 при наличии в системе аппаратной поддержки виртуализации ввода/вывода Intel VT-d (не путать с виртуализацией процессора VT-x!) существует возможность выполнять монопольное выделение PCI-устройства домену Xen. Раньше это было возможно для паравиртуальных доменов, но было невозможно для HVM-доменов, а именно в таком исполняется Windows.

При выполнении проброс PCI-устройства Windows работает с ним напрямую, на полной скорости, и использую собственные драйвера. Это позволяет обойти проблемы с производительностью, которые есть при эмуляции устройств, а также задействовать все возможности устройства, о которых знает драйвер.

Icon-caution.gif

При выделении устройства гостевому оно становится недоступным для домена 0 и используется гостевым доменом монопольно.

Icon-caution.gif

Графический адаптер является очень специфическим устройством, монопольное выделение которого пока не поддерживается. Это означает, что запускать Counter Strike внутри гостевого домена Xen и при этом напрямую использовать графическую карту пока не получится.

[править] Вопросы и ответы

Вопрос: Виртуальная машина начала загружаться с образа компакт-диска или жёсткого диска. Спустя некоторое время её экран стал чёрным. Потреблённое процессорное время увеличивается, значит виртуальная машина работает. Но на экране нет никакой реакции. Что делать?

Да, скорее всего виртуальная машина нормально работает. Подключение к экрану виртуальной машины выполняется через VNC, при смене разрешения экрана (а при загрузке Windows именно это и происходит) нужно переподключаться, то есть закрывать VNC-клиент, а потом запускать его вновь.

Вопрос: не успел нажать никакую кнопку, когда было соответствующее приглашение при загрузке с компакт-диска, и виртуальная машина попыталась загрузиться с пустого жёсткого диска. А как вообще указать откуда именно будет выполняться загрузка виртуальной машины?

Откуда именно будет загружаться виртуальная машина определяется её конфигурационным файлом, а точнее параметром boot, указанном в нём. привода CDROM.

  • boot='d' — загружаться с CDROM'а (мнемоническое правило — «с диска D:» )
  • boot='c' — загружаться с диска (мнемоническое правило — «с диска C:» )


Вопрос: должен ли работать звук в виртуальной машине при подключении через RDP?

Звук должен работать и работает. Звук действительно можно прослушать только при подключении при помощи rdesktop по протоколу RDP. Вообще с системой работать удобнее через RDP, чем через служебное VNC-подключение.

При заходе через rdesktop, для того чтобы звук проигрывался локально, используйте ключ -rsound:

  rdesktop -rsound 192.168.1.1

Вопрос: мышь внутри виртуальной машины и точка-курсор соответствующая указателю VNC-клиента разбегаются. При использовании RDP-подключения такого нет. Почему?

Расхождение одной и второй мыши связано с тем, что qemu-dm эмулирует мышь, устройство относительно позиционирования, на основе информации полученной от VNC-подключения, устройства абсолютного позиционирования. Эмуляция выполняется с допущениями, поэтому точного совпадения курсоров нет.

VNC-подключение имеет множество других ограничений в сравнении с RDP, и его стоит рассматривать как аварийный вариант. Если возможности использовать RDP-подключение нет, стоит рассмотреть хотя бы возможность использования полноценного VNC-сервера внутри виртуальной машины.

Если вы всё же используете встроенный VNC, то желательно отключить аппаратное ускорение мыши в Control Panel, или перейти на эмуляцию другого устройства (не мыши, а планшета) в Xen. Иначе у вас будет два курсора, одному из которых будет соответствовать ваша реальная мышь, а вторым виртуальная.

Вопрос: Как поменять образ компакт-диска внутри виртуальной машины без её перезапуска?

Есть два способа. Один для домашнего использования (он является небезопасным и по умолчанию в новых версиях Xen блокируется; чтобы использовать, его надо явно разрешать) и второй — промышленный (но он работает только для PV-доменов или доменов, в которых установлены PV-драйверы).

Первый способ. В VNC-окне нажать ctr-alt-2, что переключит вас на консоль qemu. Дальше использовать eject и прочие команды для смены диска.

(qemu) eject hdc
(qemu) change hdc /root/xenimages/rhel-5-server-i386-disc2.iso

После того как образ заменён, нажать ctrl-alt-1 (не F1! не путайте!) для возврата в консоль (графическую) гостевой операционной системы.

Tip-icon.gif

В мониторе QEMU не получается набирать большие буквы, поэтому лучше сразу позаботиться о том, чтобы в именах файлов не было больших букв. Вообще, набрать большие буквы всё же можно, но это не очень удобно: нужно переключиться из монитора QEMU, затем нажать CAPS, после чего вернуться в монитор QEMU. Аналогичного результата можно добиться, если дать команду sendkey caps_lock. Набирать маленькие буквы тогда придётся с нажатой клавишей shift. И ещё есть патч [2], позволяющий решить описанную проблему.

Если система ругается на то как называется CDROM (hdc device not found), проверить названия можно при помощи

(qemu) info block

По умолчанию в новых версиях Xen эта возможность отключена. Для того чтобы её включить, нужно указать в конфигурационном файле домена

monitor=1

(однако это считается небезопасным, см. ниже).

Второй: использовать xm block-attach, xm block-detach (подробнее: Xen-block-attach).

Второй способ более безопасный (первый является небезопасным, поскольку из консоли qemu можно сделать с доменом всё что угодно, и, естественно, что это абсолютно не зависит от того, под каким пользователем вы вошли в гостевой домен). Кроме того, он позволяет менять не только компакт-диски, но и жёсткие дискаи и сетевые карты (однако работает он только в PV-доменах, у HVM-доменов этот способ будет работать только при использовании паравиртуальных драйверов).

Вопрос: Можно ли запускать HVM-домены на серверах с ОЗУ более 4 GB? В системе х86_64 с 4GB ядро зависает с сообщением:"agpgart: Detected an Intel 965G Chipset.", с 3GB — нормально.

Это нормально. Точнее, это не совсем нормально, но это возможно.

Можно попробовать следующие решения:

  1. Использовать параметр ядра agp=off;
  2. Добавить модуль intel_agp в чёрный список незагружаемых модулей;
  3. Включить в BIOS фичу Memory Remap Feature (если она есть); это должно быть в конфигурации северного моста;
  4. Использовать AMD.

Вопрос: На сервере 8Гб памяти, но больше 4 на гостевую систему в свободной версии xen выделить не получается. Поддержка PAE включена.

Вероятно, речь идёт о гостевом HVM-домене (потому что если это PV-домен и он не видит >4G, то это странно вдвойне). Скорее всего, проблема связана с багом #971, из-за которого действительно нельзя было увидеть больше 4G памяти в HVM-домене. Если так, то он уже давно исправлен и этой проблемы быть не должно.

Проверьте, что у вас:

  1. Если в HVM-домене запускается Linux, ядро под которым запускается HVM-домен, имеет поддержку PAE. (это HVM, поэтому может работать и ядро без PAE на хосте с PAE, но конечно видеть >4G оно при этом не будет)
  2. Если в HVM-домене запускается Windows, в конфигурации загрузчика (boot.ini) присутствует ключ /PAE


Вопрос: как передать Windows-системе, запущенной внутри домена Xen, флоппи-диск, если есть его образ?

Используйте параметр fda в конфигурационном файле.

fda='/iso/winxp.img'

[править] Дополнительная информация

[править] Описание процесса запуска Windows в домене XenU


[править] Проблемы производительности в виртуализированных машинах Windows

Xen
Xen

Виртуализация и паравиртуализация
Эмуляция | Виртуализация | Паравиртуализация | Рекурсивная виртуализация
Паравиртуальные драйверы | Виртуализация ввода/вывода

Общие вопросы по Xen
Аппаратные требования Xen | Поддержка Xen операционными системами | Поддерживаемые аппаратные архитектуры |
Примеры использования Xen | Сравнение виртуальных машин |
Хостинг на Xen
Альтернативы Xen

свободные: KVM | LXC | OpenVZ | VServer | QEMU | VirtualBox
проприетарные: Hyper-V | VMware ESX Server

Технические вопросы
Инсталляция Xen | Конфигурационный файл домена
ОС в Xen: Linux small icon.png Linux | Solaris small icon.png OpenSolaris | Freebsd small icon.png FreeBSD | Openbsd small icon.png OpenBSD | Netbsd small icon.png NetBSD | Windows xp small icon.png Windows XP | Windows vista small icon.png Windows Vista
Устройства: Блочные | USB | SCSI | Сеть | PV-драйверы для Linux | PV-драйверы для Windows | Консоль

Распределение ресурсов между доменами | Перенос системы внутрь Xen | HVM -> PV

Управление и кластеризация | Enomalism | Xen+DRBD | Ganeti | Convirt 2.0 | SkyCover Infrastructure
а