WikiAccueil > Installer XEN sur Linux > Bien commencer avec XM > Stockage des machines virtuelles
Premiers pas avec XEN
Mise en place du kernel XEN
Il faut tout d'abord intégrer XEN dans votre distribution Linux. Chaque version d'une distribution est spécifique et pour que les nouveaux venus intégrent rapidement XEN, nous avons mis en place une page wiki par distribution et version. Voir dans l'accueil.
Vos commentaires sont les bienvenus.
Création d'une machine virtuelle
Création du fichier
Pour le 1er test, la machine virtuel sera stockée dans un fichier. Pour avoir plus d'information sur les méthodes de stockages =>
Stockage
- dd if=/dev/zero of=/stockage/vm1disk bs=1k seek=2048k count=1
- mkfs -t ext3 /stockage/vm1disk
- mount -o loop /stockage/vm1disk /mnt
Copie du système hôte
- cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /mnt
- mkdir /mnt/{proc,sys,home,tmp}
- umount /mnt
Dans le fichier de configuration, il suffit d'indiquer le chemin du fichier de la machine virtuelle:
disk = ['file:/home/vm1disk,hda1,w']
Fichier de configuration de la Machine Virtuelle
Dans le fichier (par défaut) /etc/xen/VM-Linux1
kernel = '/boot/vmlinuz-2.6.10-xenU'
memory = 64
name = 'Linux1'
nics = 1
ip = 'dhcp'
disk = ['file:/home/vm1disk,hda1,w']
root = '/dev/hda1 ro'
Démarrage de la machine virtuelle
Il faut tout d'abord démarrer le process de supervsion XEN:
/etc/init.d/xend start
Pour démarrer la machine virtuelle sans rentrer en mode console
xm create /etc/xen/VM-Linux1
Pour démarrer la machine virtuelle et entrer en mode console
xm create /etc/xen/VM-Linux1 -c
Il n'y a pas de start et stop d'une machine virtuelle; les commandes sont create pour start
et shutdown pour stop.
Fonctionnement de XM
Pour liste les machines virtuelles qui sont démarrées:
xm list
Name...........Id......Mem(MB)...CPU..State.....Time(s)....Console
Domain-0......0........251............0......r----....172.2
VM-Linux1.........5........31.............0......-b---.......4.3........9605
Pour monitorer l'ensemble des VM et du système:
xm top
xentop - 16:21:36 Xen 3.0.0
7 domains: 1 running, 6 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown
Mem: 1310312k total, 1022052k used, 288260k free CPUs: 1 @ 1537MHz
NAME STATE CPU(sec) CPU(%) MEM(k) MEM(%) MAXMEM(k) MAXMEM(%) VCPUS NETS NETTX(k) NETRX(k) SSID
debian-1 --b--- 4068 0.0 131040 10.0 131072 10.0 1 1 1464 16487 0
debian-2 --b--- 9207 0.0 204776 15.6 204800 15.6 1 1 417465 95794 0
debian-3 --b--- 5080 0.0 131040 10.0 131072 10.0 1 1 2122931 1285785 0
debian-4 --b--- 3235 0.0 131048 10.0 131072 10.0 1 1 3184012 884281 0
debian-5 --b--- 688 0.0 65508 5.0 65536 5.0 1 1 2857505 2889279 0
debian-6 --b--- 10414 0.1 204780 15.6 204800 15.6 1 1 2859922 3083542 0
Domain-0 -----r 31448 0.8 130188 9.9 no limit n/a 1 8 3083256 81300 0
Pour démarrer une machine virtuelle:
xm create /etc/xen/VM-Linux1
Pour démarrer une machine virtuelle avec le mode console:
xm create /etc/xen/VM-Linux1 -c
Pour arrêter une machine virtuelle:
xm shutdown VM-Linux1
Pour arrêter sans délais la machine virtuelle (arrêt immédiat):
xm destroy VM-Linux1
Pour réduire ou ré-augmenter la taille mémoire lorsque la machine virtuelle est démarrée:
xm mem-set 3 32
xm mem-set 3 64
La valeur est en Mo.
Il est possible de réduire mais pas d'augmenter la RAM plus que la valeur de la configuration.
Pour réduire ou ré-augmenter le nombre de CPU lorsque la machine virtuelle est démarrée:
xm vcpu-set 3 2
xm vcpu-set 3 4
Il est possible de réduire mais pas d'augmenter le nombre de vCPU plus que la valeur de la configuration.
Pour récupérer les messages XEN (pas Linux!) au boot:
xm dmesg
Liste des consoles disponible:
xm consoles
Pour se connecter a une console d'une machine virtuelle:
xm console 96 Ce sont les deux derniers chiffres de la console (xm list)
xm console VM-Linux1 Pour sortir du mode console: Ctrl + ]
telnet localhost 9696
Mettre en pause une machine virtuelle:
xm pause ?
Retirer la pause d'une machine virtuelle:
xm unpause ?
Sauvegarder dans un fichier le disque d'une machine virtuelle:
xm save ?
Restaurer une machine virtuelle à partir d'un fichier:
xm restore ?
Mettre une machine virtuelle sur un CPU:
xm pincpu ?
Configurer les paramètres du scheduler BVT pour une machine virtuelle:
xm bvt
Configurer les 'persistance' (allowance) du context switching de BVT pour le système:
xm bvt_ctxallow
Configurer les paramètres atropos? pour une machine virtuelle:
xm atropos
Mettre en place un partage du temps de type round robin time slice pour le système:
xm rrobin
Récupérer les informations concernant le domaine 0:
xm info
Appeler l'API xend HTTP directement:
xm call
Avoir de l'aide en ligne sur les commandes xm:
xm help
Option des fichiers de configuration
Noyau: kernel
Configurer le kernel de la machine virtuelle livré avec le package ou compilé par vos soins, par exemple :
kernel = '/boot/vmlinuz-2.6.10-xenU'
CPU: cpu
Par défaut, XEN gére lui même l'allocation de la machine virtuelle sur le ou les CPU.
Avec cette option, XEN gére lui-même l'allocation
cpu = -1
La machine virtuelle est sur le 1er CPU
cpu = 0
La machine virtuelle est sur le 2eme CPU, etc.
cpu = 1
- cpus = "" # leave to Xen to pick
- cpus = "0" # all vcpus run on CPU0
- cpus = "0-3,5,^1" # run on cpus 0,2,3,5
- cpus = "%s" % vmid # set based on vmid (mod number of CPUs)
VCPU: CPU virtuel
- Number of Virtual CPUS to use, default is 1
- vcpus = 1
vcpus = 4 # make your domain a 4-way
Poids CPU
Mettre un poids pour donner une plus grande importance à une machine virtuelle
cpu_weight=5
Mémoire: memory
Configurer de la taille mémoire (RAM) en MégaOctet pour la machine virtuelle, par exemple :
memory = 64
Disque: disk
Set the first entry in this list to calculate the offset of the domain's root partition, based on the domain ID. Plus d'informations sur les disques:
Stockage
Set the second to the location of /usr if you are sharing it between domains, exemple :
disk = ['phy:hda4,hda1,w' ]
disk = ['file:/home/vm1disk1,hda1,w','file:/home/vm1disk2,hda1,w']
Réseaux: interfaces
Indiquez ici le nombre d'interface réseaux que vous souhaitez (en plus de lo: loopback), par exemple:
nics=1
Réseaux: vif
Vous pouvez fixer les adresses MAC des cartes réseaux, si vous ne le faites pas, des adresses MAC seront automatiquement alloué, par exemple :
vif = ['mac=00:06:AA:F6:BB:B3']
vif = [ 'mac=aa:00:00:00:00:11, bridge=xen-br0' ]
vif = [ 'mac=aa:00:00:00:00:11, bridge=xen-br0','bridge=xen-br1' ]
Réseaux: dhcp
Uncomment the dhcp variable, so that the domain will receive its IP address from a DHCP server, exemple :
dhcp='dhcp' ou ip='dhcp'
Réseaux: ip
, exemple :
ip = '192.168.1.2'
netmask= '255.255.255.0'
gateway= '192.168.1.1'
hostname= 'LinuxVM1'
Périphériques PCI: pci
Il est possible d'adresser directement des périphériques PCI à une machine virtuelle. Bien sûr, ce la ne fonctionne pas pour les cartes réseaux. Pour les autres périphériques, il faut être prudent et allouer un seul périphérique par VM. La configuration se réalise suivant son adresse physique de type: X, Y et Z;
pci = ['x,y,z', ...]
Pour la carte vidéo, par exemple:
pci = ['x,y,z', ...]
Pour la carte son, par exemple:
pci = ['x,y,z', ...]
Pour l'USB, par exemple:
pci = ["00,07,02"]
test:~# lspci
0000:00:07.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB
Erreurs possibles
GRUB: Error 15
Si au boot, vous avez cette erreur
Error 15 est "File not found"
Vérifiez bien les fichiers xen.gz et le kernel vmlinuz-2.6.10-xen0 sont bien présents
Parfois la version du kernel change, donc il faut faire attention au nom des fichiers.
Python: API =! version
Vous pouvez avoir une erreur sur la version de Python:
RuntimeWarning: Python C API version mismatch for module xen.lowlevel.xc: This Python has API version 1012, module xen.lowlevel.xc has version 1011.
Disque: Cannot open root device "hda1" or unknown-block(2,0)
xen_blk: Initialising virtual block device driver
Could not probe disks (0)
Root-NFS: Server returned error -101 while mounting /tftpboot/62.0.0.0
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "hda1" or unknown-block(2,0)
Please append a correct "root=" boot option
Dans le fichier de configuration de la VM, l'option disk est mal écrite!
ou disk est Disk.
:)