Aller au contenu

KVM (Kernel Virtual Machine)

Points clés

  • KVM est un module du noyau Linux qui s'appuie sur les fonctionnalités de virtualisation matérielle du CPU (Intel VT-x ou AMD-V) pour fournir un accès direct à l'accélération de la virtualisation.
  • KVM fournit seulement les mécanismes bas-niveau pour exécuter des OS invités grâce aux extensions CPU (VT-x, AMD-V).
  • KVM expose une interface (/dev/kvm) exploitée par des programmes s'exécutant en espace utilisateur, souvent QEMU 1.

Pré-requis

kvm/check-support.sh diagnostique le support de KVM sur la machine : contexte d'exécution, extensions de virtualisation du CPU et accès à /dev/kvm.

curl -sS https://mborne.github.io/outils/kvm/check-support.sh | bash

Diagnostic uniquement

Ce script n'installe et ne modifie rien : chaque problème est signalé avec la commande à lancer. Les messages sont adaptés au contexte détecté (machine physique, machine virtuelle ou WSL2).

Le code de sortie vaut 0 si KVM est utilisable, 1 sinon. Les pré-requis de gestion des VM (libvirtd, virsh, virt-install) relèvent de la fiche libvirt.

Sous WSL, la virtualisation imbriquée requise par KVM se règle côté Windows dans %UserProfile%\.wslconfig et est active par défaut sur Windows 11. Voir WSL - Configuration si le diagnostic signale le contraire.

Installation

  • kvm/install.sh installe le paquet qemu-kvm pour activer la virtualisation KVM sur la machine locale :
curl -sS https://mborne.github.io/outils/kvm/install.sh | bash

Utilisation

Pré-requis : libvirt

kvm/install.sh installe uniquement qemu-kvm. Les commandes ci-dessous reposent sur virsh, virt-install et qemu-img, fournis par libvirt : installer d'abord libvirt/install.sh, qui ajoute aussi l'utilisateur au groupe libvirt.

Création d'une VM

ATTENTION

  • genisoimage et mkpasswd sont installés s'ils sont absent
  • Le dossier /var/lib/libvirt/disks est créé et utilisé pour le stockage des disques.

Le script kvm/create-ubuntu-server.sh illustre :

  • Le téléchargement d'une image ubuntu cloud
  • La copie sous forme d'un disque redimensionné avec qemu-img
  • La génération d'un disque cloud-init au format ISO avec genisoimage
  • Le démarrage de la VM à l'aide de virt-install
# Créer une VM node-1
curl -sS https://mborne.github.io/outils/kvm/create-ubuntu-server.sh | UBUNTU_PASSWORD=ChangeIt VM_NAME=node-1 bash

# Vérifier qu'elle est démarrée
virsh list

# Inspecter les fichiers
ls -lh /var/lib/libvirt/disks

# Se connecter
virsh console node-1

# Pour supprimer la VM :
virsh destroy node-1
virsh undefine node-1

# Pour supprimer ses données :
rm -rf /var/lib/libvirt/disks/node-1.*

Aller plus loin

Ressources


  1. L'accès se fait par des appels système ioctl(), chacun correspondant à une opération KVM (ex : KVM_CREATE_VM) documentée dans www.kernel.org - The Definitive KVM (Kernel-based Virtual Machine) API Documentation du noyau Linux. ↩