Virt/Xen

De TartareFR
Aller à la navigation Aller à la recherche

Introduction

Ce document décrit le déroulement de l'installation de Xen. Xen est un logiciel libre de virtualisation et plus précisément un hyperviseur de machines virtuelles. Son but est de faire fonctionner plusieurs machines virtuelles (invités) sur une machine hôte. Les systèmes d'exploitation invités partagent ainsi les ressources de la machine hôte. Nous allons donc voir dans cette notice comment installer Xen, comment le configurer, comment installer les différents invités et comment corriger les différents problèmes de fonctionnement qui pourront être rencontrés.

Installation

L'installation est très simple mais nécessite un reboot de la machine pour booter sur le kernel-xen qui sera installé.

yum install xen kernel-xen

Modification du fichier <path>/etc/grub.conf</path> pour booter automatiquement sur le kernel xen.

default=0 

Où 0 représente le numéro du kernel sur lequel on veut booter (donc kernel-xen)

On reboot le serveur. Après le reboot, on vérifie que l'on est sur le bon kernel

#uname -r
2.6.18-194.32.1.el5xen

L'installation de Xen est désormais terminée. On va donc procéder à l'installation de la première VM. Pour informations, la machine hôte donc le serveur Xen est appelé dom0 et les machines virtuelles hébergées par celui-ci donc les invités sont appelés domU.

Notons aussi les 2 types de virtualisation essentiellement utilisé: HVM qui est la méthode de virtualisation complète, elle désigne la virtualisation hardware des processeurs (VT pour intel et Pacifica pour AMD). Si le processeur est compatible, nous pouvons virtualiser sans modification du système invité. PV est la méthode dite paravirtuelle, elle nécessite un noyau modifié pour que le système invité puisse fonctionner. Cette deuxième méthode assure de meilleures performances pour le système invité.

Les VM Linux utiliseront la méthode PV et les VM Windows utiliseront la méthode HVM.

Installation de la première machine virtuelle

Pour installer la première machine virtuelle Linux (CentOS), nous allons passer par un mirroir pour comprendre comment se passe ce type d'installation. Pour les suivantes, nous utiliserons l'outil koan qui permet d'automatiser l'installation depuis le serveur Cobbler. Koan permettra d'installer une VM en moins de 5 minutes sans avoir besoin d’interagir avec le processus d'installation.

L'installation traditionnelle d'un VM Centos se fait ainsi:

# mkdir /var/data/xen
# virt-install --prompt
What is the name of your virtual machine? cent01
How much RAM should be allocated (in megabytes)? 128
What would you like to use as the disk (file path)? /var/data/xen/cent01.img
How large would you like the disk (/vm/vm01.img) to be (in gigabytes)? 5
What is the install location? ftp://ftp.free.fr/mirrors/ftp.centos.org/5.5/os/x86_64/

Ensuite il suffit de suivre les étapes de la même façon que lors d'une installation de CentOS netinstall normale.

Commandes XEN Utiles

Nous allons détailler les commandes essentielles pour l'utilisation de Xen :

  • Lister les domaines actifs : xm list
  • Démarrer un domaine : xm create /etc/xen/cent01
  • Éteindre un domaine : xm shutdown cent01
  • Éteindre un domaine (méthode brutale) : xm destroy cent01
  • Se connecter à la console d'une VM Linux : xm console cent01
    Appuyer sur 'Entrée' une seconde fois.
  • Pour quitter la console : ctrl+5
  • Démarrage automatique de la VM au boot du serveur : ln -s /etc/xen/cent01 /etc/xen/auto
  • Incrémenter la RAM d'un invité arrêté : modifier le paramètre adéquat dans le fichier de configuration de la VM
  • Incrémenter la RAM d'un invité démarré : xm mem-set cent01 2048M

Cloner une machine virtuelle

Nous allons voir comment cloner la VM cent01, la méthode est très simple et va se faire avec une seule commande :

# xm shutdown cent01
# virt-clone --prompt
What is the name of the original virtual machine? cent01
What would you like to use as the cloned disk (file path) for '/var/data/xen/cent01.img'? /var/data/xen/cent02.img

KOAN

L'utilisation de cet outil est expliqué en détail dans la notice d’installation de Cobbler. Nous n'allons donc pas nous attarder sur celui mais rappelons simplement qu'il va permettre d'installer rapidement de manière automatique de nouvelles VM Linux sur un serveur Xen. Il est important de considérer également que le kernel 2.6.18-194.32.1.el5 ne fonctionne pas sur les VM installées avec koan, il faut utiliser le kernel 2.6.18-194.el5.

XEN basé sur lvm

Pour créer un domU basé sur LVM plutôt que sur un fichier, il faut d'abord s'assurer que le VolGroup00 dispose de suffisamment d'espace disque disponible. On peut constater ceci avec la commande vgdisplay. On va alors créer le volume logique avec la suite de commandes suivantes :

Partition

# lvcreate -L 5G -n xcent01 VolGroup00
# mkfs -t ext3 /dev/VolGroup00/xcent01

Swap (optionnel)

# lvcreate -L 512M -n xswcent01 VolGroup00
# mkswap /dev/VolGroup00/xswcent01
# swapon /dev/VolGroup00/xswcent01

Test de montage de la partition

# mkdir /xen/xcent01
# mount /dev/VolGroup00/xcent01 /xen/xcent01/
# umount /xen/xcent01

Maintenant que notre volume logique est prêt, on va installer une VM dessus à l'aide de Koan avec les commandes suivantes :

# wget http://download.fedora.redhat.com/pub/epel/5/x86_64/koan-2.0.9-1.el5.noarch.rpm
# rpm -i koan-2.0.9-1.el5.noarch.rpm
# koan --virt --profile=centxenvm-xen-x86_64 --server=192.168.0.52 --virt-type=auto --nogfx \
--virt-name=cent01 –virt-path=/dev/VolGroup00/xcent01
# xm create centok
Error: (2, 'Invalid kernel', 'xc_dom_parse_elf_kernel: ELF image has no shstrtab\n')

Edition du fichier <path>/etc/xen/cent01</path> Commenter la ligne suivante ( ajout d'un # en début de ligne )

bootloader = "/usr/bin/pygrub"

Et ajouter après cette ligne

kernel = "/boot/vmlinuz-2.6.18-194.el5xen"
ramdisk = "/boot/initrd-2.6.18-194.el5xen.img"

Problème "Booting has failed".

# xm destroy cent01
# xm console vm01 # VM installée depuis miroir centos
# mkinitrd --omit-scsi-modules --with=xennet --with=xenblk --preload=xenblk \
initrd-$(uname -r)-no-scsi.img $(uname -r)

Récuperation de l'image ramdisk depuis la vm qui fonctionne vers le serveur xen

# scp initrd-2.6.18-194.el5xen-no-scsi.img root@192.168.0.21:/home/xen/

[ctrl] + [5] pour quitter

Fichier <path>/etc/xen/cent01</path>

#bootloader = "/usr/bin/pygrub"
kernel = "/boot/vmlinuz-2.6.18-194.el5xen"
ramdisk = "/home/xen/initrd-2.6.18-194.el5xen-no-scsi.img"
# xm create cent01 -c

Nous voilà sur la VM installé via koan

# yum install kernel-xen-2.6.18-194.el5

Edition du fichier <path>/etc/grub.conf</path> pour configurer le kernel par default sur le kernel non xen Edition du fichier <path>/etc/yum.conf</path> et ajouter

exclude=kernel*

Problème FATAL Module ipv6 not found

Problème "modules.dep no such file or directory"

# mkdir /lib/modules/2.6.18-194.el5xen
# depmod -a
# reboot

Nous avons donc vu ici comment installer une VM depuis Koan sur une partition LVM.

VM Windows

Nous allons voir maintenant comment virtualiser des machines Windows. L'installation devra se faire de façon traditionnelle car Cobbler ne supporte pas les installations de VM Windows sous Xen. Voici la méthode à suivre :

Premièrement, nous installons et configurons le service VNC sur le serveur Xen :

# yum install vnc-server

vi /etc/sysconfig/vncservers

VNCSERVERS="5:root" # display port and username
VNCSERVERARGS[5]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"
# vncpasswd
Password:
Verify:
# vncserver :5
New 'xen1.b2pweb.com:5 (root)' desktop is xen1.b2pweb.com:5
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/xen1.b2pweb.com:5.log

Nous avons ici lancé une première instance du serveur VNC, on peut essayer de s'y connecter avec un client VNC en précisant l'URL suivante : 192.168.0.21:5 (où l'IP correspond à l'IP du serveur Xen).

Pour tuer cette instance du serveur VNC

vncserver -kill :5

On va maintenant installé notre première VM Windows: (il faut avoir au préalable créé une image ISO d'un CD de boot Windows XP)

# mkdir -p /home/xen/domains/xp
# nice dd if=/dev/zero of=/home/xen/domains/xp/disk.img bs=1024k seek=4096 count=0
# virt-install -n winxp_base -r 256 --disk /home/xen/domains/xp/disk.img,size=5 -b xenbr0 \
--vnc -v -c /home/admin/XP_PRO_SP2.iso
xm shutdown winxp_base # (si nécessaire)

Fichier <path>/etc/xen/winxp</path>

  • 'on_crash' should be changed to 'destroy'
  • Change the line on_reboot = 'restart' to on_reboot = 'destroy' to ensure that Windows doesn’t restart during setup without our permission, which will be required for ACPI support in the guest to be set up properly.
  • Add file:/home/admin/XP_PRO_SP2.iso,hdc:cdrom,r', to the list in the line disk = [ ... ]
  • Add new line boot = 'd' (preferably after the line disk = [ ... ].).

Le fichier de configuration de la VM devrait ressembler à quelque chose comme ceci :

name = "winxp_base"
uuid = "8ff17e33-2c64-e876-3141-a7e341fc896b"
maxmem = 256
memory = 256
vcpus = 1
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
pae = 1
acpi = 1
apic = 1
localtime = 0
on_poweroff = "destroy"
on_reboot = "destroy"
on_crash = "destroy"
device_model = "/usr/lib64/xen/bin/qemu-dm"
sdl = 0
vnc = 1
vnclisten = "192.168.0.21"
vncdisplay = 30
vncpasswd = "vncserver"
keymap = "fr"
disk = [ "file:/home/xen/domains/xp/disk.img,hda,w", "file:/home/admin/XP_PRO_SP2.iso,hdc:cdrom,r" ]
boot = "d"
vif = [ "mac=00:16:36:bb:c4:44,bridge=xenbr0,script=vif-bridge" ]
parallel = "none"
serial = "pty"

Il est important de noter à ce stade de l'installation que le client TightVNC est nécessaire, en effet le client UltraVNC ne fonctionne pas pour se connecter aux VM. On peut envoyer l'installation ainsi :

# xm create winxp_base

On se connecter alors avec TightVNC à l'adresse du serveur (Xen) : 192.168.0.21:30 (où 30 est le numéro de port spécifié dans le fichier de configuration de la VM). Le mot de passe est 'vncserver' (également spécifié dans le fichier de conf). On déroule normalement l'installation, à la fin la VM ne redémarre pas, c'est normal, la configuration est définie ainsi on va alors de nouveau éditer le fichier adéquat pour rétablir la bonne configuration :

Edition du fichier <path>/etc/xen/winxp_base</path>

  • Change the line boot = 'd' to boot = 'c'
  • Change the line on_reboot = 'destroy' to on_reboot = 'restart'
# xm create winxp_base

On se reconnecte avec TightVNC à l'adresse du serveur (Xen) : 192.168.0.21:30 avec le mot de passe 'vncserver' et on termine l'installation et la configuration de la VM Windows.

Dans cet exemple nous avons installé une VM Windows XP, si on veut installer une autre version de Windows la procédure est la même, il suffit juste d'adapter les paramètres vus ci-dessus. Par exemple, voici la ligne de commande utilisée pour installer une VM Windows Seven :

# virt-install -n win7_base -r 2048 --disk /home/xen/domains/seven/disk.img,size=20 -b xenbr0 --vnc -v -c /home/admin/WIN_7_ULTIMATE.iso

Notez que pour installer une VM Vista ou Seven, il faut minimum 2048 Mo de RAM et 20 Go d'espace disque disponible.

Migration d'une VM XEN LVM vers un autre hôte

Il se peut que nous ayons besoin de déplacer une machine virtuelle depuis son hôte actuel vers un autre hôte (dom0).

Les VM Xen peuvent être basées sur 2 types de disque dur : le fichier image (.img) ou le volume LVM.

Pour déplacer une VM image-based, il suffit de déplacer le fichier image et le fichier de configuration sur le nouvel hôte pour pouvoir utiliser la VM sur le nouveau dom0.

Dans le cas d'une VM LVM-based, les manipulations à entreprendre sont les suivantes :

Sur l'ancien dom0 :

  • On arrête la VM
  • On exporte le snapshot du domU dans un fichier
  • On supprime le snapshot du volume LVM
  • On copie le fichier correspondant au snapshot sur le nouveau dom0
  • On copie le fichier de configuration de la VM sur le nouveau dom0

Sur le nouveau dom0 :

  • On crée le volume LVM pour la VM
  • On exporte le fichier image récupéré vers ce volume LVM
  • On démarre la VM

Sur l'ancien dom0 :

  • On supprime le fichier image (export du snapshot)
  • On supprime le fichier de configuration

Résumé des commandes :

Sur l'ancien hôte

xm shutdown vm01
dd if=/dev/VolGroup00/vm01 of=/tmp/vm01.img bs=4096
lvremove /dev/VolGroup00/vm01
scp /tmp/vm01.img root@new_host:/tmp/
scp /etc/xen/vm01 root@new_host:/etc/xen/

Sur le nouvel hôte

lvcreate -L 5G -n vm01 VolGroup00
dd if=/tmp/vm01.img of=/dev/VolGroup00/vm01 bs=4096
xm create vm01 -c

Sur l'ancien hôte

rm -rf /tmp/vm01.img
rm -rf /etc/xen/vm01