Qemu et kvm ...présentation, installation et utilisation basique

Étant donné la puissance actuelle des ordinateurs personnels, il est tout à fait possible d'utiliser plusieurs OS en même temps. Cela permet par exemple de jouer avec des livecd, tester des systèmes, utiliser des programme n'existant que sur un OS donné, sans avoir à se prendre la tête avec une solution comme le dual-boot.

Il existe depuis longtemps des solutions d'émulation permettant de faire fonctionner plusieurs OS en même temps (bochs). Cependant l'émulation complète du matériel entraine une perte de performances très importante. Pourtant si l'OS hôte et l'OS invité sont destiné tout les 2 à la même architecture matérielle, il est envisageable d'exécuter directement (ou quasiment) un certain nombre des instructions de l'OS invité sur la machine hôte ... c'est un des principe reprit par la plupart des logiciels de virtualisation existants.

Il existe des solutions qui ont le vent en poupe à l'heure actuelle. Sous Linux on retrouve notamment VMware Workstation, VMware ServerParallels Workstation et SUN xVM VirtualBox ... cependant, je préfère utiliser 2 autres solutions qemu et kvm.

qemu, kvm ... qui sont ces 2 gus ?

qemu et kqemu

qemu ne fait pas de la virtualisation à proprement parler, mais utilise une technique de traduction de code pour atteindre une vitesse d'émulation raisonnable. l'auteur de qemu (aka Fabrice Bellard) a cependant créer un module d'accélération nommé kqemu permettant d'exécuter directement le code des applications fonctionnant en espace utilisateur de l'OS émulè sur le processeur. Ce module transforme donc qemu en une solution de virtualisation.

kvm

kvm est une solution tirant partie des instructions de virtualisation ajoutées aux processeurs x86 par Intel® et AMD®. kvm se présente comme une module noyau utilisé par une version modifiée de qemu.

Pourquoi pas Virtual Box, VMWare, Parrallels ?

Avantages

Selon moi, les avantages de qemu + kqemu et/ou kvm vis à vis des solutions concurrentes sont:

  • Simplicité d'installation: ce n'est pas du cliquodrome, mais paradoxalement, je trouve son utilisation en ligne de commande d'une très grande simplicité, et aussi d'une grande souplesse.
  • Installation non intrusive: (pas de modules inconnu ou de services supplémentaires à lancer au démarrage). Je me souviens d'une époque où j'utilisais VMWare Workstation, et où tout passage à un noyau d'une version supérieure cassait les modules et services nécessaires à son fonctionnement, en attendant l'arrivée de patchs non supportés par VMWare (qui a parlé de vmware-any-any-update ??). Au moins avec kvm (intégré au noyau à partir de la version 2.6.20) et kqemu je n'ai pas ces soucis.
  • LIBRES: contrairement à Parrallels Workstation et VMWare (Server ou Workstation).
  • qemu-img : la commande permettant de créer les images de disque dur pour les machines virtuelle, qui est un véritable couteau suisse des formats de disques utilisés par les différentes solutions existantes.

Inconvénients

Les avantages que je trouve dans qemu et kvm ne doivent pas éclipser certains inconvénients (pour certains en tout cas).

  • Ligne de commande: les 2 programmes fonctionnent en CLI et sont de ce fait, pour certains moins accessibles que les GUI proposées par les concurrents.
  • Mise en œuvre du réseau: bien qu'il soit simple de donner accès au réseau à une machine virtuelle, accèder à cette même machine virtuelle par le réseau à partir de son LAN (machine hôte ou autres machines physiques ou virtuelles), est une autre paire de manche, et nécessite quelques bidouillages.

Installation et utilisation sur ArchLinux

Pré-requis

Pour peu que ce ne soit pas le cas (je ne vois pas trop comment ce serait possible):

pacman -S kernel26

Le noyau vient avec les modules nécessaires pour l'utilisation de kvm si le processeur le supporte.

Les 2 autres pré-requis sont tout aussi simples à satisfaire:

pacman -S kqemu, qemu

Le paquet qemu, est fourni avec le binaire permettant de tirer parti de kvm (binaire nommé qemu-kvm). Quant à l'utilisation de kqemu, elle nécessite l'installation du paquet sus-nommé. Pour utiliser kqemu sur un système 64bits, il faudra bien prendre la précaution d'appeler qemu-system-x86_64.

Le cas de kvm

L'utilisation de kvm nécessite un processeur Intel® ou AMD® supportant la virtualisation. Pour vérifier que c'est le cas de votre processeur, il suffit d'entrer la commande suivante dans un terminal:

egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Si cette commande retourne un affichage à l'écran, vous pouvez utilisez kvm, sinon, vous devez vous contentez de qemu et kqemu.

Il va falloir aussi charger les modules au démarrage. On modifie donc notre /etc/rc.conf. Les modules à charger diffèrent selon que le processeur est de marque Intel® ou Amd®.

  • Pour les processeurs Intel®, on charge le module:

    kvm-intel
    
    
  • Pour les processeurs AMD® on charge le module:

    kvm-amd
    
    

Utilisation basique

Je vais décrire une utilisation basique d'une machine virtuelle dans laquelle je souhaite installer la dernière version (à la date de la rédaction) de fedora (en).

La première chose à faire lorsque l'on souhaite utiliser une machine virtuelle est de créer un disque dur virtuel (sauf si l'on test un livecd ou si on utilise une partition physique). La création de cette image disque se fait avec la commande qemu-img:

qemu-img create -f qcow2 ~/vm/fedora-00.img 20G

Une fois le disque créer il faut lancer la machine virtuelle. Dans cet exemple il s'agit d'une machine virtuelle connecté au net disposant de 512Mo de RAM.

Lors du premier lancement il peut être intéressant de procéder à l'installation d'un OS. On lance donc la machine avec l'image ISO du disque d'installation de l'OS en question, et on exige un boot de la machine virtuelle sur le cdrom:

  • qemu avec kqemu (sur arch64)

    qemu-system-x86_64 -kernel-kqemu -boot d -m 512 -net nic -net user -cdrom ~/isos/Fedora-9-Beta-i386-DVD.iso ~/vm/fedora-00.img
    
    
  • kvm

    qemu-kvm -boot d -m 512 -net nic -net user -cdrom ~/isos/Fedora-9-Beta-i386-DVD.iso ~/vm/fedora-00.img
    
    

Une fois l'installation du système d'exploitation sur la machine virtuelle achevée, il n'est plus nécessaire de monter l'image du cdrom dans la machine virtuelle, ni de préciser le boot sur cd, on pourra donc se contenter de démarrer la machine virtuelle par la commande:

  • qemu avec kqemu (sur arch64)

    qemu-system-x86_64 -kernel-kqemu -m 512 -net nic -net user ~/vm/fedora-00.img
    
    
  • kvm

    qemu-kvm -m 512 -net nic -net user ~/vm/fedora-00.img
    
    

Pour aller plus loin

Documentation

Quelques liens concernant qemu et kvm:

Interface graphique

Il existe un certain nombre de GUI pour qemu, mais si je ne devais en retenir qu'une ce serait : Qemulator dont voici quelques captures d'écran (lachement copiées du site web):


Réseau

Pour une mise en réseau plus sophistiquée, on pourra regarder du coté de ces 2 projets:

À suivre ...

S'en est fini de se (long) billet. La suite dans un article à suivre ou je présenterais plus en détails la façon dont j'utilise qemu, à savoir :

  • Lancement des machines virtuelles au démarrage.
  • Indépendance vis à vis d'un serveur X sur l'hôte.
  • Visualisation distante.

comments powered by Disqus