KVM & Libvirt Virtualization
Virtualisation native Linux avec KVM et gestion via Libvirt.
Architecture KVM

Les Briques de la Virtualisation
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Applications โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ virt-manager (GUI) โ
โ virsh (CLI) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Libvirt โ
โ (API de gestion unifiรฉe) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ QEMU โ
โ (รmulation matรฉrielle) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ KVM โ
โ (Module Kernel) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Linux Kernel โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ CPU (Intel VT-x / AMD-V) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Composant | Rรดle | Type |
|---|---|---|
| KVM | Module kernel qui transforme Linux en hyperviseur Type 1 | Kernel module |
| QEMU | รmule le matรฉriel virtuel (disques, cartes rรฉseau, USB) | Userspace |
| Libvirt | API et dรฉmon de gestion unifiรฉ | Service/API |
| virsh | CLI pour piloter Libvirt | Outil |
| virt-manager | Interface graphique | GUI |
Hyperviseur Type 1 vs Type 2
| Type | Description | Exemples |
|---|---|---|
| Type 1 (Bare-metal) | Directement sur le hardware | KVM, VMware ESXi, Hyper-V |
| Type 2 (Hosted) | Sur un OS hรดte | VirtualBox, VMware Workstation |
KVM est un Type 1 car le module s'intรจgre directement dans le kernel Linux.
Installation & Validation
Vรฉrification CPU
# Vรฉrifier le support de virtualisation hardware
egrep -c '(vmx|svm)' /proc/cpuinfo
# vmx = Intel VT-x
# svm = AMD-V
# Rรฉsultat > 0 = OK
Rรฉsultat = 0 ?
- Vรฉrifier que la virtualisation est activรฉe dans le BIOS/UEFI
- Sur une VM imbriquรฉe, activer "Nested Virtualization"
Installation des Paquets
# Debian/Ubuntu
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst
# RHEL/CentOS
sudo dnf install qemu-kvm libvirt virt-install bridge-utils
# Ajouter l'utilisateur au groupe libvirt
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
# Relogin pour appliquer les groupes
newgrp libvirt
| Paquet | Description |
|---|---|
qemu-kvm |
QEMU avec support KVM |
libvirt-daemon-system |
Dรฉmon Libvirt |
libvirt-clients |
Outils CLI (virsh) |
bridge-utils |
Gestion des bridges rรฉseau |
virtinst |
virt-install pour crรฉer des VMs |
Validation
# Dรฉmarrer et activer libvirtd
sudo systemctl enable --now libvirtd
# Vรฉrifier que KVM est chargรฉ
lsmod | grep kvm
# kvm_intel (ou kvm_amd)
# kvm
# Vรฉrifier libvirt
virsh list --all
# Output (vide au dรฉbut):
# Id Name State
# ----------------------
# Vรฉrifier la connexion
virsh uri
# qemu:///system
Virsh Cheatsheet
Crรฉer une VM (virt-install)
# Crรฉation avec ISO
virt-install \
--name ubuntu-server \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/ubuntu.qcow2,size=20 \
--os-variant ubuntu22.04 \
--network network=default \
--graphics vnc \
--cdrom /path/to/ubuntu-22.04.iso
# Crรฉation depuis image cloud (cloud-init)
virt-install \
--name vm1 \
--ram 2048 \
--vcpus 2 \
--import \
--disk /var/lib/libvirt/images/vm1.qcow2 \
--os-variant ubuntu22.04 \
--network network=default \
--noautoconsole
# Lister les OS variants disponibles
osinfo-query os | grep ubuntu
Gestion du Cycle de Vie
# Lister toutes les VMs
virsh list --all
# Dรฉmarrer une VM
virsh start vm1
# Arrรชt propre (ACPI - comme appuyer sur le bouton power)
virsh shutdown vm1
# Arrรชt forcรฉ (comme dรฉbrancher la prise)
virsh destroy vm1
# Redรฉmarrer
virsh reboot vm1
# Suspendre / Reprendre
virsh suspend vm1
virsh resume vm1
# Autostart au boot de l'hรดte
virsh autostart vm1
virsh autostart --disable vm1
| Commande | Action | รquivalent physique |
|---|---|---|
shutdown |
Arrรชt ACPI propre | Appuyer sur le bouton power |
destroy |
Arrรชt immรฉdiat | Dรฉbrancher la prise |
reboot |
Redรฉmarrage ACPI | Ctrl+Alt+Del |
Informations et Console
# Infos dรฉtaillรฉes
virsh dominfo vm1
# Configuration XML
virsh dumpxml vm1
# Statistiques CPU/Mรฉmoire
virsh domstats vm1
# Console sรฉrie (Ctrl+] pour quitter)
virsh console vm1
# Adresse IP (si qemu-guest-agent installรฉ)
virsh domifaddr vm1
Snapshots
# Crรฉer un snapshot
virsh snapshot-create-as vm1 snap1 "Before upgrade"
# Lister les snapshots
virsh snapshot-list vm1
# Infos sur un snapshot
virsh snapshot-info vm1 snap1
# Revenir ร un snapshot
virsh snapshot-revert vm1 snap1
# Supprimer un snapshot
virsh snapshot-delete vm1 snap1
Snapshots et format de disque
Les snapshots nรฉcessitent le format qcow2. Les disques raw ne supportent pas les snapshots internes.
Modification ร Chaud
# Ajouter de la RAM (si maxMemory configurรฉ)
virsh setmem vm1 4G --live
# Ajouter un vCPU (si maxVcpus configurรฉ)
virsh setvcpus vm1 4 --live
# Attacher un disque
virsh attach-disk vm1 /path/to/disk.qcow2 vdb --live
# Dรฉtacher un disque
virsh detach-disk vm1 vdb --live
Supprimer une VM
# Arrรชter si nรฉcessaire
virsh destroy vm1
# Supprimer la dรฉfinition
virsh undefine vm1
# Supprimer avec les volumes associรฉs
virsh undefine vm1 --remove-all-storage
# Supprimer avec snapshots
virsh undefine vm1 --snapshots-metadata
Rรฉseau & Stockage
Modes Rรฉseau
Default NAT (Par dรฉfaut)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Internet โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโดโโโโโโโโโโ
โ Hรดte Linux โ
โ (192.168.1.10) โ
โโโโโโโโโโโฌโโโโโโโโโโ
โ NAT (virbr0)
โโโโโโโโโโโดโโโโโโโโโโ
โ 192.168.122.0/24 โ
โโโโโโโโโดโโโโโโโโฌโโโโโโโโโโโโดโโโโโโโโ
โ โ โ
โโโโดโโโ โโโโดโโโ โโโโดโโโ
โ VM1 โ โ VM2 โ โ VM3 โ
โ.101 โ โ.102 โ โ.103 โ
โโโโโโโ โโโโโโโ โโโโโโโ
- VMs accรจdent ร Internet via NAT
- VMs non accessibles directement depuis l'extรฉrieur
- Idรฉal pour le dรฉveloppement
# Voir les rรฉseaux
virsh net-list --all
# Dรฉtails du rรฉseau default
virsh net-info default
virsh net-dumpxml default
Bridge Public
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Internet โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโดโโโโโโโโโโ
โ Switch โ
โ 192.168.1.0/24 โ
โโโโโโโโโโโฌโโโโโโโโโโ
โ br0
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโ
โ โ โ
โโโโดโโโ โโโโดโโโ โโโโดโโโ
โHรดte โ โ VM1 โ โ VM2 โ
โ .10 โ โ .20 โ โ .21 โ
โโโโโโโ โโโโโโโ โโโโโโโ
- VMs ont une IP sur le rรฉseau physique
- VMs accessibles directement
- Idรฉal pour la production
# Crรฉer un bridge (Netplan)
# /etc/netplan/00-bridge.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: false
bridges:
br0:
interfaces: [eth0]
dhcp4: true
# ou addresses: [192.168.1.10/24]
Stockage
Formats de Disque
| Format | Avantages | Inconvรฉnients | Usage |
|---|---|---|---|
| qcow2 | Snapshots, thin provisioning, compression | Lรฉgรจrement plus lent | Recommandรฉ |
| raw | Performances maximales | Taille fixe, pas de snapshot | I/O intensif |
# Crรฉer un disque qcow2
qemu-img create -f qcow2 disk.qcow2 20G
# Crรฉer un disque raw
qemu-img create -f raw disk.raw 20G
# Convertir raw โ qcow2
qemu-img convert -f raw -O qcow2 disk.raw disk.qcow2
# Infos sur un disque
qemu-img info disk.qcow2
# Redimensionner
qemu-img resize disk.qcow2 +10G
Pools de Stockage
# Lister les pools
virsh pool-list --all
# Pool par dรฉfaut
ls /var/lib/libvirt/images/
# Lister les volumes d'un pool
virsh vol-list default
# Crรฉer un volume
virsh vol-create-as default newdisk.qcow2 20G --format qcow2
Rรฉfรฉrence Rapide
# === INSTALLATION ===
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virtinst
sudo usermod -aG libvirt,kvm $USER
# === VรRIFICATION ===
egrep -c '(vmx|svm)' /proc/cpuinfo # Support CPU
virsh list --all # Liste VMs
# === CYCLE DE VIE ===
virsh start vm1 # Dรฉmarrer
virsh shutdown vm1 # Arrรชt propre
virsh destroy vm1 # Arrรชt forcรฉ
virsh reboot vm1 # Redรฉmarrer
# === SNAPSHOTS ===
virsh snapshot-create-as vm1 snap1 "Description"
virsh snapshot-list vm1
virsh snapshot-revert vm1 snap1
# === INFO ===
virsh dominfo vm1 # Infos
virsh console vm1 # Console (Ctrl+] quit)
# === RรSEAU ===
virsh net-list --all # Rรฉseaux
# === STOCKAGE ===
qemu-img create -f qcow2 disk.qcow2 20G
qemu-img info disk.qcow2