Aller au contenu
Virtualisation medium

Installer KVM/libvirt sur Linux

50 min de lecture

Logo KVM

Vous voulez créer des machines virtuelles sur votre serveur Linux ? Ce guide vous accompagne pour installer KVM/libvirt en 15 minutes. À la fin, vous aurez un hôte de virtualisation fonctionnel, prêt à créer vos premières VMs.

Si vous êtes pressé et sur une distribution standard (Ubuntu/Debian ou RHEL/Rocky) :

Ubuntu/Debian
# 1. Vérifier le CPU
grep -Ec '(vmx|svm)' /proc/cpuinfo # Doit être > 0
# 2. Installer
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst
# 3. Activer
sudo systemctl enable --now libvirtd
# 4. Permissions
sudo usermod -aG libvirt,kvm $USER && newgrp libvirt
# 5. Tester
virt-host-validate && virsh -c qemu:///system list --all
RHEL/Rocky/Fedora
# 1. Vérifier le CPU
grep -Ec '(vmx|svm)' /proc/cpuinfo # Doit être > 0
# 2. Installer
sudo dnf install -y @virtualization
# 3. Activer
sudo systemctl enable --now libvirtd
# 4. Permissions
sudo usermod -aG libvirt $USER && newgrp libvirt
# 5. Tester
virt-host-validate && virsh -c qemu:///system list --all
  • Vérifier que votre CPU supporte la virtualisation
  • Installer les paquets nécessaires selon votre distribution
  • Configurer les permissions pour gérer les VMs sans sudo
  • Valider l'installation avec les commandes de diagnostic
  • Un serveur ou PC avec un processeur Intel VT-x ou AMD-V
  • Un système Linux (Debian/Ubuntu ou RHEL/Rocky/Fedora)
  • Accès root ou sudo

La virtualisation KVM nécessite un processeur avec les extensions Intel VT-x ou AMD-V. Sans ce support matériel, vos VMs fonctionneront en émulation pure (très lent).

Le fichier /proc/cpuinfo expose un bloc de flags par cœur logique. Compter les lignes contenant vmx ou svm revient donc à compter les cœurs capables d'accélérer une machine virtuelle. Ce que vous cherchez ici est binaire : zéro ou pas zéro. La valeur exacte n'a aucune importance, elle reflète simplement le nombre de cœurs logiques vus par le noyau.

Fenêtre de terminal
# Compter le nombre de cœurs avec support virtualisation
grep -Ec '(vmx|svm)' /proc/cpuinfo

Résultat attendu : un nombre supérieur à 0.

RésultatSignification
0Pas de support ou désactivé dans le BIOS
4, 8, 16...Support activé (nombre = cœurs logiques)

Savoir si votre processeur est Intel ou AMD détermine le module noyau que Linux doit charger, et donc le nom à chercher plus loin dans la sortie de lsmod. La commande ci-dessous affiche la première ligne de flags trouvée : si elle contient vmx, vous êtes sur Intel, si elle contient svm, sur AMD. Vous n'avez jamais à charger ce module à la main, le noyau s'en charge au démarrage dès que le matériel le permet.

Fenêtre de terminal
# Intel ou AMD ?
grep -E 'vmx|svm' /proc/cpuinfo | head -1
ExtensionFabricantModule kernel
vmxIntelkvm_intel
svmAMDkvm_amd

L'installation diffère selon votre distribution. Sélectionnez l'onglet correspondant :

Les paquets de virtualisation dépendent étroitement de la version du noyau installée. Mettre le système à jour avant l'installation évite le cas classique où qemu-kvm arrive dans une version plus récente que les modules noyau chargés, ce qui produit des erreurs difficiles à relier à leur cause.

Fenêtre de terminal
sudo apt update && sudo apt upgrade -y

Une installation de virtualisation se compose de trois briques distinctes : le moteur d'exécution (qemu-kvm), le service de gestion (libvirt-daemon-system) et les outils que vous manipulez (libvirt-clients, virtinst). Le tableau qui suit les détaille. Sur un serveur sans écran, retirez virt-manager de la commande, il tire toute une chaîne de dépendances graphiques inutiles.

Fenêtre de terminal
sudo apt install -y \
qemu-kvm \
libvirt-daemon-system \
libvirt-clients \
virtinst \
virt-manager

Détail des paquets :

PaquetRôle
qemu-kvmQEMU avec accélération KVM
libvirt-daemon-systemDaemon libvirtd + configuration système
libvirt-clientsOutils CLI (virsh)
virtinstOutil virt-install pour créer des VMs
virt-managerInterface graphique (optionnel sur serveur)

Là où grep /proc/cpuinfo ne regarde que les capacités du processeur, kvm-ok va plus loin : il vérifie que le fichier de périphérique /dev/kvm existe réellement, ce qui prouve que le module noyau est chargé et que le BIOS n'a pas désactivé l'extension. C'est la vérification la plus fiable des deux.

Fenêtre de terminal
sudo apt install -y cpu-checker
kvm-ok

Résultat attendu :

INFO: /dev/kvm exists
KVM acceleration can be used

Le daemon libvirt doit être démarré et activé au boot.

  1. Activer et démarrer le service

    Fenêtre de terminal
    sudo systemctl enable --now libvirtd
  2. Vérifier le statut

    Fenêtre de terminal
    sudo systemctl status libvirtd

    Résultat attendu : Active: active (running)

  3. Vérifier la socket

    Fenêtre de terminal
    ls -la /run/libvirt/libvirt-sock

    Ce fichier socket permet la communication avec libvirt.

Par défaut, seul root peut gérer les VMs. Pour éviter d'utiliser sudo à chaque commande, ajoutez votre utilisateur aux groupes appropriés.

Fenêtre de terminal
# Ajouter l'utilisateur aux groupes libvirt et kvm
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

Cette vérification cause plus de confusion que n'importe quelle autre étape du guide, parce que Linux distingue les groupes enregistrés dans /etc/group des groupes actifs dans votre session en cours. usermod écrit dans le fichier immédiatement, mais votre shell garde la liste chargée à l'ouverture de session.

Fenêtre de terminal
groups $USER

Résultat attendu : ... libvirt kvm ...

Résumé : libvirt a deux modes, system (serveurs) et session (desktop). Si virsh net-list est vide sans sudo, vous êtes probablement connecté à session au lieu de system.

Solution rapide (recommandée pour serveurs) :

Fenêtre de terminal
# Ajouter dans ~/.bashrc ou ~/.zshrc
export LIBVIRT_DEFAULT_URI="qemu:///system"
source ~/.bashrc

Vérification :

Fenêtre de terminal
virsh uri
# Doit afficher : qemu:///system

Plusieurs commandes permettent de confirmer que tout fonctionne.

C'est le test le plus simple, et son but n'est pas de voir des machines : il vérifie que virsh parvient à ouvrir la socket du service libvirt avec vos droits actuels. Une liste vide est donc un succès. L'échec, lui, se manifeste par un message de permission plutôt que par une absence de résultat.

Fenêtre de terminal
# Si LIBVIRT_DEFAULT_URI est configuré :
virsh list --all
# Sinon, précisez l'URI :
virsh -c qemu:///system list --all

Résultat attendu (installation fraîche) :

Id Name State
--------------------

Une liste vide est normale, vous n'avez pas encore créé de VM.

libvirt crée un réseau nommé default qui fournit du NAT et un serveur DHCP aux VMs via le pont virbr0. Sans lui, vos machines démarreront mais n'obtiendront aucune adresse IP. Trois colonnes comptent dans la sortie : State doit valoir active maintenant, Autostart doit valoir yes pour que le réseau revienne après un redémarrage, et Persistent confirme que la définition est écrite sur disque et non seulement en mémoire.

Fenêtre de terminal
virsh net-list --all

Résultat attendu :

Name State Autostart Persistent
--------------------------------------------
default active yes yes

Si le réseau default n'est pas actif (State = inactive) :

Fenêtre de terminal
virsh net-start default
virsh net-autostart default

Test 3 : Vérifier (et créer) le pool de stockage

Section intitulée « Test 3 : Vérifier (et créer) le pool de stockage »

Le pool default peut exister ou non selon votre distribution et méthode d'installation.

Fenêtre de terminal
virsh pool-list --all

Si le pool existe déjà (virt-manager l'a peut-être créé) :

Name State Autostart
-------------------------------
default active yes

Si le pool est absent (fréquent sur installation minimale) :

Créer le pool default :

Fenêtre de terminal
# Définir le pool (pointe vers /var/lib/libvirt/images/)
virsh pool-define-as default dir --target /var/lib/libvirt/images
# Créer le répertoire si nécessaire
sudo mkdir -p /var/lib/libvirt/images
# Démarrer et activer au boot
virsh pool-start default
virsh pool-autostart default

Vérification :

Fenêtre de terminal
virsh pool-list --all

Résultat attendu :

Name State Autostart
-------------------------------
default active yes

Le pool default pointe vers /var/lib/libvirt/images/.

virt-host-validate déroule une série de contrôles et affiche un verdict par ligne. C'est le seul test qui vérifie l'ensemble de la chaîne : matériel, module noyau, droits d'accès aux périphériques et contrôleurs cgroup. Lisez-le de haut en bas et arrêtez-vous à la première ligne FAIL, les suivantes en découlent souvent. La sortie réelle contient aussi des lignes préfixées LXC:, propres au pilote conteneur de libvirt, sans rapport avec vos machines virtuelles.

Fenêtre de terminal
virt-host-validate

Exemple de résultat :

QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for device assignment IOMMU support : WARN (...)
QEMU: Checking for secure guest support : WARN (...)

Ces cinq chemins sont ceux vers lesquels vous reviendrez à chaque incident. Deux méritent une attention particulière : /var/lib/libvirt/images/ est l'emplacement qui remplit le disque système si vous ne surveillez pas la taille des disques virtuels, et /var/log/libvirt/qemu/ contient un fichier de journal par machine virtuelle, c'est là que se trouve la vraie raison d'un démarrage qui échoue, pas dans journalctl.

CheminContenu
/etc/libvirt/Configuration libvirt
/etc/libvirt/qemu/Définitions XML des VMs
/var/lib/libvirt/images/Disques virtuels (pool default)
/run/libvirt/libvirt-sockSocket de communication
/var/log/libvirt/qemu/Logs des VMs

Trois des quatre lignes ci-dessous se ramènent à la même cause : le shell n'a pas rechargé vos groupes, ou virsh parle au mauvais service. Avant de chercher plus loin, exécutez id puis virsh uri : ces deux commandes éliminent la majorité des symptômes en dix secondes.

ErreurCause probableSolution
Permission denied sur socketGroupe libvirt non actifSe déconnecter/reconnecter ou newgrp libvirt
/dev/kvm n'existe pasVirtualisation désactivéeActiver VT-x/AMD-V dans le BIOS, puis modprobe kvm kvm_intel
virsh net-list videConnecté à qemu:///sessionUtiliser virsh -c qemu:///system ou configurer LIBVIRT_DEFAULT_URI
libvirtd inactif / n'existe pasService non démarré ou démons modulairessystemctl enable --now libvirtd ou activer les sockets modulaires
  1. Vérifier le CPU avec grep -Ec '(vmx|svm)' /proc/cpuinfo, doit être > 0

  2. Installer les paquets : qemu-kvm, libvirt-daemon-system, virtinst (Debian) ou @virtualization (RHEL)

  3. Activer libvirt : systemctl enable --now libvirtd (ou sockets modulaires sur distros récentes)

  4. Configurer les permissions : usermod -aG libvirt,kvm $USER puis se reconnecter

  5. Valider avec virt-host-validate, /dev/kvm doit être PASS

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn