Aller au contenu
Virtualisation medium

virsh : les 15 commandes essentielles pour gérer vos VMs KVM

16 min de lecture

Logo KVM

virsh est l’outil CLI standard pour piloter libvirt — il gère les VMs (domains), les réseaux virtuels et le stockage. Ces 15 commandes couvrent les opérations quotidiennes les plus fréquentes sur vos VMs KVM.

CompétenceCommandes clés
Voir l’état des VMslist, dominfo, domstate
Contrôler le cycle de viestart, shutdown, destroy, reboot
Diagnostiquer une VMdomifaddr, domblklist, domiflist
Configurer une VMedit, dumpxml, autostart
Gérer réseau et stockagenet-*, pool-*, vol-*

Ce guide suppose que vous avez :

🧠 Modèle mental — Comment fonctionne virsh

virsh = Interface CLI pour libvirt → Gérer VMs, réseaux, stockage

Modèle mental virsh : Commande (list, start, dominfo) → Cible (domain=VM, network, pool) → Résultat (état, config, action)

Points clés

  • virsh gère 3 types de ressources : domains (VMs), networks, storage pools
  • Un "domain" = une VM dans le vocabulaire libvirt
  • Les commandes dom* concernent les VMs (dominfo, domstate, domblklist...)
  • Les commandes net-* concernent les réseaux (net-list, net-info...)
  • Les commandes pool-*/vol-* concernent le stockage
  • --all affiche aussi les ressources arrêtées (sinon : actives uniquement)

Règles d'or

1
Toujours vérifier l'état avant d'agir virsh list --all montre l'état de toutes les VMs. Ne pas démarrer une VM déjà running.
2
shutdown > destroy shutdown = arrêt propre (ACPI). destroy = couper le courant. Privilégier shutdown.
3
dumpxml pour comprendre, edit pour modifier dumpxml montre la config complète. edit ouvre l'éditeur pour modifier.

Vocabulaire essentiel

domain
Une VM dans le vocabulaire libvirt
pool
Conteneur de stockage (répertoire, LVM, ZFS...)
volume
Un disque individuel dans un pool
network
Réseau virtuel (NAT, bridge...)
running
VM en cours d'exécution
shut off
VM arrêtée
📚 Pour aller plus loin — 6 options avancées
paused
VM suspendue (gelée en mémoire)
persistent
VM définie de façon permanente
transient
VM temporaire (disparaît à l'arrêt)
autostart
Démarrage automatique au boot de l'hôte
vCPU
CPU virtuel assigné à la VM
vNIC
Interface réseau virtuelle

Pensez à virsh comme un chef d’orchestre :

ÉlémentAnalogievirsh
MusiciensLes VMsdomains
PartitionsLa config de chaque VMdumpxml
”Commencez !”Démarrerstart
”Stop !”Arrêtershutdown
”Comment ça va ?”Étatdominfo
”Pause”Suspendresuspend

Le chef ne joue pas lui-même — il coordonne. virsh ne fait pas tourner les VMs, il parle à libvirt qui lui-même pilote QEMU/KVM.

Architecture virsh : commandes CLI → démons libvirt → processus QEMU → module KVM

Terme libvirtSignificationÉquivalent courant
domainMachine virtuelleVM
poolConteneur de stockageDossier ou LV
volumeDisque dans un poolFichier qcow2
networkRéseau virtuelBridge ou NAT
runningVM en coursAllumée
shut offVM arrêtéeÉteinte
pausedVM suspendueGelée en RAM

Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.

Lister toutes les VMs Base

Voir l'état de toutes les VMs (actives et arrêtées).

virsh list --all
Formule virsh list --all
Exemple
virsh list --all
Paramètres
  • --all — Inclut les VMs arrêtées
  • (sans option) — Uniquement les VMs running
Informations complètes d'une VM Base

Afficher CPU, RAM, état, UUID d'une VM.

virsh dominfo ubuntu-cloud
Formule virsh dominfo <vm>
Exemple
virsh dominfo ubuntu-cloud
Paramètres
  • <vm> — Nom ou ID de la VM
Démarrer / Arrêter une VM Base

Contrôler le cycle de vie d'une VM.

virsh shutdown ubuntu-cloud
Formule virsh start|shutdown|destroy|reboot <vm>
Exemple
virsh shutdown ubuntu-cloud
Paramètres
  • start — Démarrer la VM
  • shutdown — Arrêt propre (ACPI)
  • destroy — Arrêt forcé (couper le courant)
  • reboot — Redémarrer
Accéder à la console Base

Se connecter au terminal de la VM.

virsh console ubuntu-cloud
Formule virsh console <vm>
Exemple
virsh console ubuntu-cloud
Paramètres
  • <vm> — Nom de la VM
  • Ctrl+] — Pour sortir de la console
Obtenir l'IP d'une VM Base

Afficher l'adresse IP d'une VM.

virsh domifaddr ubuntu-cloud
Formule virsh domifaddr <vm>
Exemple
virsh domifaddr ubuntu-cloud
Paramètres
  • <vm> — Nom de la VM
  • --source agent — Via qemu-guest-agent (plus précis)
Démarrage automatique Base

Configurer une VM pour démarrer au boot de l'hôte.

virsh autostart ubuntu-cloud
Formule virsh autostart [--disable] <vm>
Exemple
virsh autostart ubuntu-cloud
Paramètres
  • <vm> — Nom de la VM
  • --disable — Désactiver l'autostart
Exporter la configuration XML Inter.

Afficher la configuration complète d'une VM.

virsh dumpxml ubuntu-cloud > ubuntu-cloud.xml
Formule virsh dumpxml <vm>
Exemple
virsh dumpxml ubuntu-cloud > ubuntu-cloud.xml
Paramètres
  • <vm> — Nom de la VM
  • > fichier.xml — Rediriger vers un fichier (sauvegarde)
Modifier la configuration Inter.

Éditer le XML d'une VM dans l'éditeur.

virsh edit ubuntu-cloud
Formule virsh edit <vm>
Exemple
virsh edit ubuntu-cloud
Paramètres
  • <vm> — Nom de la VM
  • EDITOR=vim — Choisir l'éditeur

La commande de base pour voir l’état de vos VMs :

Lister toutes les VMs
virsh list --all
Sortie typique
Id Name State
------------------------------
2 ubuntu-cloud running
- ubuntu-test shut off
- ubuntu-uefi shut off

Décryptage :

ColonneSignification
IdNuméro d’instance (uniquement si running)
NameNom de la VM (utilisé dans toutes les commandes)
Staterunning, shut off, paused, crashed

Pour diagnostiquer une VM, dominfo donne une vue synthétique :

Informations complètes
virsh dominfo ubuntu-cloud
Sortie typique
Id: 2
Name: ubuntu-cloud
UUID: 7e4a6b3c-9d8e-4f5a-b2c1-d3e4f5a6b7c8
OS Type: hvm
State: running
CPU(s): 2
CPU time: 45.3s
Max memory: 2097152 KiB
Used memory: 2097152 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: apparmor
Security DOI: 0
Security label: libvirt-7e4a6b3c-...,enforce

Décryptage :

ChampSignification
IdNuméro d’instance (- si arrêtée)
StateÉtat actuel
CPU(s)Nombre de vCPU
Max memoryRAM allouée (en KiB)
Persistentyes = VM définie, no = transient
AutostartDémarre au boot de l’hôte

Les 4 commandes pour contrôler une VM :

Fenêtre de terminal
virsh start ubuntu-cloud
Domain 'ubuntu-cloud' started

Question fréquente : “Comment je SSH sur ma VM ?”

domifaddr dispose de trois sources différentes, selon votre configuration :

Le plus fiable si réseau libvirt + DHCP
virsh domifaddr ubuntu-cloud --source lease
Sortie typique
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet1 52:54:00:49:47:a3 ipv4 192.168.122.91/24

Fonctionne si la VM utilise un réseau libvirt avec DHCP (réseau default).

Alternative : interroger dnsmasq directement

Baux DHCP du réseau libvirt
virsh net-dhcp-leases default
Sortie typique
Expiry Time MAC address Protocol IP address Hostname
-----------------------------------------------------------------------------------
2024-01-15 14:32:45 52:54:00:49:47:a3 ipv4 192.168.122.91/24 ubuntu-cloud

Suspendre une VM la “gèle” en mémoire (économise CPU) :

Suspendre
virsh suspend ubuntu-cloud
Domain 'ubuntu-cloud' suspended
Vérifier l'état
virsh domstate ubuntu-cloud
paused
Reprendre
virsh resume ubuntu-cloud
Domain 'ubuntu-cloud' resumed

Pour diagnostiquer ou vérifier la configuration :

Fenêtre de terminal
virsh domblklist ubuntu-cloud
Target Source
-------------------------------------------------
vda /var/lib/libvirt/images/ubuntu-cloud.qcow2
sda /var/lib/libvirt/images/seed.iso

Sauvegarder la configuration XML (pour clonage ou backup) :

Exporter vers fichier
virsh dumpxml ubuntu-cloud > ubuntu-cloud-backup.xml
Créer une VM depuis un XML
virsh define ubuntu-cloud-backup.xml

Pour changer CPU, RAM, ou autres paramètres :

Éditer la config
virsh edit ubuntu-cloud

Cela ouvre l’éditeur par défaut avec le XML de la VM.

Exemple : augmenter la RAM de 2Go à 4Go

Dans le XML, trouvez :

<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>

Changez en :

<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>

Puis redémarrez la VM.

Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.

destroy ≠ supprimer

virsh destroy ubuntu-cloud pour "supprimer" la VM

Danger
Le piège : virsh destroy ubuntu-cloud pour "supprimer" la VM
Symptôme : J'ai utilisé destroy mais la VM est toujours là
Cause : destroy = arrêt forcé (couper le courant), pas suppression
Correction : Utiliser undefine pour supprimer la définition de la VM
virsh undefine ubuntu-cloud --remove-all-storage
VMs invisibles sans --all

virsh list — ma VM n'apparaît pas

Attention
Le piège : virsh list — ma VM n'apparaît pas
Symptôme : La liste des VMs est vide ou incomplète
Cause : Par défaut, list montre uniquement les VMs running
Correction : Toujours utiliser --all pour voir les VMs arrêtées
virsh list --all
session vs system

VMs différentes avec et sans sudo

Attention
Le piège : VMs différentes avec et sans sudo
Symptôme : Mes VMs apparaissent/disparaissent selon que j'utilise sudo
Cause : qemu:///session (user) et qemu:///system (root) sont deux mondes séparés
Correction : Configurer LIBVIRT_DEFAULT_URI pour utiliser system par défaut
export LIBVIRT_DEFAULT_URI="qemu:///system"
edit sur VM running

virsh edit ubuntu-cloud — les changements ne s'appliquent pas

Attention
Le piège : virsh edit ubuntu-cloud — les changements ne s'appliquent pas
Symptôme : J'ai modifié la config mais la VM utilise toujours les anciennes valeurs
Cause : virsh edit modifie la config persistante, pas la VM en cours
Correction : Redémarrer la VM pour appliquer les changements
virsh shutdown ubuntu-cloud && virsh start ubuntu-cloud
shutdown qui ne répond pas

virsh shutdown ubuntu-cloud — rien ne se passe

Info
Le piège : virsh shutdown ubuntu-cloud — rien ne se passe
Symptôme : La VM reste running malgré la commande shutdown
Cause : shutdown envoie un signal ACPI, si la VM ne le gère pas, rien ne se passe
Correction : Installer acpid dans la VM, ou utiliser destroy en dernier recours
virsh destroy ubuntu-cloud
domifaddr ne montre pas d'IP

virsh domifaddr ubuntu-cloud — table vide

Info
Le piège : virsh domifaddr ubuntu-cloud — table vide
Symptôme : Aucune adresse IP affichée pour la VM
Cause : domifaddr nécessite qemu-guest-agent ou un bail DHCP actif
Correction : Utiliser net-dhcp-leases ou attendre que la VM ait obtenu son IP
virsh net-dhcp-leases default
❌ Ce que beaucoup croient
virsh destroy ubuntu-cloud # "Je supprime la VM"
✅ Ce qui se passe vraiment
virsh destroy ubuntu-cloud # Arrêt forcé (VM toujours définie)
virsh undefine ubuntu-cloud # Supprime uniquement la définition XML
# Les disques restent sur le système !

Pour supprimer complètement une VM :

Suppression complète (définition + disques)
# D'abord, vérifier les volumes attachés
virsh domblklist ubuntu-cloud
# Suppression avec les volumes (IRRÉVERSIBLE)
virsh undefine ubuntu-cloud --remove-all-storage
Symptôme : VMs différentes selon sudo
virsh list --all # Montre VM-A
sudo virsh list --all # Montre VM-B, VM-C

Explication : libvirt a deux “mondes” séparés :

  • qemu:///session — VMs de l’utilisateur (sans sudo, stockées dans ~/.local/share/libvirt)
  • qemu:///system — VMs système (avec sudo, dans /var/lib/libvirt)

Solution 1 (explicite, recommandée) : spécifier l’URI à chaque commande

Toujours savoir où on travaille
virsh -c qemu:///system list --all # VMs système
virsh -c qemu:///session list --all # VMs utilisateur

Solution 2 (par défaut) : configurer l’URI une fois

~/.bashrc ou ~/.zshrc
export LIBVIRT_DEFAULT_URI="qemu:///system"
Fenêtre de terminal
virsh shutdown ubuntu-cloud
# ... rien ne se passe, la VM reste running

Cause : shutdown envoie un signal ACPI. Si la VM n’a pas de support ACPI ou si le système invité l’ignore, rien ne se passe.

Solutions :

  1. Attendre 30 secondes (le guest peut être lent)
  2. Vérifier que le package acpid est installé dans la VM
  3. En dernier recours : virsh destroy

Pour diagnostiquer un problème libvirt, consultez les logs des démons. Selon votre distribution, libvirt utilise soit le démon monolithique (libvirtd), soit des démons modulaires.

Vérifier l'état des services
systemctl status virtqemud virtnetworkd virtstoraged
Logs en temps réel
# Problèmes de VMs (QEMU)
journalctl -u virtqemud -f
# Problèmes de réseau virtuel
journalctl -u virtnetworkd -f
# Problèmes de stockage/pools
journalctl -u virtstoraged -f

Fichiers de logs additionnels :

FichierContenu
/var/log/libvirt/qemu/<vm>.logLogs QEMU de chaque VM
/var/log/libvirt/libvirtd.logLog principal (si activé)

Trois micro-exercices pour valider vos acquis :

  1. Lister et identifier — Trouvez toutes vos VMs et leur état.

    Fenêtre de terminal
    virsh list --all
    virsh dominfo <nom-vm>

    ✓ Vous devez voir l’état (running/shut off) et la RAM allouée.

  2. Cycle de vie — Démarrez, arrêtez proprement, redémarrez.

    Fenêtre de terminal
    virsh start <nom-vm>
    virsh shutdown <nom-vm> # Attendre l'arrêt
    virsh start <nom-vm>

    ✓ La VM répond à shutdown ? Si non, vérifiez acpid dans la VM.

  3. Trouver l’IP — Testez les différentes sources.

    Fenêtre de terminal
    virsh domifaddr <nom-vm> --source lease
    virsh net-dhcp-leases default

    ✓ Vous avez une IP ? Testez ssh user@<ip> pour confirmer.

📋 Cheatsheet virsh

📝 Syntaxe :

virsh list --all Lister toutes les VMs
virsh dominfo <vm> Infos complètes d'une VM
virsh domstate <vm> État uniquement

🚀 Commandes types :

Lister toutes les VMs Voir l'état de toutes les VMs (actives et arrêtées).
virsh list --all
Informations complètes d'une VM Afficher CPU, RAM, état, UUID d'une VM.
virsh dominfo ubuntu-cloud
Démarrer / Arrêter une VM Contrôler le cycle de vie d'une VM.
virsh shutdown ubuntu-cloud
Accéder à la console Se connecter au terminal de la VM.
virsh console ubuntu-cloud
Obtenir l'IP d'une VM Afficher l'adresse IP d'une VM.
virsh domifaddr ubuntu-cloud

⚙️ Options

virsh domifaddr <vm> Adresse IP virsh domifaddr ubuntu-cloud
virsh domblklist <vm> Disques attachés virsh domblklist ubuntu-cloud
virsh domiflist <vm> Interfaces réseau virsh domiflist ubuntu-cloud

🔍 Filtres

virsh net-list --all Lister les réseaux virsh net-list --all
virsh net-dhcp-leases <net> Baux DHCP virsh net-dhcp-leases default
virsh net-info <net> Info réseau virsh net-info default
virsh pool-list --all Lister les pools virsh pool-list --all
virsh vol-list <pool> Lister les volumes virsh vol-list default
virsh pool-info <pool> Info pool virsh pool-info default

⚡ Actions

virsh dumpxml <vm> Afficher la config XML virsh dumpxml ubuntu-cloud
virsh edit <vm> Éditer la config virsh edit ubuntu-cloud
virsh autostart <vm> Activer autostart virsh autostart ubuntu-cloud
virsh autostart --disable <vm> Désactiver autostart virsh autostart --disable ubuntu-cloud
virsh define <fichier.xml> Créer depuis XML virsh define ubuntu.xml
virsh undefine <vm> Supprimer la définition virsh undefine ubuntu-cloud
CommandeDescription
virsh vcpuinfo <vm>Détails des vCPU (affinité, temps CPU)
virsh domtime <vm>Horloge de la VM (requiert guest-agent)
virsh dommemstat <vm>Statistiques mémoire détaillées
CommandeRisqueGuide
migratePerte de données si mal configuréK10 — Migration
snapshot-create-asIncohérence si VM non quiescéeSnapshots
undefine --remove-all-storageSuppression irréversibleVoir Danger Zone ci-dessus
ConceptCommandeCe qu’elle fait
Voirlist --allToutes les VMs
InfodominfoSynthèse d’une VM
IPdomifaddr --source leaseAdresse réseau (ou agent)
DémarrerstartAllumer
ArrêtershutdownÉteindre (propre)
SauvegarderdumpxmlExporter la config

Les 3 règles d’or :

  1. Toujours --all — sinon vous ne voyez que les VMs running
  2. shutdown avant destroy — arrêt propre d’abord
  3. destroy ≠ deletedestroy arrête, undefine supprime la définition

Ce site vous est utile ?

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

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.