Publié le dimanche 1er mars 2009, mis a jour le dimanche 8 mars 2009, par Stephane Malinet
La virtualisation est un sujet à la mode depuis quelques temps compte tenu des nombreux avantages qu’elle apporte aux infrastructures.
Je ne rentrerai pas dans l’énumération des-dits avantages, et pas non plus dans la description des différentes formes de virtualisation, pour cela je vous invite à vous reporter à l’article de wikipédia.
Le type hyperviseur sous Xen, celui qui nous intéressera dans le reste de ce document :
L’hyperviseur fourni une couche virtuelle pour les matériels, switch, cartes réseaux (...), et le bios, ne nécéssitant pas de modification de l’OS hôte. L’OS n’est pas conscient d’être virtualisée. Ce type accuse une perte des performances brutes de la VM par rapport à son homologue physique de l’ordre de 35% pour VMware, contre 25% pour Xen. (marge de + ou - 5 points pour les % suivant les cas).
Dans la paravirtualisation, les machines virtuelles (VM) ont conscience d’être virtualisées car elles fonctionnent sur une version Xen du noyau en mode ’domain U’ non-privilégié, alors que la machine physique (Hardware Node) fonctionne sur un noyau Xen en mode ’domain 0’ privilégié. Cela permet aux VMs des accés beaucoup plus rapide au matériel car Xen ne fait qu’ordonnancer les accés sans traiter la ’traversée’ de la couche virtuelle de matériel. Ce type n’accuse une perte de performance de la VM que de l’ordre de 3 à 5%. Mais vous l’aurez compris : seuls les OS linux et BSD permettent ce type car il nécéssite un noyau Xen pour les VMs.
C’est ce mode que nous alons mettre en place car il ne nécéssite pas des processeurs supportant la virtualisation matérielle.
Le dom0 est le domaine qui va accueillir les domaines invités.
Pour installer notre hyperviseur sous Gentoo, il nous faut demasquer certains paquets et activer certains drapeaux :
USE="custom-cflags pygrub screen
echo "sys-kernel/xen-sources ~x86" >> /etc/portage/package.keywords/my.keywords
echo "app-emulation/xen-tools ~x86" >> /etc/portage/package.keywords/my.keywords
echo "app-emulation/xen ~x86" >> /etc/portage/package.keywords/my.keywords
Afin d’obtenir les meilleurs performances il vous faut modifier vos CFLAGS.
Exemple pour un x86 :
CFLAGS="-O2 -march=pentium4 -mno-tls-direct-seg-refs -pipe"
Pour une amd64 :
CFLAGS="-O2 -march=nocona -mno-tls-direct-seg-refs -pipe"
Recompilez tous vos paquets et installez les xen-sources et outils Xen.
emerge -ave world && emerge -av xen xen-tools xen-sources
Modifions le noms des sources :
cd /usr/src
mv linux-2.6.18-xen-r12 linux-2.6.18-xen0-r12
eselect kernel set linux-2.6.18-xen0-r12
<code>
En plus de la configuration normale pour votre matériel activez les options suivantes:
<code>
XEN --->
[*] Privileged Guest (domain 0)
<*> Backend driver support
<*> Block-device backend driver
<*> Network-device backend driver
<*> Network-device loopback driver
<*> PCI-device backend driver
PCI Backend Mode (Virtual PCI) --->
<*> Block-device frontend driver
<*> Network-device frontend driver
[*] Scrub memory before freeing it to Xen
[*] Disable serial port drivers
<*> Export Xen attributes in sysfs
Device Drivers --->
Block devices --->
<*> Loopback device support
Xen version compatibility (no compatibility code) --->
Compilez votre noyau et installez-le :
make -j2 && make modules_install
cp arch/i386/boot/vmlinuz /boot/kernel-2.6.18-xen0-r12
Modifiez grub :
default 0
timeout 05
splashimage=(hd0,0)/grub/splash.xpm.gz
title=GENTOO 2.6.18 Xen0 R12
root (hd0,0)
kernel /xen.gz dom0_mem=128M vga=gfx-1280x1024x16
module /kernel-2.6.18-xen0-r12 root=/dev/vg/root max_loop=64
module /initramfs.gz
Rebootez.
Nous utiliserons le le mode bridge pour le réseau ce qui permettra aux machines virtuelles d’avoir leur propre adresse IP :
dom0: eth0 (fausse eth0) -> peth0 -+
|
bridge -> vraie eth0 -> le réseau
|
domU: eth0 (fausse eth0) -> vifN.0 -+
modifiez le fichier /etc/xen/xend-config.sxp :
(network-script network-bridge)
(vif-script vif-bridge)
Activez le service xend :
rc-update add xend default
/etc/init.d/xend start
Passons maintenant à l’installation de notre domaine hôte.
Créons le périphérique block où sera installé notre système virtuelle.
Première solution : utilisez un fichier de 4Go comme périphérique block et formatez-le :
dd if=/dev/zero of=/var/xen/gentoo.vm0 bs=1M seek=4095 count=1
mkfs.xfs -l size=64m -b size=1024 /var/xen/gentoo.vm0
Montez ce block :
mount -o loop /var/xen/gentoo.vm0 /mnt/gentoo
Et procédez à l’installation comme décrit dans le handbook Gentoo.
Au moment d’installer votre noyau choisissez les xen-sources et configurez votre noyau avec les options suivantes :
XEN --->
[ ] Privileged Guest (domain 0)
<*> Block-device frontend driver
<*> Network-device frontend driver
<*> User-space granted page access driver
<*> Framebuffer-device frontend driver
<*> Keyboard-device frontend driver
[*] Scrub memory before freeing it to Xen
[*] Disable serial port drivers
<*> Export Xen attributes in sysfs
Xen version compatibility (no compatibility code) --->
Editez le fichier /etc/inittab de votre domU afin de ne laisser q’une console :
# TERMINALS
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
#c2:2345:respawn:/sbin/agetty 38400 tty2 linux
#c3:2345:respawn:/sbin/agetty 38400 tty3 linux
#c4:2345:respawn:/sbin/agetty 38400 tty4 linux
#c5:2345:respawn:/sbin/agetty 38400 tty5 linux
#c6:2345:respawn:/sbin/agetty 38400 tty6 linux
Concernant la partition swap, je vous conseille de créer un fichier à l’intérieur du domU, cela n’est pas le plus performant comme format mais cela permet d’avoir tout à l’intérieur de la machine virtuelle :
dd if=/dev/zero of=/var/tmp/swap bs=1M seek=1024 count=1
mkswap /var/tmp/swap
Configurez le grub du domU :
default 0
timeout 05
splashimage=(hd0,0)/grub/splash.xpm.gz
title=GENTOO 2.6.18 gentoo R12
root (hd0,0)
kernel /kernel-2.6.18-xen-r12 root=/dev/sda2 4 rw xencons=tty
initrd /initramfs.gz
Passons à la configuration de xen pour le domU. Créez, dans le dom0 le fichier de configuration /etc/xen/gentoo, dans le cadre de l’utilisation d’un fichier pour la partition système :
bootloader = '/usr/bin/pygrub'
memory = 128
name = "gentoo"
vif = [ '' ]
disk = [ 'file:/var/xen/gentoo.vm0,sda1,w' ]
Ou comme cela si vous utilisez un périphérique block pour le domU :
bootloader = '/usr/bin/pygrub'
memory = 128
name = "gentoo"
vif = [ '' ]
disk = [ 'phy:/dev/vg/gentoo,sda1,w' ]
Configurez en IP fixe l’interface de votre domU comme s’il s’agissait d’une interface normale eth0.
En revanche, si vous utilisez DHCP, alors pensez à attribuer une adresse matérielle (MAC) pour l’interface en modifiant le fichier de configuration du domU.
vi /etc/xen/gentoo
vif = [ 'mac=aa:00:00:00:00:01' ]
Une fois que vous avez démontez votre domU, nous allons lancer notre machine virtuelle :
xm create gentoo
Vérifiez :
xm list
Et accédez à votre système gentoo virtuelle :
xm console gentoo
Vous assurez que la machine virtuelle soit lancée au démarrage du système :
cd /etc/xen/auto
ln -s ../gentoo
rc-update add xendomains default
Nous allons voire les commandes les plus courrantes d’administration de vos domaines.
xm info
les méssages de demarrage de Xen :
xm dmesg
xm create gentoo
Avec le mode console :
xm create gentoo -c
Arrêtez normallement le domU :
xm sutdown gentoo
Arrêt immédiat :
xm destroy gentoo
Mettre et sortir de pause :
xm pause gentoo
xm unpause gentoo
Sauvegardez le domU dans un fichier :
xm save gentoo
Restaurez le domU :
xm restore gentoo
Augmeter ou réduire le nombre de vCPUs (entendez procésseurs virtuels) attribués à un domU (ne peux dépasser la valeur totale de la configuration) :
xm vcpu-set gentoo 2
Augmenter ou réduire la mémoire allouée à un domU (ne peux dépasser la somme totale de tous les domU par rapport à la configuration) :
xm mem-set gentoo 256
Pour plus de commandes, jeter un oeil à :
xm help
Voilà, amusez-vous bien... ;-)