
Vous voulez utiliser KVM pour vos machines virtuelles, mais vous tombez sur trois noms différents : KVM, QEMU, libvirt. Lequel fait quoi ? Ce guide clarifie les 3 couches de la virtualisation Linux et vous montre ce que vous manipulez réellement au quotidien.
L’essentiel en 20 secondes
Section intitulée « L’essentiel en 20 secondes »| Couche | Rôle | Où ça tourne |
|---|---|---|
| KVM | Accélère l’exécution CPU des VMs | Kernel (module) |
| QEMU | Construit la VM et ses périphériques | Userspace (processus) |
| libvirt | Pilote tout via API/daemon/outils | Userspace (service) |
Quand vous “utilisez KVM”, vous utilisez en réalité les trois ensemble.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Le rôle de KVM (accélération matérielle)
- Le rôle de QEMU (émulation et création de VMs)
- Le rôle de libvirt (gestion unifiée)
- Les objets que vous manipulez : domain, network, storage pool
- La différence entre défini et actif
La confusion classique
Section intitulée « La confusion classique »Quand on débute avec la virtualisation Linux, on rencontre rapidement ces trois termes :
- “Installer KVM”
- “Lancer une VM avec QEMU”
- “Gérer les VMs avec libvirt”
Ces termes sont souvent utilisés de manière interchangeable, ce qui crée de la confusion. En réalité, ce sont trois couches distinctes qui travaillent ensemble.
Les 3 couches de la virtualisation Linux
Section intitulée « Les 3 couches de la virtualisation Linux »Vue d’ensemble
Section intitulée « Vue d’ensemble »Chaque couche a un rôle précis. Voyons-les une par une.
KVM : le moteur turbo
Section intitulée « KVM : le moteur turbo »KVM (Kernel-based Virtual Machine) est un module du noyau Linux. Ce n’est pas un programme que vous lancez, c’est une extension du kernel qui transforme Linux en hyperviseur.
Ce que fait KVM
Section intitulée « Ce que fait KVM »- Accélération matérielle : utilise les instructions CPU (Intel VT-x / AMD-V) pour exécuter les VMs à vitesse quasi-native
- Isolation : chaque VM est isolée des autres grâce au matériel
- Performance : les instructions de la VM s’exécutent directement sur le CPU, pas d’émulation coûteuse
Ce que KVM ne fait PAS
Section intitulée « Ce que KVM ne fait PAS »- KVM ne crée pas de VMs
- KVM ne gère pas les disques virtuels
- KVM ne configure pas le réseau
KVM est “juste” l’accélérateur. Sans lui, les VMs tourneraient en émulation logicielle (très lent). Avec lui, elles atteignent des performances proches du bare-metal.
Analogie
Section intitulée « Analogie »Si votre VM est une voiture, KVM est le turbo. Sans turbo, la voiture roule (lentement). Avec turbo, elle atteint sa vitesse maximale.
QEMU : le châssis
Section intitulée « QEMU : le châssis »QEMU (Quick Emulator) est un émulateur et virtualiseur. C’est lui qui crée réellement les machines virtuelles.
Ce que fait QEMU
Section intitulée « Ce que fait QEMU »- Crée les VMs : définit le “matériel virtuel” (CPU, RAM, disques, cartes réseau)
- Émule le matériel : peut émuler différentes architectures (x86, ARM, etc.)
- Gère les périphériques : disques virtuels, cartes réseau, USB, etc.
QEMU seul vs QEMU + KVM
Section intitulée « QEMU seul vs QEMU + KVM »| Mode | Performance | Usage |
|---|---|---|
| QEMU seul | Lente (émulation) | Émuler une autre architecture (ARM sur x86) |
| QEMU + KVM | Quasi-native | VMs de production sur même architecture |
En pratique, on utilise presque toujours QEMU + KVM pour les VMs Linux/Windows sur serveur x86.
Analogie
Section intitulée « Analogie »Si votre VM est une voiture, QEMU est le châssis. Il définit la structure : combien de roues, quelle carrosserie, quel moteur. Sans châssis, pas de voiture.
QEMU en direct (rare)
Section intitulée « QEMU en direct (rare) »On peut lancer une VM directement avec QEMU, par exemple qemu-system-x86_64 -enable-kvm -m 2048 ..., mais c’est fastidieux à gérer. En pratique, on passe par libvirt.
libvirt : le tableau de bord
Section intitulée « libvirt : le tableau de bord »libvirt est une couche de gestion qui simplifie l’utilisation de QEMU/KVM (et d’autres hyperviseurs).
Ce que fait libvirt
Section intitulée « Ce que fait libvirt »- API unifiée : même interface pour KVM, QEMU, Xen, VirtualBox, VMware…
- Daemon :
libvirtdtourne en arrière-plan et gère les VMs - Outils :
virsh(CLI),virt-manager(GUI),virt-install(création) - Configuration : stocke les définitions de VMs en XML
Ce que libvirt apporte
Section intitulée « Ce que libvirt apporte »| Sans libvirt | Avec libvirt |
|---|---|
| Commandes QEMU longues et complexes | virsh start ma-vm |
| Pas de persistance automatique | VMs définies et persistantes |
| Gestion manuelle du réseau | Réseaux virtuels préconfigurés |
| Pas d’interface graphique | virt-manager, cockpit |
Analogie
Section intitulée « Analogie »Si votre VM est une voiture, libvirt est le tableau de bord. Vous ne manipulez pas directement le moteur (KVM) ou le châssis (QEMU). Vous utilisez le volant, les pédales, le compteur — l’interface qui rend la conduite facile.
Les outils libvirt
Section intitulée « Les outils libvirt »| Outil | Type | Usage |
|---|---|---|
| virsh | CLI | Gestion en ligne de commande |
| virt-manager | GUI | Interface graphique desktop |
| virt-install | CLI | Création de VMs scriptable |
| cockpit-machines | Web | Interface web (moderne) |
Les objets que vous manipulez
Section intitulée « Les objets que vous manipulez »Avec libvirt, vous ne parlez pas de “fichiers QEMU” ou “modules kernel”. Vous manipulez des objets avec des noms clairs.
Un point important : dans libvirt, un objet (domain, network, pool) peut être :
- Défini : configuration persistante, stockée sur disque
- Actif : en cours d’exécution / disponible
Un domain peut être défini mais arrêté. Un réseau peut être défini mais inactif. C’est une distinction fondamentale.
Domain (la VM)
Section intitulée « Domain (la VM) »Un domain est une machine virtuelle. C’est l’objet principal que vous créez et gérez.
virsh list --all # Lister tous les domains (actifs et définis)Network (le réseau virtuel)
Section intitulée « Network (le réseau virtuel) »Un network est un réseau virtuel. Par défaut, libvirt crée un réseau “default” en NAT.
virsh net-list --all # Lister tous les réseauxStorage Pool et Volume
Section intitulée « Storage Pool et Volume »Un storage pool est un “conteneur” de disques. Un volume est un disque individuel.
virsh pool-list --all # Lister les pools (ex: default = /var/lib/libvirt/images/)Tableau récapitulatif
Section intitulée « Tableau récapitulatif »| Objet libvirt | Ce que c’est | État “défini” | État “actif” |
|---|---|---|---|
| Domain | Machine virtuelle | Config XML stockée | VM en cours d’exécution |
| Network | Réseau virtuel | Config réseau stockée | Bridge créé, DHCP actif |
| Storage Pool | Conteneur de disques | Chemin configuré | Accessible pour créer des volumes |
| Volume | Disque virtuel | — | Fichier/LV existant |
Comment les 3 couches interagissent
Section intitulée « Comment les 3 couches interagissent »Quand vous lancez virsh start ma-vm, voici ce qui se passe :
-
Vous → Envoyez la commande à libvirt (via virsh)
-
libvirt → Lit la définition XML de la VM, vérifie les ressources
-
libvirt → Lance un processus QEMU avec les bons paramètres
-
QEMU → Crée la VM et demande à KVM d’accélérer l’exécution
-
KVM → Utilise le CPU pour exécuter les instructions de la VM
La VM tourne. Vous ne voyez que le résultat : une machine virtuelle qui fonctionne.
Pourquoi cette architecture ?
Section intitulée « Pourquoi cette architecture ? »Cette séparation en couches a des avantages :
| Avantage | Explication |
|---|---|
| Flexibilité | libvirt peut gérer d’autres hyperviseurs (Xen, VirtualBox) |
| Performance | KVM optimise l’exécution sans que vous vous en occupiez |
| Simplicité | Vous utilisez des commandes simples, pas des lignes QEMU |
| Standardisation | Même interface partout (scripts, Ansible, Terraform) |
Erreurs fréquentes
Section intitulée « Erreurs fréquentes »| Confusion | Réalité |
|---|---|
| ”J’installe KVM” | Vous installez QEMU + libvirt + outils. KVM est la partie noyau qui permet l’accélération, et il faut que la machine l’autorise (BIOS/UEFI + CPU compatible). |
| ”KVM ne marche pas” | Souvent un problème de libvirtd (ou daemon modulaire), de permissions, ou de virtualisation non activée dans le BIOS. |
| ”C’est lent” | KVM n’est peut-être pas utilisé (option -enable-kvm manquante, ou virtualisation désactivée). |
| “virsh ne trouve pas ma VM” | La VM n’est pas définie dans libvirt (elle n’existe que comme fichier disque). |
À retenir
Section intitulée « À retenir »-
KVM = module kernel = accélération matérielle (le “turbo”)
-
QEMU = émulateur/virtualiseur = crée les VMs (le “châssis”)
-
libvirt = couche de gestion = API + daemon + outils (le “tableau de bord”)
-
Vous utilisez libvirt au quotidien (virsh, virt-manager), pas QEMU directement
-
Les objets libvirt : domain (VM), network (réseau), storage pool/volume (disques)
-
Défini vs Actif : un objet peut exister en configuration sans être en fonctionnement
Testez votre compréhension
Section intitulée « Testez votre compréhension »Avant de continuer, vérifiez que vous pouvez répondre à ces questions :
- ✅ Quel est le rôle de KVM ? De QEMU ? De libvirt ?
- ✅ Pourquoi utilise-t-on libvirt plutôt que QEMU directement ?
- ✅ Qu’est-ce qu’un “domain” dans le vocabulaire libvirt ?
- ✅ Quelle est la différence entre un objet “défini” et “actif” ?
Prochaines étapes
Section intitulée « Prochaines étapes »Références
Section intitulée « Références »- libvirt API concepts — Concepts fondamentaux (domain, network, storage, defined/active)
- libvirt Storage Management — Pools et volumes
- libvirt Domain XML format — Structure XML des VMs
- Red Hat — Virtualization in RHEL 9 — Daemons modulaires et évolutions
- Oracle Linux 9 — Virtualization — Notes de version et dépréciations