Le blog de Dju - Mot-clé - hvmUn peu de moto, un zeste de geek, et un brin d'autres trucs ;-)2024-03-22T17:50:26+01:00Djuurn:md5:5e61426dd704534f4aef077f5b82260bDotclearLa virtualisation avec Xenurn:md5:ecbac964050598820db6cdc91ace396a2010-11-12T16:00:00+01:002010-11-12T16:09:28+01:00DjuDebiandebianhvmpara-virtualisationvirtualisationxen<p><img src="https://blog.crifo.org/public/201010/.xen_t.jpg" alt="xen" style="float:left; margin: 0 1em 1em 0;" title="xen, oct. 2010" />
Aujourd'hui un billet pour présenter Xen, un fabuleux outil permettant de virtualiser des machines, aussi bien en HVM (Hardware Virtualised Machine) pour faire tourner windows, comme VMware, que en para-virtualisation pour faire tourner des linuxs, sans couche de hardware émule, faisant ainsi perdre très peu de performances.</p> <p>Xen est donc un hyperviseur, un système permettant de faire tourner plusieurs machines virtuelles sur une machine physique.<br />
Son intérêt est qu'il est assez simple à configurer, et souple à utiliser.<br />
Mais surtout, il permet de faire de la para-virtualisation. C'est à dire de faire tourner des VM sans émuler de hardware, et donc d'avoir des performances quasi natives. mais cela nécessite que les VM tournent avec un noyau modifié.<br />
A l'inverse, on a le HVM, qui comme VMware-server, permet d'émuler le hardware, et ainsi de virtualiser des OS dont on ne peut modifier le noyau, comme windows.<br />
Attention, si vous voulez faire du HVM, il faut que votre processeur le supporte, et dispose de la fonction Intel VT ou AMD-V (flag VMX ou SVM dans /proc/cpuinfo) sinon ce n'est pas possible.</p>
<p>Ici, je vais installer tout ça sur mon zotac mag (atom 330 dual core + 2 go de ram), pour faire de la para-virtualisation<br />
il tournait jusqu'ici sous ubuntu server 9.10 (24h/24 depuis 10 mois quand même, plutôt fiable non ? <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /> )<br />
La première chose est d'installer un OS adapté. En l'occurrence Debian Lenny 5.06 64 bits, depuis une clé usb.</p>
<p>je vous passe l'install' de debian, passons directement à Xen :</p>
<blockquote><p>aptitude install xen-hypervisor-3.2-1-amd64 xen-tools xen-utils-3.2-1 bridge-utils<br />
aptitude install linux-image-2.6-xen-amd64 linux-headers-2.6-xen-amd64</p></blockquote>
<p>Pour la nomenclature, on désigne la machine physique faisant tourner xen sous le terme de <strong>dom0</strong>, et les machines virtuelle sous le terme de <strong>domU</strong>.</p>
<p>A présent, il faut configurer xen. pour cela on édite le fichier de config principale, /etc/xen/xend-config.sxp<br />
Il y a donc plusieurs mode de connections réseau (bridge, nat, routed).<br />
Voici <a href="http://wiki.kartbuilding.net/index.php/Xen_Networking">un petit récapitulatif de ces modes</a> pour les curieux</p>
<p>On va ici utiliser du bridge. c'est à dire que les domU seront visibles directement et auront leur adressage réseau sur le même sous réseau que la machine host.</p>
<p>voici ce qu'il faut dé commenter :</p>
<blockquote><p>(network-script network-bridge)<br />
(vif-script vif-bridge)<br /></p></blockquote>
<p>et il faut commenter la ligne</p>
<blockquote><p>(network-script network-dummy)</p></blockquote>
<p>toujours dans ce même fichier, on va définir les ressources matérielles qu'on va affecter au dom0, la machine hôte.<br />
Comme elle ne servira qu'à contrôler les machines virtuelles, on va lui mettre un minimum afin de garder un max pour les domU
A savoir un seul core (si processeur multicore) et la ram (par défaut et le minimum si on veut en attribuer plus aux VM à chaud)</p>
<blockquote><p>(dom0-min-mem 384)<br />
(dom0-cpus 1)<br /></p></blockquote>
<p>la ligne (dom0-min-mem 384) sert à définir qu'il y aura toujours au minimum 384 Mo de ram pour la dom0.<br />
Meme si on lui en met plus par défaut (voir ci dessous), et qu'on a besoin d'attribuer plus de ram aux domU, on ne pourra descendre en dessous de ce seuil. On s'assure ainsi qu'elle aura toujours sufisemment de ressources <img src="/themes/BlueSky/smilies/wink.gif" alt=";)" class="smiley" /></p>
<p>Puis, comme dit au dessus, on configure la ram qu'aura la dom0 par défaut. On édite le fichier <strong>/boot/grub/menu.lst</strong>
à la fin de la ligne</p>
<blockquote><p>kernel /xen-3.2-1-amd64.gz<br /></p></blockquote>
<p>on rajoute <strong>dom0_mem=512M</strong></p>
<p>on définit ici que dom0 aura 512 Mo de ram, et pourra descendre au minimum à 384 Mo.</p>
<p>maintenant, configurons xen-utils, avec lequel on va définir quelques réglages de base pour les machines virtuelles que nous allons créer, tels que la ram, swap, disque dur, distro, archi...<br />
C'est très pratique car par la suite, on peut créer une nouvelle domU en lui donnant juste un nom et une ip <img src="/themes/BlueSky/smilies/smile.gif" alt=":)" class="smiley" /><br />
On edite le fichier /etc/xen-tools/xen-tools.conf et on édite / décommente ces lignes :</p>
<blockquote><p># dossier ou stocker les VM<br />
dir = /home/xen<br />
# taill du disque dur
size = 4 Gb<br />
# ram en Mo<br />
memory = 512M<br />
# taille de la swap<br />
swap = 512Mb<br />
# type du système de fichier<br />
fs = ext3<br />
# distrib<br />
dist = lenny<br />
# nombre de cpus/core<br />
vcpus = 1<br />
# passerelle <br />
gateway = 192.168.1.1<br />
# masque de sous réseau<br />
netmask = 255.255.255.0<br />
# masque de broadcast<br />
broadcast = 192.168.1.0<br />
# demander le mot de passe root<br />
passwd = 1<br />
# architecture, 32 ou 64 bits<br />
arch = amd64<br />
# mirroir à utiliser pour choper les paquets<br />
mirror = http://ftp.fr.debian.org/debian/<br />
# pour acceder au shell depuis la console<br />
serial_device = hvc0<br /></p></blockquote>
<p>encore une fois, toutes ces options seront par défaut. lorsqu'on créera une nouvelle machine virtuelle, on pourra bien sur définir ces paramètres si on en veut des différents.</p>
<p>Et voila. Maintenant, on reboot la machine pour redémarrer sur Xen.<br />
Une fois sur grub, on choisit la première entrée "<strong>Xen 3.2-1-amd64 / Debian GNU/Linux, kernel 2.6.26-2-xen-amd64</strong>"</p>
<p>Quand debian a fini de redémarrer, on se log en root et on vérifie que xen tourne bien en tapant la commande</p>
<blockquote><p>xm list</p></blockquote>
<p>qui est la commande permettant de lister le dom0 et toutes les domU qui tournent, ce qui doit donner</p>
<pre>
Name ID Mem VCPUs State Time(s)
Domain-0 0 512 1 r----- 135.7
</pre>
<p>de même, afin de vérifier que les paramètres de ressources qu'on a appliqué :</p>
<blockquote><p>free</p></blockquote>
<p>pour voire la mémoire ram et</p>
<blockquote><p>cat /proc/cpuinfo</p></blockquote>
<p>pour voir le nombre de cpus (ici 1 au lieu de 4 normalement)</p>
<p>Egalement, pour vérifier que le bridge est bien fait, taper ifconfig et chercher si on a bien une interface nommée peth0, avec la meme mac que eth0</p>
<p>A présent, on se créée une machine virtuelle, qui va utiliser tous les parametres de base (512 mo de ram, disque de 4 Go, swap de 512 mo et 1 core, distro lenny avec archi amd64)<br />
Comme dit précédemment, on donne juste le nom et l'IP</p>
<blockquote><p>xen-create-image --hostname=VM1 --ip 192.168.1.100 --role=udev</p></blockquote>
<p>L'install se lance alors, avec debootstrap, qui va telecharger tous les paquets necessaire au système de base.<br />
Quelques minutes après (suivant la rapidité de votre connexion), la domU est prête.
On peut alors la lancer :</p>
<blockquote><p>xm create VM1.cfg</p></blockquote>
<p>on obtient alors un résumé de la machine, ainsi que le status de l'install :<br />
(ne faites pas attention au warning, le bridge est bien configuré, mais il chouine quand même...)</p>
<pre>
WARNING
-------
You appear to have a missing vif-script, or network-script, in the
Xen configuration file /etc/xen/xend-config.sxp.
Please fix this and restart Xend, or your guests will not be able
to use any networking!
General Information
--------------------
Hostname : srv1
Distribution : lenny
Partitions : swap 512Mb (swap)
/ 5Gb (ext3)
Image type : sparse
Memory size : 512Mb
Kernel path : /boot/vmlinuz-2.6.26-2-xen-amd64
Initrd path : /boot/initrd.img-2.6.26-2-xen-amd64
Networking Information
----------------------
IP Address 1 : 192.168.1.151 [MAC: 00:16:3E:EB:45:D7]
Netmask : 255.255.255.0
Broadcast : 192.168.1.255
Gateway : 192.168.1.1
Creating partition image: /home/xen/domains/srv1/swap.img
Done
Creating swap on /home/xen/domains/srv1/swap.img
Done
Creating partition image: /home/xen/domains/srv1/disk.img
Done
Creating ext3 filesystem on /home/xen/domains/srv1/disk.img
Done
Installation method: debootstrap
</pre>
<p>puis quelques minutes après, une fois les paquets téléchargés</p>
<pre>
Done
Running hooks
Done
Role: udev
File: /etc/xen-tools/role.d/udev
Role script completed.
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
/var/log/xen-tools/srv1.log
</pre>
<p>(au passage, le fichier de configuration décrivant la domU se trouve dans /etc/xen/VM1.cfg)</p>
<p>Si vous souhaitez vous connecter dessus lors du boot, utilisez la commande</p>
<blockquote><p>xm create -c VM1.cfg</p></blockquote>
<p>Si vous voulez vous y connecter alors que la machine a démarré :</p>
<blockquote><p>xm console VM1</p></blockquote>
<p>On peut également choisir la machine avec son id obtenu par la commande <strong>xm list</strong></p>
<blockquote><p>xm console <id></p></blockquote>
<p>Une chose à savoir: lorsqu'on créé une machine virtuelle tel que noté ci dessus, la VM n'aura pas son propre boot.<br />
C'est à dire qu'elle va chercher son noyau directement sur le dom0.<br />
Dans un prochain article, on verra comment utiliser pygrub pour la rendre indépendante en ayant son propre noyau et grub <img src="/themes/BlueSky/smilies/wink.gif" alt=";)" class="smiley" /><br />
Et également dans un prochain article, on verra comment lancer une VM en émulant une couche hardware (HVM) pour faire tourner un windows</p>https://blog.crifo.org/post/2010/10/21/La-virtualisation-avec-Xen#comment-formhttps://blog.crifo.org/feed/atom/comments/75