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
où 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 ! ;)
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 ;-)
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)…
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…
Je ne fais que reprendre ce qui est marqué dans le wiki d’Archlinux :) :
https://wiki.archlinux.org/index.php/QEMU#Enabling_KVM
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.
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.
Merci pour ces précieuses précisions. Je pensais que tu allais passer dans le coin ;)
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.
Pas de bol. Ça fait deux fois que je dois te repêcher dans l’antispam :)
Ç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…
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 !
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 :)
Je sais ;)
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é :).
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. ^^