Paramètres définissant une machine virtuelle

La déclaration d'une machine virtuelle se réduit à quelques paramètres permettant à XEN de créer l'environnement de cette machine. Il existe différentes manières d'écrire ces fichiers de configuration (y compris un mode XML), mais les éléments à paramétrer sont toujours les mêmes. En plus je préfère la syntaxe la plus simple en fichier texte "légèrement" structuré par l'usage des parenthèses carrées [ et ] pour les éléments multiples tels que disques ou interfaces réseau. 
Le paramétrage concerne les éléments typiques de toute machine qu'elle soit physique ou virtuelle : 

Nom de la machine (NAME) : 
C'est le nom de la machine tel que vous l'utiliserez pour "discuter" avec l'hyperviseur, exemple :

  • name='amdx2-deb65'

Ce nom doit bien entendu être unique ... 
Identifiant  (UUID): 
Chaque MV doit disposer d'un identifiant différent des autres. L'identifiant est construit sous un format complexe afin d'éliminer les possibilités de doublon. Le programme "uuid" génère très bien ces identifiants. 
Un exemple : 
uuid='9e8c403f-bd93-75f7-1754-dde60e2803d9' 

CPU (VCPUS): 
Une nouvelle MV doit disposer d'au moins un CPU ! Mais elle peut en disposer d'autant que la machine physique servant de support peut lui en offrir. 
Le seul paramètre direct est donc le nombre de VCPU (CU Virtuels) attribués à cette machine, par exemple :

  • vcpus=1


Mémoire (MEMORY) : 
C'est la quantité de mémoire attribuée à cette machine lors de son démarrage, la valeur est exprimée en MégaOctets, exemple :

  • memory=1024

Comportement stop/start : 
Ce groupe comporte trois paramètres viennent contrôler le comportement de la machine lors des arrêts et redémarrage, les valeurs indiquées sont des standards:

  • on_crash='destroy'
  • on_poweroff='destroy'
  • on_reboot='restart'

Je ne change jamais ces valeurs qui conviennent parfaitement pour les cas "normaux". 

Contrôle de l'horloge : 
Ce paramètre contrôle le comportement de l'horloge, j'ai toujours vu la valeur "0".

  • localtime=0


Mode d'émulation : 
Ceci permet une émulation totale ou partielle. L'émulation partielle suppose des systèmes dont le noyau est prévu pour être "virtualisé" et est très coopérant, notamment au niveau des périphériques.

  • builder='hvm'

Fournisseur des périphériques : 
C'est le nom du module d'émulation qui sera utilisé pour présenter à la MV un "hardware" cohérent.

  • device_model="/usr/lib/xen/bin/qemu-dm"

Bootloader chargé du lancement du système. 
C'est le programme qui "lance" le système contenu sur le disque de la machine.

  • kernel='/usr/lib/xen/boot/hvmloader'

Ici les paramètres sont destinés à une émulation totale (hardware virtual machine) pour utiliser un système virtualisé quelconque. 

Mode de boot. 
Selon la valeur (en direct de MSDOS)  "c" provoque un boot depuis le "disque dur virtuel", la valeur "d" provoque un boot depuis le lecteur de CD virtuel.

  • boot='c'

Après la création initiale d'une nouvelle machine (pour laquelle on a mis "d") depuis le CD, il fat remettre cette valeur à "c" avant de rebooter la machine. 
Définition des disques dur virtuels. 
on définit dans ce groupe "disk" le lien entre le périphérique physique et la manière dont il est présenté au nouveau  

système.disk=[    'phy:/dev/HUGE_1/MV4,hda,w' ]

Ici il s'agit dune partition "phy"sique qui sera présentée comme disque "hda" au système avec droit d'écriture ("w"). 
Une image ISO sera présentée comme :

  • 'file:/STOCKAGE/ISOS/debian-500-amd64-DVD-1.iso,hdd:cdrom,r'

Le lecteur de CD physique de la machine support sera présenté (en lecture seule ("r"), comme c'est normal pour un CDROM) sous la forme :

  • 'phy:/dev/hdb,hdc:cdrom,r'

Carte(s) réseau : 
Plusieurs syntaxes existent (on peut même fournir l'adresse IP), je préfère celle-ci qui me permet d'utiliser mon mécanisme standard de DHCP. 
On doit ici fournir adresse MAC, nom du "bridge" géré par le domaine 0, le modèle de périphérique à émuler. Il y a ici deux interfaces réseau :

 

Et puis quelques autres paramètres que je ne touche jamais et que je vous livre "en vrac" :

  • vnc=1
  • vncunused=1
  • apic=0
  • acpi=1
  • pae=1
  • serial='pty'
  • keymap='fr'

Ces valeurs me conviennent et je ne me hasarde pas à les changer. 

D'autres paramètres existent permettant de définir la priorité de la machine mais je préfère démarrer les machines avec la priorité standard et la modifier ensuite à l'aide des commandes "xm". 

Exemple de définition d'une machine (Debian 5.0 bien que cela ne soit pas visible dans la définition) :

ostype='other'
name='amdx2-deb67'
memory=1024
vcpus=1
uuid='8e8c485f-a093-75a5-f753-afe71e2803e9'
on_crash='destroy'
on_poweroff='destroy'
on_reboot='restart'
localtime=0
builder='hvm'
extid=0
device_model="/usr/lib/xen/bin/qemu-dm"
kernel='/usr/lib/xen/boot/hvmloader'
boot='c'
disk=[    'phy:/dev/SYSTEM/DEB67,hda,w',
#    'file:/STOCKAGE/ISOS/debian-503-amd64-netinst.iso,hdd:cdrom,r',
    ]
vif=['mac=00:16:3e:30:02:01,bridge=eth0,model=rtl8139,type=ioemu',
     'mac=00:16:3e:40:02:02,bridge=eth1,model=rtl8139,type=ioemu',
    ]
vnc=1
vncunused=1
apic=0
acpi=1
pae=1
serial='pty'
keymap='fr'

Ce petit article sans prétentions devrait démystifier la création de machines virtuelles.