
Où sont stockés les disques de vos VMs ? Quel format choisir entre RAW et QCOW2 ? Ce guide explique le modèle de stockage libvirt : les pools (conteneurs) et les volumes (disques), pour que vous sachiez toujours où sont vos données.
| Concept | Ce que c’est | Exemple |
|---|---|---|
| Pool | Conteneur de disques | /var/lib/libvirt/images/ |
| Volume | Un disque individuel | ubuntu-test.qcow2 |
Prérequis
Section intitulée « Prérequis »- KVM/libvirt installé (guide installation)
LIBVIRT_DEFAULT_URIconfiguré pourqemu:///system
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- La différence entre storage pool et volume
- Les types de pools (directory, LVM, ZFS…)
- Choisir entre RAW et QCOW2
- Créer et gérer des pools et volumes avec virsh
Le modèle de stockage libvirt
Section intitulée « Le modèle de stockage libvirt »libvirt abstrait le stockage avec deux niveaux :
Pourquoi cette abstraction ?
- Uniformité : mêmes commandes quel que soit le backend (fichier, LVM, ZFS)
- Gestion : libvirt sait où trouver les disques, leur taille, leur disponibilité
- Portabilité : les VMs référencent des volumes, pas des chemins absolus
Types de pools
Section intitulée « Types de pools »| Type | Backend | Cas d’usage | Complexité |
|---|---|---|---|
| dir | Répertoire | Lab, homelab | ⭐ Simple |
| lvm | Volume Group LVM | Production, performance | ⭐⭐ Moyen |
| zfs | Dataset ZFS | NAS, snapshots natifs | ⭐⭐ Moyen |
| iscsi | Target iSCSI | SAN, datacenter | ⭐⭐⭐ Avancé |
| nfs | Partage NFS | Stockage partagé | ⭐⭐ Moyen |
Le pool “default”
Section intitulée « Le pool “default” »Après installation de libvirt, le pool default pointe vers /var/lib/libvirt/images/.
Vérifier le pool default
Section intitulée « Vérifier le pool default »virsh pool-list --allSortie réelle :
Name State Autostart------------------------------- default active yesVoir les détails
Section intitulée « Voir les détails »virsh pool-info defaultSortie réelle :
Name: defaultUUID: 20e70471-c81e-484a-9b5f-dac1e4c856a5State: runningPersistent: yesAutostart: yesCapacity: 294,73 GiBAllocation: 177,23 GiBAvailable: 117,50 GiBDécryptage :
| Champ | Signification |
|---|---|
| State: running | Le pool est actif et utilisable |
| Persistent: yes | Défini de façon permanente |
| Autostart: yes | Démarre automatiquement au boot |
| Capacity | Taille totale du stockage |
| Allocation | Espace utilisé |
| Available | Espace libre |
Voir la configuration XML
Section intitulée « Voir la configuration XML »virsh pool-dumpxml defaultSortie réelle :
<pool type='dir'> <name>default</name> <uuid>20e70471-c81e-484a-9b5f-dac1e4c856a5</uuid> <capacity unit='bytes'>316464824320</capacity> <allocation unit='bytes'>190303780864</allocation> <available unit='bytes'>126161043456</available> <source> </source> <target> <path>/var/lib/libvirt/images</path> <permissions> <mode>0711</mode> <owner>0</owner> <group>0</group> </permissions> </target></pool>Points clés :
type='dir': pool de type répertoire<path>/var/lib/libvirt/images</path>: emplacement des fichiers disque
Créer un pool personnalisé
Section intitulée « Créer un pool personnalisé »Pool de type directory
Section intitulée « Pool de type directory »Pour stocker les VMs ailleurs (par exemple sur un disque dédié) :
-
Créer le répertoire
Fenêtre de terminal sudo mkdir -p /data/vmssudo chown root:root /data/vmssudo chmod 711 /data/vms -
Définir le pool
Fenêtre de terminal virsh pool-define-as vms dir --target /data/vmsSortie :
Pool vms defined -
Construire le pool (initialise le répertoire si nécessaire)
Fenêtre de terminal virsh pool-build vms -
Démarrer le pool
Fenêtre de terminal virsh pool-start vms -
Activer le démarrage automatique
Fenêtre de terminal virsh pool-autostart vms -
Vérifier
Fenêtre de terminal virsh pool-list --allName State Autostart-------------------------------default active yesvms active yes
Pool de type LVM
Section intitulée « Pool de type LVM »Pour utiliser un Volume Group LVM existant :
# Supposons un VG nommé "vg_vms"virsh pool-define-as lvm-pool logical --source-name vg_vms --target /dev/vg_vmsvirsh pool-start lvm-poolvirsh pool-autostart lvm-poolFormats de disque : RAW vs QCOW2
Section intitulée « Formats de disque : RAW vs QCOW2 »| Format | Avantages | Inconvénients | Cas d’usage |
|---|---|---|---|
| RAW | Performance maximale, simple | Pas de snapshots, taille fixe | Production I/O intensif |
| QCOW2 | Snapshots, thin provisioning, compression | Légère overhead | Lab, dev, la plupart des cas |
- Fichier = image bit-à-bit du disque
- Taille du fichier = taille du disque (pas de thin provisioning par défaut)
- Aucune fonctionnalité avancée
QCOW2 (QEMU Copy-On-Write v2)
Section intitulée « QCOW2 (QEMU Copy-On-Write v2) »- Thin provisioning : le fichier grandit à la demande
- Snapshots : points de sauvegarde intégrés
- Compression : optionnelle, réduit l’espace
- Chiffrement : support natif (LUKS)
- Backing files : chaînage pour les clones
Voir les informations d’un disque
Section intitulée « Voir les informations d’un disque »qemu-img info /chemin/vers/disque.qcow2Exemple de sortie :
image: ubuntu-test.qcow2file format: qcow2virtual size: 20 GiB (21474836480 bytes)disk size: 2.1 GiBcluster_size: 65536Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: falseDécryptage :
| Champ | Signification |
|---|---|
| virtual size | Taille vue par la VM (20 GiB) |
| disk size | Espace réellement utilisé sur le disque (2.1 GiB) |
| cluster_size | Taille des blocs d’allocation |
| compat: 1.1 | Version du format QCOW2 |
Le ratio disk size / virtual size montre le thin provisioning en action.
Gérer les volumes
Section intitulée « Gérer les volumes »Lister les volumes d’un pool
Section intitulée « Lister les volumes d’un pool »virsh vol-list defaultSortie exemple (pool avec des VMs) :
Name Path----------------------------------------------------- ubuntu-test.qcow2 /var/lib/libvirt/images/ubuntu-test.qcow2 debian-srv.qcow2 /var/lib/libvirt/images/debian-srv.qcow2Créer un volume
Section intitulée « Créer un volume »virsh vol-create-as default test-disk.qcow2 10G --format qcow2Options :
| Paramètre | Signification |
|---|---|
default | Nom du pool |
test-disk.qcow2 | Nom du volume |
10G | Taille (G = GiB) |
--format qcow2 | Format du disque |
Voir les informations d’un volume
Section intitulée « Voir les informations d’un volume »virsh vol-info test-disk.qcow2 --pool defaultSupprimer un volume
Section intitulée « Supprimer un volume »virsh vol-delete test-disk.qcow2 --pool defaultRedimensionner un volume
Section intitulée « Redimensionner un volume »Pour agrandir un disque QCOW2 :
# Avec qemu-img (VM arrêtée)qemu-img resize /var/lib/libvirt/images/vm.qcow2 +10G
# Ou avec virshvirsh vol-resize vm.qcow2 30G --pool defaultEmplacements des fichiers
Section intitulée « Emplacements des fichiers »| Fichier | Emplacement | Contenu |
|---|---|---|
| Définitions des pools | /etc/libvirt/storage/ | XML des pools |
| Pool default | /var/lib/libvirt/images/ | Disques des VMs |
| Définitions des VMs | /etc/libvirt/qemu/ | XML des domains |
# Voir les définitions de poolsls /etc/libvirt/storage/
# Sortie :# autostart/# default.xmlCommandes virsh essentielles
Section intitulée « Commandes virsh essentielles »| Commande | Description |
|---|---|
virsh pool-list --all | Lister tous les pools |
virsh pool-list --details | Lister avec capacité/allocation |
virsh pool-info <pool> | Détails d’un pool |
virsh pool-dumpxml <pool> | Configuration XML |
virsh pool-define-as <nom> <type> --target <path> | Créer un pool |
virsh pool-start <pool> | Démarrer |
virsh pool-autostart <pool> | Activer au boot |
virsh pool-destroy <pool> | Arrêter |
virsh pool-undefine <pool> | Supprimer la définition |
virsh pool-refresh <pool> | Rafraîchir (rescan) |
| Commande | Description |
|---|---|
virsh vol-list <pool> | Lister les volumes |
virsh vol-info <vol> --pool <pool> | Infos d’un volume |
virsh vol-create-as <pool> <nom> <taille> --format <fmt> | Créer |
virsh vol-delete <vol> --pool <pool> | Supprimer |
virsh vol-resize <vol> <taille> --pool <pool> | Redimensionner |
virsh vol-clone <src> <dst> --pool <pool> | Cloner |
qemu-img
Section intitulée « qemu-img »| Commande | Description |
|---|---|
qemu-img info <fichier> | Informations du disque |
qemu-img create -f qcow2 <fichier> <taille> | Créer un disque |
qemu-img resize <fichier> +10G | Agrandir |
qemu-img convert -O qcow2 <src> <dst> | Convertir le format |
Erreurs fréquentes
Section intitulée « Erreurs fréquentes »| Erreur | Cause | Solution |
|---|---|---|
Pool not found | Pool inexistant ou pas démarré | virsh pool-list --all, virsh pool-start |
Vol not found | Volume inexistant | virsh vol-list <pool> |
Permission denied | Droits insuffisants sur le répertoire | Vérifier permissions (chmod 711) |
Not enough space | Pool plein | Libérer de l’espace ou utiliser un autre pool |
Volume is in use | VM utilise le disque | Arrêter la VM avant suppression |
Checklist stockage
Section intitulée « Checklist stockage »- Pool
defaultactif et autostart (virsh pool-list --all) - Espace suffisant disponible (
virsh pool-info default) - Format QCOW2 pour la plupart des VMs
- Permissions correctes sur le répertoire du pool
- Sauvegardes des disques importants planifiées
À retenir
Section intitulée « À retenir »-
Pool = conteneur de disques (répertoire, LVM, ZFS…). Volume = un disque individuel.
-
Le pool default (
/var/lib/libvirt/images/) suffit pour débuter. -
QCOW2 = le format recommandé (thin provisioning, snapshots). RAW = performance max mais pas de fonctionnalités.
-
virsh pool-*pour gérer les pools,virsh vol-*pour les volumes. -
qemu-img infopour voir les vraies infos d’un disque (taille virtuelle vs réelle). -
Redimensionner le fichier disque ≠ étendre le filesystem (à faire dans la VM).
Prochaines étapes
Section intitulée « Prochaines étapes »Références
Section intitulée « Références »- libvirt - Storage Management — Documentation officielle des pools
- libvirt - Storage Pool XML — Format XML des pools
- QEMU - QCOW2 — Documentation du format QCOW2
- Red Hat - Managing storage — Guide officiel RHEL