===Virtualisation par KVM===

==Préliminaires==

Kvm (pour Kernel-based Virtual Machine) est une solution de virtualisation récente, légère et très performante. Elle repose sur un module noyau (inclus dans les noyaux de version >2.6.20, le backport est possible sur certains noyaux antérieurs, voir le [[http://kvm.qumranet.com/kvmwiki/HOWTO|wiki de kvm]]), et un émulateur (une version modifiée de [[qemu:|Qemu]]).
Kvm est développé sous licence libre, ainsi que les outils utilisateurs (lgpl et gpl). Le développement et asuré en grande partie par la société [[http://www.qumranet.com/|Qumranet]] qui est spécialisée dans les solutions Open-Sources.

Kvm est une solution dite de "full virtualization" , le système invité n'a pas besoin d'être modifié. Chaque système invité est traité par le noyau comme un processus autonome, qui au lieu d'être décomposé en processus utilisateur et noyau, ajoute une troisième catégorie de processus "invité" (guest) lui même décomposé en deux niveaux utilisateur et noyau.

Si vous disposez d'un noyau récent le module kvm est déjà présent, pour le vérifier utilisez :

<code> /sbin/modprobe -l | grep kvm</code>

Vous devriez voir trois composants : kvm.ko qui est la partie commune du module, et kvm-intel ou kvm-amd qui est la partie spécifique à l'architecture du processeur.

Votre processeur doit également supporter cette forme de virtualisation, seuls les processeurs récent sont dans ce cas. Si le vôtre est compatible la commande :

<code>cat /proc/cpuinfo | egrep '^flags.*(vmx|svm)'</code>

doit vous renvoyer une longue série de « flags » parmi lesquels les valeurs "vmx" ou "svm". Pour faire simple si la commande renvoie quelque chose c'est bon, sinon vous ne pourrez pas utiliser kvm.

==Installation==

Prenons l'exemple de [[deb:debian:|Debian]], comme indiqué précédemment le module est déjà présent si votre noyau est récent, pour le charger il suffira d'utiliser « modprobe » en appelant le module qui correspond à votre architecture :

<code># modprobe kvm && modprobe kvm-intel (ou kvm-amd)</code>

Normalement si depmod (liste les dépendances des modules) est correctement configuré il suffit de charger le module spécifique à l'architecture processeur, le module commun sera chargé comme une dépendance.

Il vous faut ensuite les outils qui vont vous permettre d'interagir avec le module kvm, en particulier la version modifiée de Qemu:

<code># apt-get install kvm</code>

Sur certaines distributions le paquet nécessaire peut s'appeler "kvm-qemu".

==Utilisation==

La syntaxe est exactement la même que [[qemu:|Qemu]], la seule différence étant l'invocation de kvm (kvm-qemu sur certains systèmes) à la place de qemu.

Création d'un disque virtuel "Dreamlinux.img" au format qcow2 (image dynamique) de 10 Go (facultatif) :

<code>qemu-img create -f qcow2 ./Dreamlinux.img 10G</code>

Lancement de la machine virtuelle avec une image .iso comme disque de démarrage (option -cdrom), utilisation du disque virtuel précédemment créée(option -hda , pourra être utilisé pour l'installation, facultatif), en simulant une machine dualcore (-smp 2) et en lui allouant 1024Mo de mémoire vive (-m 1024) :

<code>kvm -smp 2 -m 1024 -cdrom ~/DL3.1_080405DE_en.iso -hda ./Dreamlinux.img</code>

Une invocation plus simple destinée à tester une distribution sur cdrom sera :

<code>kvm -cdrom /mon_image_iso</code>

Kvm utilisera les paramètres par défaut, notamment 128Mo de mémoire vive ce qui peut être un peu juste.
Lors de l'utilisation de kvm la barre des titres de la fenêtre d'émulation doit indiquer "qemu/kvm" et non qemu seul.

De nombreuses options sont disponibles, elles sont pour la plupart similaires à celles de Qemu. Consultez les pages de manuel (man kvm ou man kvm-qemu) et la documentation sur [[http://kvm.qumranet.com/kvmwiki/HOWTO|le site de kvm]].

Il faudra particulièrement veiller aux réglages réseau car la méthode par défaut utilisée par kvm est très efficace pour fournir un accès réseau à la machine virtuelle, mais limitée pour une utilisation avancée (accès ssh ou vnc à la machine virtuelle impossible par défaut).

Il est possible d'obtenir le support d'un lecteur de disquette, de l'usb, d'émuler une carte son performante, ou de désactiver l'acpi sur la machine invitée (indispensable pour windows xp) par exemple.
Il est également possible de démarrer la machine virtuelle en mode "snapshot" pour ne pas écrire les changements sur la machine virtuelle avant de les avoir validés.

En cas de problème au démarrage, vérifiez que vous avez bien un périphérique /dev/kvm avec les droits root:kvm, et vérifiez dans /etc/group que le groupe kvm existe, et que vous en êtes membre.

==Interface graphique==

J'entends d'ici les grincements de dents : kvm s'utilise en ligne de commande, il n'y a pas d'interface graphique officielle pleinement fonctionnelle pour le moment.

L'interface de gestion des machines virtuelles **virt-manager** ([[http://virt-manager.org/index.html|Virtual Machine Manager]]) est en développement, elle est pour le moment instable au mieux, et incomplète quant à l'accès qu'elle fournie aux options de kvm. Vous pouvez l'essayer sur Debian Testing et Ubuntu 8.04 à partir des dépôts standard. À terme elle sera une solution graphique complète de création, administration et monitoring des machines virtuelles (kvm mais aussi qemu et xen).
Le développement étant très actif  (notamment mené par RedHat) il est conseillé de tester régulièrement l'application

Cependant il est possible d'utiliser [[http://qemulator.createweb.de/|Qemulator]] très facilement, il fourni une interface assez complète et suffisamment intuitive pour qui est familier de la virtualisation (si vous avez utilisé [[virtualbox:|VirtualBox]] ou Vmware vous devriez vous y retrouver très vite).
Qemulator est disponible sur les dépôts Testing Debian, après installation avec apt-get vous trouverez un raccourci dans le sous-menu "utilitaires" du menu K (kde), et quelque part sous Gnome ... ;-)

Qemulator est prévu pour utiliser Qemu et son module kqemu, pour que cela fonctionne avec kvm il va falloir le modifier un peu.

Rien de bien compliqué en fait, ouvrez Qemulator et créez une machine virtuelle comme vous le feriez dans VirualBox ou autre, ensuite ouvrez les préférences de Qemulator (menu Settings>Preferences , à ne pas confondre avec les "settings" de la machine virtuelle). Une fenêtre autonome s'ouvre pour présenter les réglages possibles, dans le premier onglet "Path" rendez-vous dans le partie inférieure nommé "qemu programs for all plateforms". Effacer tous les chemins vers les exécutables relatifs à Qemu (il faut les sélectionner et utiliser le bouton "remove" ). Créez ensuite les nouveaux chemins vers kvm pour les types d'architectures que vous utilisez (ici x86 et x86-64), mettez donc comme nom "x86" et "x86-64" pour le second, et dans les deux cas indiquez le même chemin /usr/bin/kvm (kvm traite de la même façon les deux architectures).
Au final vous devriez avoir quelque chose d'identique à la capture d'écran ci-dessous.
N'oubliez pas d'enregistrer les changements.


La fenêtre principale et celle des préférences de Qemulator.
{{ autre:qemulator_kvm.png?580 }}

Maintenant ouvrez les "settings" de la machine virtuelle (qui s'ouvrent dans un panneau intégré au bas de la fenêtre principale), faites vos réglages mais veillez à ce que dans l'onglet "Qemu" la ligne cochée soit bien "use kqemu (default)". cela peut paraître étrange car on ne veut justement pas utiliser kqemu, mais comme Qemu par défaut détecte et utilise kqemu s'il est présent seule cette option n'ajoute rien à la ligne de commande générée par Qemulator. Choisir "don't use kqemu" ajouterait l'option "-no-kqemu" à la commande, celle-ci n'étant pas reconnue par kvm.

Voilà, l'adaptation est finie, désormais en lançant votre machine virtuelle avec Qemulator vous devriez voir dans la barre des titres de la fenêtre d'émulation la mention "qemu/kvm". N'oubliez pas de charger le module kvm, Qemulator ne le fera pas pour vous.
