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-kvmpour 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/disksest 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¶
- documentation.ubuntu.com - Virtualization with KVM
- blog.stephane-robert.info - Installez KVM/Libvirt sur Linux
- phoenixnap.com - How to Install KVM on Ubuntu 20.04
- computingforgeeks.com - Install KVM Hypervisor on Ubuntu 22.04|20.04
- www.cyberciti.biz - Linux Find Out If CPU Support Intel VT/AMD-V Virtualization For KVM
-
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. ↩