Qemu et kvm ...présentation, installation et utilisation basique
Published by slubman on May 12th, 2008
É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:
- La documentation officielle de qemu: http://fabrice.bellard.free.fr/qemu/qemu-doc.html (en)
- La FAQ de qemu : http://kidsquid.com/cgi-bin/moin.cgi/FrequentlyAskedQuestions (en)
- La FAQ de kvm est aussi un très bon endroit pour trouver des renseignements : http://kvm.qumranet.com/kvmwiki/FAQ (en)
- La page de qemu sur le wiki archlinux: http://wiki.archlinux.org/index.php/QEMU (en)
- La page de qemu sur le wiki de archlinux.fr: http://wiki.archlinux.fr/howto:virtualisation:qemu?s=qemu
- L'incontournable wikipedia : la page de qemu et la page de kvm.
Interface graphique
Réseau
Pour une mise en réseau plus sophistiquée, on pourra regarder du coté de ces 2 projets:
- bridge-utils: permettant de partager une interface réelle entre plusieurs interfaces virtuelles.
- virtual distributed ethernet.
À 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.