La Virtualisation avec KVM

Logo de KVM

La virtualisation est de plus en plus utilisée aujourd’hui dans le domaine des serveurs, puisqu’elle permet désormais de profiter au maximum de la puissance des processeurs actuels. Cependant, elle présente également des intérêts indéniables pour les particuliers, puisqu’elle nous permet de tester des systèmes d’exploitation sans prendre le risque de détruire son propre système. Ici je vais présenter rapidement l’utilisation de KVM, un outil de virtualisation intégré au noyau Linux s’utilisant en ligne de commande.

Création d’un support virtuel :

Avant de virtualiser quoi que ce soit, il peut être bon d’avoir sous la main un disque virtuel afin, d’y installer le système voulu. Pour cela QEMU (le projet sur lequel est basé KVM) intègre « qemu-img », un outil permettant d’en créer un très facilement.

Entrez tout simplement ceci dans votre terminal :

qemu-img create -f qcow2 fichier.qcow2 20G

fichier.qcow2 est votre disque virtuel et où 20G représente sa taille.

Une autre méthode passe-partout est :

dd of=fichier.img bs=1 seek=20G count=0

où fichier.img est votre disque et où 20G représente sa taille.

Voyons maintenant les différentes options que l’on peut passer à KVM. Je partirai bien entendu du principe que vous avez déjà sous la main une iso prête à être utilisée.

Émuler une image ISO :

La manière la plus simple d’émuler une iso est d’entrer un commande semblable à celle-ci :

kvm file.iso

Ceci aura pour effet de lancer le système contenu dans l’iso spécifiée dans une nouvelle fenêtre, cependant cela risque d’être insuffisant dans la mesure où KVM n’alloue par défaut que 128Mb de RAM au système invité. Vous vous en doutez certainement, ceci est généralement bien trop peu.

Pour spécifier une valeur manuellement on utilise alors l’option -m, suivie d’une valeur indiquée en mégabytes (M), ou en gigabytes (G).

Ainsi pour relancer notre système avec 1G de RAM par exemple, nous utiliserons une syntaxe de ce type :

kvm -m 1024 file.iso

ou :

kvm -m 1G file.iso

Sélectionner un type de clavier :

Il se peut que votre système invité ait un clavier anglais (en-us) et qu’il ne propose pas d’options pour en obtenir un en Français. Dans ce cas vous pouvez forcer l’utilisation d’un clavier français lors de son démarrage avec l’option -k, suivie du clavier souhaité :

kvm -m 1024 -k fr file.iso

Le son :

Ce n’est pas un secret le son fonctionne assez rarement lors d’une émulation. Pour cela il faut préciser à KVM quelle est votre carte son. mais si vous ne le savez pas ce n’est pas grave. L’option -soundhw all activera toutes celles qui sont disponibles sur votre machine.

On en arrive donc à une commande de ce type :

kvm -m 1024 -k fr -soundhw all file.iso

No bootable device et ordre de boot :

Si par le plus grand des hasards KVM vous affirme après avoir cherché pendant un court moment qu’il n’y a pas de périphérique bootable (No bootable device.), c’est parce qu’il faut préciser que votre image iso est un cdrom avec l’option -cdrom :

kvm -m 1024 -k fr -soundhw all -cdrom file.iso

Cette option permet également de démarrez sur un vrai cdrom :

kvm -m 1024 -k fr -soundhw all -cdrom /dev/cdrom

Et enfin mais non des moindre, l’option permettant de spécifier un disque dur est -hda. On peut même en spécifier plusieurs avec -hdb, -hdc et -hdd. À noter qu’il est impossible d’utiliser -hdc avec -cdrom.

kvm -m 1024 -k fr -soundhw all -cdrom file.iso -hda fichier.img

Il faut alors préciser l’ordre de boot du système invité, histoire de ne pas démarrer sur un disque virtuel vide… ^^ Pour cela on utilise le paramètre -boot, suivi des lettres voulues : a et b pour les deux premières disquettes, c pour le disque, d pour le cdrom et n à p pour le réseau.

Par défaut le système boot sur le disque. Pour le booter sur le cdrom d’installation utilisez une commande de ce type :

kvm -m 1024 -k fr -soundhw all -cdrom file.iso -hda fichier.img -boot d

KVM permet également d’accéder aux périphériques USB, en rajoutant simplement l’option -usb.

Généralités :

À ma connaissance il n’y a pas besoin de préciser un ordre particulier pour les différentes options. Vous pouvez commencer par donner le cdrom, les options de clavier, de son, etc… Par défaut la machine virtuelle a également accès au réseau quand la machine hôte dispose d’une connexion internet.

KVM a bien entendu de nombreuses autres possibilités, comme celle de lancer une machine virtuelle distante par VNC, celle de configurer l’affichage, de configurer les périphériques plus finement, de configurer le noyau Linux à utiliser, ou encore de changer le nom de la machine virtuelle avec l’option -name.

Pour obtenir plus de renseignements vous pouvez regarder les pages d’ubuntu-fr.org sur QEMU et KVM, celles de debian-facile sur les mêmes sujets (QEMU, KVM), ainsi que le man kvm, qui vous donnera une liste détaillée des options disponibles.

Pour installer la bête, le plus simple reste de taper quelque chose du genre :

sudo apt-get install kvm

Faisant partie du noyau Linux, cette application n’est malheureusement pas disponible pour les utilisateurs tournant sous Windows… Si c’est votre cas vous pouvez vous tourner vers des alternatives graphiques telles que Virtualbox par exemple, qui seront certainement plus simples à prendre en main que KVM. Sachez juste qu’il est fortement déconseillé d’utiliser les deux à la fois…

Bonne virtualisation et n’hésitez pas à remonter vos bugs, qu’on trouve une solution et que je puisse mettre le tuto à jour ! ;)


15 Responses

  1. eyome 25 décembre 2014 / 19 h 17 min

    Sinon pour les grosses feignasses comme moi il y a gnome-boxes qui utilise kvm, qemu, libvirt…
    Ca « juste travaille », mais moins drôle, sans ligne de commande ;-)

  2. manifesto 23 décembre 2014 / 23 h 29 min

    En fait kvm et qemu c est 2 choses differentes qui ont presque rien à voir (mais qui sont complementaires).
    De plus kvm c est juste des modules qui servent à faire de la virt (en utilisant les extentions de virt des procs).
    QEMU un emulateur (donc ca emule), y a qu’a voir la liste des machins du package arch pour voir que ca emule différentes architecture.
    kvm lui fera de la virt de votre proc, il n y a pas de package parce que c est un module kernel (donc livré avec pacman -Qo /lib64/modules/3.17.6-1-ARCH/kernel/arch/x86/kvm/kvm-intel.ko.gz pour les amateurs).
    A mon avis pour les utilisateurs desktop Virtualbox est bien plus utile (d autant plus que on fait tout en cli) et surtout il y a vagrant pour les maniacs des vm.
    libvirt c est encore autre chose (comme son nom l indique)…

    • Frederic Bezies 25 décembre 2014 / 11 h 46 min

      Pour info, ton lien avec -Qo est relatif au noyau installé. Pour testing, le noyau installé est le 3.18.1, comme sur ma machine :

      [fred@fredo-arch ~]$ pacman -Qi linux
      Nom : linux
      Version : 3.18.1-1
      Description : The Linux kernel and modules
      Architecture : x86_64
      URL : http://www.kernel.org/
      Licences : GPL2
      Groupes : base

      Et il n’y a pas que le module intel pour kvm :

      [fred@fredo-arch ~]$ pacman -Ql linux | grep kvm
      linux /usr/lib/modules/3.18.1-1-ARCH/kernel/arch/x86/kvm/
      linux /usr/lib/modules/3.18.1-1-ARCH/kernel/arch/x86/kvm/kvm-amd.ko.gz
      linux /usr/lib/modules/3.18.1-1-ARCH/kernel/arch/x86/kvm/kvm-intel.ko.gz
      linux /usr/lib/modules/3.18.1-1-ARCH/kernel/arch/x86/kvm/kvm.ko.gz

      J’utilise le raccourci kvm pour des raisons mnémoniques. C’est plus simple que de retenir une ligne de commande commençant par qemu-system-x86_64…

  3. ted 22 décembre 2014 / 20 h 37 min

    Et pour ceux qui ne veulent pas s’embêter (après avoir découvert ces commandes grâce à ce très bon article), il y a virt-manager.

  4. Frederic Bezies 22 décembre 2014 / 18 h 25 min

    Pour créer l’image de disque virtuel, autant utiliser l’outil qemu-img qui est très bien conçu pour cette tache. Cela permet d’avoir des images de taille dynamique.

    Aussi, on peut se créer des alias à mettre dans son .bashrc du genre :

    alias kvm32=’qemu-system-i386 -k fr -m 2048 -sdl -soundhw hda,ac97 -no-frame -vga std –enable-kvm’
    alias kvm64=’qemu-system-x86_64 -k fr -m 2048 -sdl -soundhw hda,ac97 -no-frame -vga std –enable-kvm’

    2 Go de mémoire vive avec l’accélération matérielle, mais sans la bordure autout de la fenêtre du logiciel.

    De plus, pacman -S kvm me donne ceci :

    [fred@fredo-arch ~]$ sudo pacman -S kvm
    [sudo] password for fred:
    erreur : impossible de trouver la cible : kvm

    Le seul paquet supporté sur Archlinux, c’est Qemu. Kvm répond aux abonnés absents sous archlinux.

    Les seuls exécutables étant la série des qemu-system, par exemple avec la version git compilée maison (liste aussi vraie pour le paquet qemu officiel) :

    [fred@fredo-arch ~]$ pacman -Ql qemu-git | grep qemu-system
    qemu-git /usr/bin/qemu-system-aarch64
    qemu-git /usr/bin/qemu-system-alpha
    qemu-git /usr/bin/qemu-system-arm
    qemu-git /usr/bin/qemu-system-cris
    qemu-git /usr/bin/qemu-system-i386
    qemu-git /usr/bin/qemu-system-lm32
    qemu-git /usr/bin/qemu-system-m68k
    qemu-git /usr/bin/qemu-system-microblaze
    qemu-git /usr/bin/qemu-system-microblazeel
    qemu-git /usr/bin/qemu-system-mips
    qemu-git /usr/bin/qemu-system-mips64
    qemu-git /usr/bin/qemu-system-mips64el
    qemu-git /usr/bin/qemu-system-mipsel
    qemu-git /usr/bin/qemu-system-moxie
    qemu-git /usr/bin/qemu-system-or32
    qemu-git /usr/bin/qemu-system-ppc
    qemu-git /usr/bin/qemu-system-ppc64
    qemu-git /usr/bin/qemu-system-ppcemb
    qemu-git /usr/bin/qemu-system-s390x
    qemu-git /usr/bin/qemu-system-sh4
    qemu-git /usr/bin/qemu-system-sh4eb
    qemu-git /usr/bin/qemu-system-sparc
    qemu-git /usr/bin/qemu-system-sparc64
    qemu-git /usr/bin/qemu-system-tricore
    qemu-git /usr/bin/qemu-system-unicore32
    qemu-git /usr/bin/qemu-system-x86_64
    qemu-git /usr/bin/qemu-system-xtensa
    qemu-git /usr/bin/qemu-system-xtensaeb

    Voila, quelques précisions qu’il fallait apporter.

    • Noireaude 22 décembre 2014 / 18 h 33 min

      Merci pour ces précieuses précisions. Je pensais que tu allais passer dans le coin ;)

      • Seboss666 22 décembre 2014 / 20 h 10 min

        Perso, pour faire de la virtualisation KVM j’ai préféré passer par la libvirt, disponible dans les paquets Debian notamment, vu que c’est sur serveur que je me suis fait la main dessus :P

        Couplé avec virt-manager pour avoir un rapide coup d’oeil des ressources (il faut se taper la gestion des clés SSH pour une gestion distante à la VMWare), ça rend pas trop mal.

        • Noireaude 22 décembre 2014 / 21 h 11 min

          Pas de bol. Ça fait deux fois que je dois te repêcher dans l’antispam :)

          • Seboss666 23 décembre 2014 / 11 h 28 min

            Ça vient peut-être du fait que l’adresse mail est complètement différente, ou alors parce que j’ai collé un lien vers un article du blog, sachant que j’ai déjà le lien du blog en adresse de site (double adresse vers le même domaine, paf ?).

            Pour en revenir à qemu/KVM, un point crucial à noter, que j’évoque dans mon billet justement : si pas de virtualisation matérielle, point de KVM. J’en ai fait le douloureux constat sur mon laptop après la mort de ma machine de jeu. Le pentium T3200, malgré un jeu d’instruction 64bit, n’est pas équipé. Ce n’est qu’au prix de l’utilisation de Virtualbox, et donc d’une saturation complète du CPU, et en se cantonnant à de « l’émulation » 32bit, que je peux lancer une machine. Pas pratique pour préparer des VM 64bit à coller sur serveur…

      • Julien HOMMET 22 décembre 2014 / 20 h 19 min

        En effet, merci Fred’ pour tes astuces ! Utilisateur (converti) d’Archlinux, je me suis dis : Merdier, impossible de mettre KVM..! Je comprends mieux maintenant pourquoi.
        Un bon article qui fera sans doute parti de mes prochains billets… ! Merci pour la découverte la Noireaude !

        • Frederic Bezies 22 décembre 2014 / 20 h 56 min

          Apparemment, c’est le paquet libvirt qu’il faut installer. En tout cas, qemu est un logiciel bien puissant quand on sait utiliser quelques raccourcis :D

          Et tu sais Laurent, dès qu’on parle de Qemu, c’est comme un aimant pour moi :)

          • Noireaude 22 décembre 2014 / 21 h 12 min

            Je sais ;)

          • R0mU 23 décembre 2014 / 2 h 05 min

            En lisant vos commentaires, j’ai l’impression de comprendre qu’on ne peut utiliser KVM sous Archlinux ?

            Même s’il y a pas de paquet pour installer KVM à proprement parler, on peut tout de même activer KVM avec Qemu (-enable-kvm) afin d’avoir une virtualisation complète à partir du noyau.

            Dite-moi si je me trompe ? Je viens tout juste de récupérer d’une machine où je souhaitais enfin tester une virtualisation complète avec KVM sur Archlinux, donc si je lis que ce n’est pas possible je vais très contrarié :).

          • Le Schyzophrène Asynchrone 23 décembre 2014 / 11 h 27 min

            Donc si je comprends bien, sous archlinux, il faut installer qemu (pacman -S qemu ?) et taper -enable-kvm dans la commande ?
            J’avoue qu’étant sous debian, j’ai pas vérifié avant de rédiger l’article, puisque les paquets sont souvent les mêmes quelle que soit la distro utilisée….
            Dès que tu m’auras confirmé tout ça je corrige et complète l’article. ^^

Comments are closed.