Опции доменов Xen

Материал из support.qbpro.ru

источник

Актуально для: Xen 4.0+; 3.4+

Денис "Reagent" Ходус @ 05.09.2011

Эта заметка содержит описание параметров (опций), применяемых в конфигурационных файлах, описывающих настройки виртуальных машин - доменов-U (гостевых доменов - DomU).

Заметка не полная, ибо информацию по Xen нарывать достаточно сложно из-за плохой его документированности. То, что удается изучить - выкладывается здесь. Так что заметка время от времени пополняется новыми записями (по мере их поступления).

Также следует понимать, что это лишь пояснения - что какой параметр значит и какие значения может принимать. Это не мануал - как оно работает. Здесь нет детальных разборов схем работы сети, блочных устройств Xen или чего-то другого.


name

name = 'mydomu'

Указывает имя домена. Именно по этому имени потом Вы будете обращаться к домену через команду "xm". Должно быть уникальным в пределах этого сервера виртуальных машин.



uuid

uuid = '4413192e-0624-2974-6a54-1f395f07a7f1'

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

Никак не связано с опций 'name'.



device_model

device_model = '/usr/lib/xen/bin/qemu-dm'

Укащзывает модель виртуальной машины. По-умолчанию - паравиртуальная машина. Для создания HVM-гостя следует указать вот так: device_model = '/usr/lib/xen/bin/qemu-dm'



builder

builder = 'hvm'

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

Для того, чтобы создать HVM машину - указывайте 'hvm' в качестве значения параметра.



kernel

kernel = "/etc/xen/kernels/vmlinuz-2.6.32-5-xen"

Указывает - какое ядро использовать для данной паравиртуальной машины. Ядро должно находится в файловой системе Dom0, а сама машина должна быть полностью паравиртуальной.

Применяется для паравиртуальных ОС семейства Unix (для Windows ядра просто не существует).

Для HVM используется специальное слово 'hvmloader': kernel = 'hvmloader'



ramdisk

ramdisk = "/etc/xen/kernels/initrd.img-2.6.32-5-xen"

Указывает - какой ramdisk использовать для данной паравиртуальной машины. Ramdisk должен находится в файловой системе Dom0, а сама машина должна быть полностью паравиртуальной.

Применяется для паравиртуальных ОС семейства Unix (для Windows ramdisk просто не существует).



root

root = "root=/dev/sda5 ro console=hvc0" root = "/dev/xvda1 ro" root = "/dev/xvda console=hvc0"

Параметр указывает - какой из присоединенных к виртуальной машине дисков использовать как загрузочный рут, а так-же некоторые дополнительные параметры, такие, как "какое устройство использовать в качетсве консоли".

Точный синтаксис лучше всего смотреть в мурзилке по установке нужной Вам виртуальной машине - он слегка отличается для того или иного случая. Общие случаи приведены выше в качестве примеров.



extra

extra = 'memory=1024M'

Указывает - какие дополнительные параметры передать в паравиртуальную ОС виртуальной машины.



features

features = 'some_feature'

Позволяет включить некоторые, специфичные для данной паравиртуальной машины "фичи" (машина должна быть паравиртуальной!)



memory

memory = '256'

Указывает - какой объем ОЗУ (оператвной памяти) выделять для виртуальной машины, в мегабайтах. В примере выше - выделено 256МБ памяти.



maxmem

maxmem = '512'

Для полностью паравиртуальных ОС (походу - только Linux) - указывает - до какого объема может увеличиваться динамически выделяемая ОЗУ для данного домена. Т.е. Xen при необходимости может увеличить объем выделенной памяти машине. И потом уменьшить обратно - по мере ненужности.

При этом следует передать виртуальной ОС дополнительно параметр 'mem=?M' через опцию "extra". Вот пример: memory = '256' mexmem = '1024' extra = "mem=1024M"



bootloader

bootloader = 'pygrub'

Позволяет указать boot-loader. Xen поддерживает 2 лоадера: 'PyGRUB' и 'PvGRUB'.

Boot-loader позволяет загружать ядро и систему паравиртуальной машины без необходимости иметь файлы ядра и ramdisk в файловой системе Dom0. При этом используется стандартный загрузчик Grub, находящийся в файловой системе виртуальной машины.

Плюсом этого метода можно назвать то, что при обновлении ядра виртуального гостя без bootloader его приходится вручную выливать в Dom0; при использовании же bootloader ядро берется изнутри файловой системы DomU.



disk

disk = [ 'file:/etc/xen/myguest/hdd0,sda,w' ] disk = [ 'file:/etc/xen/myguest/hdd0,xvda,w', 'file:/etc/xen/myguest/hdd1,xvdb,w' ] disk = [ 'file:/etc/xen/myguest/hdd0,hda,w', 'file:/etc/xen/iso/somedisk.iso,hdc:cdrom,r' ] disk = [ 'tap:aio:/etc/xen/myguest/hdd0,hda,w' ]

Указывает - какой (какие) жесткий диск(и) и ISO-диски использовать вместе с виртуальной машиной, описывая их присоединение. Если нужно использовать несколько дисков - они перечисляются через запятую.

Можно использовать как файловые образы дисков (т.е. виртуальные диски, который в Dom0 выглядят как обычные файлы), так и физически разделы или LVM-диски. Так-же поддерживаются два интерфейса: LOOP и TAP. LOOP - более медленный, но только с ним работают паравиртуальные машины. TAP - быстрее, но имеет смысл использовать только с виртуальными машинами, которые Вы не собираетесь использовать в паравиртуальном режиме (например, Windows без драйверов GPLPV, или FreeBSD в HVM).

Синтаксис такой:

<интерфейс>:<путь_к_устройсву_диска>,<устройство_в_гостевой_системе>,<r|w>

где: <интерфейс> : Это указатель - какой интерфейс использовать. Для подключения файлов как виртуальных дисков используются "file" или "tap:aio". Для подключения физических дисков - "phy". <путь_к_устройству_диска> : Это указатель - какой файл в файловой системе Dom0 использовать в качестве виртуального диска. Это может быть как обычный файл-образ при использовании интерфейса "file" или "tap:aio", так и файл устройства в /dev при использовании физического диска (например, "/dev/sdb"). <устройство_в_гостевой_системе> : Это указатель того - в виде какого устройства подсоединять виртуальный диск в виртуальной машине. Для Windows и FreeBSD обычно используются "hda", "hdb" и т.д. - т.е. IDE-устройства. SCSI-устройства "sda", "sdb" и т.д. обычно используются на HVM-машинах Linux. Для паравиртуальных машин обычно применяются "xvda", "xvdb" и т.д. <r|w> : здесь указывается - в каком режиме работать с файлом виртуального диска. Например, для жестких дисков логично использовать "w" - Read+Write режим. Для CDROM и ISO-образов CD логично использовать "r" - Read-Only.


LOOP - диск в файле

disk = [ 'file:/path/to/file/virualdisk.img,hda,w' ] disk = ['file:/pathtofile/virualdisk.img,hda,w', 'file:/pathtofile/virtualdisk2.img,hdb,w']

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

LOOP - ISO-образ CD-диска

disk = ['file:/path/to/file/virualdisk.img,hda,w', 'file:/path/to/iso/cd.iso,hdc:cdrom,r']

При этом в качетсве CDROM используется вполне конкретный ISO файл в файловой системе домена-0.

TAP - диск в файле

disk = [ 'tap:aio:/path/to/file/virualdisk.img,hda,w' ] disk = [ 'tap:aio:/path/to/file/virualdisk.img,hda,w', 'tap:aio:/path/to/file/virtualdisk2.img,hdb,w' ]

При этом в качестве виртуального диска используется файл в файловой системе домена 0. Как я уже говорил - TAP-интерфейс пригоден только для HVM машин без паравиртуализации.

TAP - ISO-образ CD-диска

disk = ['tap:aio:/pathtofile/virualdisk.img,hda,w', 'tap:aio:/pathtoiso/cd.iso,hdc:cdrom,r']

При этом в качетсве CDROM используется вполне конкретный ISO файл в файловой системе домена-0.

PHY - физический раздел

disk = [ 'phy:/dev/sdb,hda,w' ] disk = [ 'phy:/dev/sdb,hda,w', 'phy:/dev/cdrom,hdc:cdrom,r' ]

Позволяет использовать физический жесткий диск или раздел. Т.е. писать и читать данные с реально подсоединенного физического диска.

LVM-диск (интерфейс PHY)

disk = [ 'phy:/dev/vg0/xen1_swap,xvda1,w', 'phy:/dev/vg0/xen1_root,xvda2,w' ]

При этом будет использоваться LVM-диск.


Создать файл виртуального диска для LOOP или TAP интерфейса

Файл с заранее зарезервированным местом (долго):

  1. dd if=/dev/zero of=/path/to/file/virtualdisk.img bs=1M count=10240

В Этом примере создается файл размером 10240МБ (10ГБ). Создается он долго, т.к. из /dev/zero наполняется нулями по всему объему.

Динамически растущий файл (быстро):

  1. dd if=/dev/zero of=/path/to/file/virtualdisk.img bs=1M count=1 seek=10240

В этом примере создается файл размером 10240МБ (10ГБ), но в файловой системе изначально он вообще ничего не занимает. Он будет расти по мере использования виртуальной машиной.

При этом нужно быть очень внимательными. Может возникнуть ситуация, когда Вы насоздаете дисков на общий объем больше, чем есть в файловой системе управляющего домена. При этом все будет нормально до тех пор, пока место в Dom0 не закончится. Например, у Вас есть 100ГБ для ВМ и Вы насоздавали 12 дисков по 10ГБ (итого 120ГБ). Изначально это даже работать все будет... пока эти все 12 дисков не наполнятся - места то всего на самом деле 100ГБ для них, а не 120.



vif

vif = [ 'bridge=eth0, mac=fe:16:3e:68:fc:01' ] vif = [ 'bridge=eth0, mac=fe:16:3e:68:fc:01', 'bridge=eth1, mac=fe:16:3e:68:fc:02' ]

Эта опция конфигурирует сетевые интерфейсы, которые будут переданы в гостевую систему. Т.е. отсюда мы указываем - какие сетевые карты увидит виртуальная машина.

Как видно из примера - возможно добавить несколько сетевых интерфейсов, перечисляя их через запятую.


bridge

Указывает, что добавляемый сетевой интерфейс - это сетевой мост внутри Dom0. Через "=" указывается имя сетевого моста (по-умолчанию - это "eth0") - на случай, если у Вас сетевых карт дофига и нужно пробросить конкретную. vif = [ 'bridge=eth0, mac=fe:16:3e:68:fc:01' ]


mac

Позволяет перманентно (на постоянку) присвоить этой виртуальной сетевой карте MAC-адрес, что крайне полезно, в особенности для Linux-подобный систем. Если эту опцию не указывать - MAC-адрес будет присваиваться каждый раз - при каждом запуске машины - рандомом (случайный), результатом чего будет то, что сеть в Linux-системах нормально работать не будет никогда - т.к. Linux привязывает сетевые настройки к MAC-адресу. vif = [ 'bridge=eth0, mac=fe:16:3e:68:fc:01' ]


type

Указывает тип сетевого интерфейса. vif = [ 'bridge=eth0, mac=fe:16:3e:68:fc:01, type=paravirtualized' ] paravirtualized : Указывает Xen то, что сетевую карту на HVM-домене нужно использовать в паравиртуальном режиме. Применение - после установки GPLPV драйверов на Windows для ее паравиртуализации. Иначе сетевая карта продолжает работать через Qemu - домен то остается HVM. ioemu : Указывает Xen то, что сетевую карту нужно эмулировать как для HVM-домена (т.е. использовать Qemu, не паравиртуальную).


script

Позволяет указать - какой скрипт запуска интерфейса использовать. vif = [ 'script=vif-route, ip=1.2.3.2/32 1.2.3.3/32 1.2.3.4/32,netdev=eth0' ]

Вот примеры: vif-route : Использовать маршрутизируемый сетевой интерфейс vif-bridge : Использовать мост vif-nat : Использовать маршрутизируемый сетевой интерфейс с NAT на выходе


backend

Задает управляющий домен (ID домена), который "владеет" физикой этой сетевой карты. По-умолчанию это домен-0 (ID=0) и Вам врят-ли когда-то придется задавать этот параметр.


ip

Задает IP адрес(а) для виртуальной сетевой карты (если это возможно - т.е. только для паравиртуального домена). vif = [ 'script=vif-route, ip=1.2.3.2/32 1.2.3.3/32 1.2.3.4/32' ]


netdev

Указывает - какой физическое устройство задействовать с этим виртуальным. Для конфигураций с сетевым мостом через опцию 'bridge=eth0', по большому счету, не нужен.


Конфигурация с сетевыми мостами

vif = [ 'bridge=eth0, mac=fe:16:3e:68:fc:01' ] vif = [ 'bridge=eth0, mac=fe:16:3e:68:fc:01', 'bridge=eth1, mac=fe:16:3e:68:fc:02' ]

Конфигурация с сетевыми мостами для GPLPV драйверов Windows

vif = [ 'bridge=eth0, mac=fe:16:3e:68:fc:01' ]

Конфигурация с маршрутизируемыми сетевыми интерфейсами

vif = [ 'script=vif-route, ip=1.2.3.2/32 1.2.3.3/32 1.2.3.4/32,netdev=eth0' ]

Конфигурация с NAT-интерфейсами

vif = [ 'ip=192.168.0.10, script=vif-nat, mac=fe:16:3e:68:fc:01' ]



fda, fdb

fda = '/etc/xen/mydomu/floppy.img' fdb = '/etc/xen/mydomu/floppy_2.img'

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



hostname

hostname = 'myhostname'

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



gateway

gateway = '192.168.0.1'

Позволяет задать шлюз по-умолчанию в ядре для полностью паравиртуального домена.



ip

ip = '192.168.0.5'

Позволяет задать IP-адрес в ядре для полностью паравиртуализированного домена.



netmask

ip = '255.255.255.0'

Позволяет задать маску IP в ядре для полностью паравиртуализированного домена.



interface

interface = 'eth0'

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



dhcp

dhcp = 'dhcp'

Позволяет включить получение реквизитов через DHCP в ядре паравиртуализированного домена. off : Выключено dhcp : Включено получение сетевых реквизитов от DHCP сервера.



vtpm

vtpm = [ 'instance=1, backend=0' ]

Позволяет включить поддержку TPM модуля в виртуальном домене. instance : Указывает ID инстанции. Посмотреть объявленные инстанции можно в файле "/etc/xen/vtpm.db". backend : Управляющий домен, который рулит физикой TPM. Обычно домен-0. type : Тип интерфейса. Для HVM домена Windows с установленными GPLPV драйверами нужно указывать 'type=paravirtualized' для того, чтобы домен правильно ломился к устройству.



boot

boot = 'cd'

Указывает последовательно загрузки для HVM доменов. Например, чтобы загрузиться с жесткого диска - указывайте "boot = 'c'", а чтобы загрузиться с CDROM - "boot = 'd'".

Запись "boot = 'cd'" указывает, что сначала нужно попробывать бутануться с винта, а если там нет системы - то только тогда с CDROM. Работает такая запись только для Windows-доменов.



vnc

vnc = 1

Указывает, что нужно включить VNC-Server для этого домена. Используется на HVM доменах - как виртуальная консоль, потому на HVM - включать обязательно. 1 : Включить для данной виртуальной машины доступ через VNC к ее консоли 0 : Выключить



vnclisten

vnclisten = '0.0.0.0'

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

Значение '0.0.0.0' означает "разрешить подключаться отовсюду".



vncdisplay

vncdisplay = 10

Перманентно привязывает номер VNC порта к указанному значению. Например, при указании 'vncdisplay = 10' доступ к серверу VNC для данного домена будет по порты 5900+10 = 5910.

Очень полезно с точки зрения боевого сервера - администратор всегда знает - на каком порту какую виртуальную машину ему искать. Иначе порты VNC распределяются по правилу "первый незанятый".



vncunused

vncunused = 0

Пытаться ли искать незанятые порты для VNC. По-умолчанию = 1 - т.е. при поднятии очередной виртуальной машины задействуется первый свободный порт.



vncconsole

vncconsole = 1

Включить прокидывание консоли домена в VNC (т.е. то, ради чего VNC вообще нужен на HVM). По-умолчанию = 0, потому следует вручную включать.



vncpasswd

vncpasswd = 'mypassword'

Устанавливает пароль для доступа к VNC консоли для данной виртуальной машины. Если задано - то переопределяет глобально настроенный пароль (если он установлен).



sdl

sdl = 0

Указывает, что нужно включить или выключить SDL-Server для этого домена. Используется для доступа к консоли машины из X-Window через SDL. 1 : Включить доступ через SDL 0 : Выключить



apic

apic = 1

Позволяет включить поддержку APIC на стороне виртуальной машины. Используется только для HVM. 1 : Включить APIC (крайне рекомендуется) 0 : Выключить



acpi

acpi = 1

Позволяет включить поддержку ACPI на стороне виртуальной машины. Используется только для HVM. 1 : Включить ACPI (крайне рекомендуется) 0 : Выключить



localtime

localtime = 1

Указывает передавать в виртуальный домен через CMOS информацио о текущем времени в соответствии с выбранным часовым поясом на Dom0. Очень полезно для Windows-доменов.

Связано с тем, что Unix в BIOS время хранит в UTC. Например, если время UTC в BIOS сервера = 12:00, а часовой пояс = +2 (т.е. локальное время = 14:00), то при localtime=1 в виртуальную машину будет заявлено время 14:00, а при localtime=0 - будет заявлено 12:00. 1 : Передавать время и дату с поправкой на текущий часовой пояс. Использовать для Windows-доменов. 0 : Передавать время и дату в UTC. Использовать для Unix.



pae

pae = 1

Включить поддержку PAE (Physical Address Extension) для виртуальных машин. 1 : Включить PAE 0 : Нет, якобы процессор PAE не поддерживает



hpet

hpet = 1

Позволяет включить HPET в виртуальной машине. 1 : Включить поддержку HPET (High-Precision Event Timer) 0 : Выключить



hap

hap = 1

Включить поддержку HAP.



machine_address_size

machine_address_size = '32'

Указывает максимальное значение адресного пространства машины. Например, ограничить только 32-битным режимом (даже при поддержке железом 64-битных операций).



vcpus

vcpus = 2

Указывает - сколько виртуальных процессорных ядер должно быть доступно из виртуальной машины.



cpus

cpus = [ '0', '2', '4', '6' ]

Указывает - какие именно физические процессорные ядра использовать для виртуальной машины. Ядра нумеруются от ноля, причем если Ваши процессоры поддерживают HyperThreating - то сначала идут реальные ядра, а потом - HT.

Вот пример для HT-процессора:
        Physical      HyperThreating
------------------------------------
CPU    1  2  3  4       1  2  3  4
cpus=  0  1  2  3       4  5  6  7



cpu_weight

cpu_weight = 256

Позволяет указать "вес" данной виртуальной машины. Т.е. сколько процессорного времени ей выделять по сравнению с другими машинами.

По-умолчанию вес любой машины равен 512, поэтому, например, указание числа 256 будет говорить Xen, что данному гостю выделять надо в 2 раза меньше времени процессора, чем остальным.

Максимальное значение веса = 65535, минимальное = 1.



cpu_cap

cpu_cap = 50

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

Величина лимита указывается в % от одного виртуального ядра, причем она не может быть больше, чем VCPU*100.

Таким образом, если у Вас для виртуальной машины выделено только 1 ядро (vcpus=1), то значение cpu_cap=50 будет значить, что домен получит максимум только 50% процессорного времени. А если у Вас выделено 2 ядра (vcpus=2), то значение cpu_cap=150 будет значить, что будет выделено не больше, чем 100% одного ядра и 50% другого... или по 75% от обоих ядер.

Итак, если у Вас 2 ядра (vcpus=2), то максимальное значение cpu_cap будет 200. Если 4 ядра - 400. Если 4 ядра и хотите только половину их времени выделить для этого домена - то указываем 200. И так далее.

Не стоит путать этот параметр с cpu_weight. Там - приоритет. Здесь - максимальное процессорное время, которое получит домен, даже если остальное время не используется.

Это может пригодиться, например, для снижения задержек в работе других доменов, более важных, чем этот.

Значение "0" говорит, что ограничивать не надо.



cpuid

cpuid=['1:edx=xxx1xxxxxxxxxxxxxxxxxxxxxxxxxxxx, ebx=xxxxxxxx00010000xxxxxxxxxxxxxxxx', '4,0:eax=001111xxxxxxxxxxxxxxxxxxxxxxxxxx']

Ограничивает CPUID для гостевого домена заданным значением.



cpuid_check

То же, что и CPUID, только для инструкции CPUID_CHECK



videoram

videoram = 16

Указывает - сколько видеопамяти выделить для виртуальной машины для виртуальной видеокарты (в МБ). Не делайте это значение слишком маленьким - можете натолкнуться даже на то, что Debian банально не запустит свой инсталлер.



serial

serial = '/dev/ttyS0'
serial = [ '/dev/ttyS0', '/dev/ttyS1' ]

Показывает гипервизору, что нужно "прокинуть" внутрь виртуальной машины COM-порты из физического сервера. В параметрах - сами последовательные порты.



shadow_memory

shadow_memory = 8

Указывает - сколько теневой (shadow) памяти выделить для данного домена.



stdvga

stdvga = 0

Показывает - использовать ли для данного HVM-домена VGA-карту (до 640х480) или позволить использовать эмулированную карту Cirrus Logic, которая поддерживает адекватные видеорежимы. 1 : Использовать только VGA-карту 0 : Эмулировать адекватную видеокарту Cirrus Logic (рекомендуется)



timer_mode

timer_mode = 1

Управляет режимом работы процессорного таймера в эмулированной среде (виртуальной машине). Объяснений по данному вопросы почти не найти, вот какие значения допустимы:

  • 0 : Не задано. Xen или другие системы управления могут менять и устанавливать режим таймера своими методами.
  • 1 : no_delay_for_missed_ticks. Рекомендовано к использованию с Windows-системами.
  • 2 : no_missed_ticks_pending
  • 3 : one_missed_tick_pending
  • 4 : delay_for_missed_ticks

Т.е. по большому счету - тут определяется - что делать гипервизору в случае "неуспел" таймера.

Особо информации, как я уже сказал, по данному вопросу я не нарыл. Вот ссылка на инглише, откуда взяты эти значения: ссылка.

Официальная часть мануала заявляет, что:

  • 0 : При "не успел" таймера - "замирать" виртуальную машину до прихода очередного прерывания, т.е. ждать.
  • 1 : Не ждать, а продолжать работу с виртуальной машиной.



on_poweroff

on_poweroff = 'destroy'

Здесь указывается действие, которое нужно произвести гипервизору с виртуальной машиной при ее выключении. По-умолчанию итак стоит 'destroy', т.е. просто "загасить". А можно, например, переопределить и сказать, что при выключении машины нужно ее просто перезагружать: 'restart'.

  • destroy : Выключает виртуальную машину
  • restart : Перезагружает виртуальную машину
  • preserve : Оставит виртуальную машину "болтаться", не останавливая ее и не перезагружая
  • rename-restart : Текущий домен переименовывается (оцпия 'name') в такое-же название плюс суффикс "-х", где "х" - это чисто от 1 и далее (например, был домен 'mydomain', а станет 'mydomain-1'). При этом текущий домен освобождает все соединенные с ним устройства. После этого стартует новый домен со старым именем (например, если предудыщий домен переименовался из 'mydomain' в 'mydomain-1', то новый домен стартанет с именем 'mydomain'). Получаем 2 домена - старый, переименованный, и новый, чистенький и заново загружаемый.



on_reboot

  • on_reboot = 'restart'
  • on_reboot = 'destroy'

Здесь указывается действие, которое нужно произвести гипервизору с виртуальной машиной при ее перезагрузке. Можно, например, переопределить и сказать, что при перезагрузке машины нужно ее просто выключить: 'destroy'.

  • destroy : Выключает виртуальную машину
  • restart : Перезагружает виртуальную машину
  • preserve : Оставит виртуальную машину "болтаться", не останавливая ее и не перезагружая
  • rename-restart : Текущий домен переименовывается (оцпия 'name') в такое-же название плюс суффикс "-х", где "х" - это чисто от 1 и далее (например, был домен 'mydomain', а станет 'mydomain-1'). При этом текущий домен освобождает все соединенные с ним устройства. После этого стартует новый домен со старым именем (например, если предудыщий домен переименовался из 'mydomain' в 'mydomain-1', то новый домен стартанет с именем 'mydomain'). Получаем 2 домена - старый, переименованный, и новый, чистенький и заново загружаемый.



on_crash

  • on_crash = 'restart'
  • on_crash = 'destroy'

Здесь указывается - что следует сделать гипервизору в случае сбоя виртуальной машины. Например, перезагрузить или просто выключить.

  • destroy : Выключает виртуальную машину
  • restart : Перезагружает виртуальную машину
  • preserve : Оставит виртуальную машину "болтаться", не останавливая ее и не перезагружая
  • rename-restart : Текущий домен переименовывается (оцпия 'name') в такое-же название плюс суффикс "-х", где "х" - это чисто от 1 и далее (например, был домен 'mydomain', а станет 'mydomain-1'). При этом текущий домен освобождает все соединенные с ним устройства. После этого стартует новый домен со старым именем (например, если предудыщий домен переименовался из 'mydomain' в 'mydomain-1', то новый домен стартанет с именем 'mydomain'). Получаем 2 домена - старый, переименованный, и новый, чистенький и заново загружаемый.
  • coredump-destroy : Делается дамп ядра текущего сдохшего домена и он загашивается (т.е. сначала dump, потом destroy).
  • coredump-restart : Делается даме ядра текущего сдохшего домена и он перезапускается.



on_xend_start

  • on_xend_start = 'ignore'
  • on_xend_start = 'start'

Указывает - что делать с этим доменом во время запуска XenD.

  • ignore : Ничего не делать
  • start : Запустить виртуальную машину



on_xend_stop

  • on_xend_stop = 'ignore'
  • on_xend_stop = 'suspend'
  • on_xend_stop = 'shutdown'

Указывает - что делать с этим доменом при остановке XenD. ignore : Ничего не делать suspend : Усыпить shutdown : Выключить



usb

  • usb = 1

Позволяет включить эмулируемый USB-контроллер и концентратор в HVM виртуальной машине.



usbdevice

  • usbdevice = 'tablet'
  • usbdevice = 'host:0001:0002'

Позволяет "прокинуть" внутрь виртуальной машины одно USB-устройство. Вот ссылка по тому - как это делать: ссылка.

Для Windows-гостей имеет смысл всегда указывать 'tablet' вместо прокидываемого устройства - для тех гостей, где нечего проецировать. Это позволит нормально пользоваться VNC консолью, в которой иначе движение курсора на локальной машине с VNC не совпадают с движением оного в виртуальной машине.

PS. Опиця 'usb' должна быть включена!



vusb

vusb = [ 'usbver=2, numports=8, port_1=1-1, port_2=1-2' ]

Позволяет создать в паравиртуальной машине (например, Windows с GPLPV) виртуальный USB-контроллер с использованием новой техники PV-USB (появившейся только в Xen 3.4 и Xen 4.0) и прокидывать туда несколько устройств за раз. HASP и подобные вещи не прокидываются, в отличие от опции 'usbdevice'.

  • usbver: Версия USB (1.1 или 2.0) для эмуляции. 1 = USB 1.1, 2 = USB 2.0
  • numports: Сколько портов дать для виртуального концентратора (например, чтобы впоследствии можно было на-лету цеплять флешки)
  • port_1: Эти опции (port_X) позволяют автоматически прокидывать указанные USB устройства при запуске машины. После "=" указываются ID устройств.

ID устройств можно узнать при помощи команды:

# xm usb-list-assignable-devices



pci

  • pci = [ '05:02.0' ]
  • pci = [ '01:00.0', '02:03.0' ]

Позволяет "прокидывать" внутрь паравиртуальной машины PCI-устройства напрямую.

Работает только на "железе", которое поддерживает технологию VT-d (не путать с VT-x - Vanderpool или AMD-V - это другое и отдельное).

В качестве параметра указывается ID PCI устройства, которое необходимо прокинуть.

Посмотреть список PCI устройств и их ID, доступных для пробрасывания можно командой:

# xm pci-list-assignable-devices



pci_power_mgmt

pci_power_mgmt = 1

Позволяет включить управление питанием прокинутых внутрь паравиртуальной машины PCI устройств. По-умолчанию выключен.

  • 1 : Включить управление питанием изнутри виртуальной машины
  • 0 : По-умолчанию - не управлять питанием PCI



xen_platform_pci

xen_platform_pci = 0

Позволяет включать или выключать использование платформы Xen_Platform_PCI. По-умолчанию включен (=1).

При выключении так-же перестанут работать ioports.

  • 1 : Включить использование Xen_Platform_PCI (по-умолчанию).
  • 0 : Выключить



pci_msitranslate

pci_msitranslate = 0

Позволяет использовать технику MSI_INTx. Дело в том, что если проброшенное в гостевую систему устройство использует физический IRQ, который используется еще несколькими другими доменами, то производительность этого устройства может снизиться. К сожалению, это так и происходит при использовании обычной технологии IO-APIC.

Техника MSI-INTx позволяет снизить данный эфект. При этом MSI должно поддерживаться устройством PCI.

По-умолчанию MSI-INTx включен (pci-msitranslate = 1), однако Вы можете его выключить, установив значение этой переменной в "0".

  • 1 : Включен MSI-INTx (по-умолчанию) для всех прокинутых PCI устройств
  • 0 : Выключен для всех прокинутых PCI устройств


Если Вам необходимо выключить MSI-INTx не для всех устройств, а для определнных - Вы можете это указать в описании опции pci:

pci = [ '01:00.0,msitranslate=0', '03:00.0' ]



ioports

ioports = '02f8-02ff' ioports = '03f8-03ff'

Позволяет "прокинуть" внутрь паравиртуальной машины диапазон адресов аппаратного ввода-вывода данной физической машины. Работает только с паравиртуальными гостевыми системами.

Набор из нескольких диапазонов просто записывается один под другим, как это показано в примере. Сами адреса указываются в шеснадцатеричной системе (hex).



veridian

veridian = 1

Позволяет включить интерфейс Veridian для x86 виртуальных машин HVM. Рекомендуют включать этот интерфейс для Windows Vista и выше, включая Server 2008/R2 и Windows 7.

Наиболее важной частью технологии является то, что она позволяет "сказать" Windows, чтобы она не ждала сигнализации прерывания таймера (как будто гостевая система - это bare metal - т.е. как будто она установлена на железки), что убирает ошибку "0x101", вываливающую гостевую операционную систему в BSOD.



vhpt

vhpt = '512000'

Позволяет задать для данного виртуального HVM домена определенное значение VHPT (Virtual Hash Page Table).



irq

irq = '7'

Позволяет пробросить определенный аппаратный IRQ в виртуальную машину. Если нужно пробросить несколько IRQ - указывайте опцию несколько раз.



blkif

blkif = 'yes'

Позволяет переопределить backend-домен для блочных устройств гипервизора на этот домен (т.е. снять с домена-0 функцию упаравления блочными устройствами).



netif

netif = 'yes'

Позволяет переопределить backend-домен для сетевых устройств гипервизора на этот домен (т.е. снять с домена-0 функцию упаравления сетевыми картами, создания и поддержания мостов, маршрутизации, виртуальной сети между доменами и NAT).



tpmif

tpmif = 'yes'

Позволяет переопределить backend-домен для TPM (т.е. снять с домена-0 эту роль).



vfb

vfb = 'vnc=1, sdl=1, vncunused=1, vncdisplay=N, vnclisten=ADDR, display=DISPLAY, authority=XAUTHORITY, vncpasswd=PASSWORD, opengl=1, keymap=FILE'

Позволяет переопределить backend для виртуального framebuffer на этот домен, включая VNC и SDL. Т.е. цепляться из VNCViewer нужно будет уже к данному домену.


nographics

nographics = 1

Отключает использование графики для этого виртуального домена. 1 : НЕ использовать графику (только текст) 0 : Использовать графику при необходимости



soundhw

soundhw = 1

Включить поддержку звуковой карты в этом виртуальном домене. По-умолчанию - выключено. 1 : Звуковая карта видна в виртуальной машине 0 : Звуковой карты как устройства в машине нет


console

console = '/dev/console'

Позволяет переопределить консоль паравиртуальной Unix-машины на указанное устройство, например, на последовательный порт физической машины.



Заключение

Это, конечно, не все опции. Я буду дописывать эту заметку по мере появления информации. Ваши комментарии, конечно, всегда кстати. Если Вы нашли ошибку, знаете другие опции или знаете, как описанные опции можно использовать еще - велкам в комментарии.


Комментариев нет

Создатели: Денис "Reagent" Ходус, Андрей "ZaEzzz" Беланов