Table des matières
Gestion des VM KVM/Libvirt à distance avec Virsh
Ce guide regroupe les commandes essentielles pour administrer nos machines virtuelles en ligne de commande (CLI) via SSH, en remplacement de virt-manager.
1. Installation de l'environnement (Serveur Headless)
Si le serveur Debian hôte est installé sans environnement de bureau (sans KDE/Gnome), voici les paquets requis pour faire fonctionner le moteur de virtualisation et les outils CLI :
sudo apt update sudo apt install qemu-system-x86 libvirt-daemon-system libvirt-clients virtinst
* libvirt-clients : Fournit la commande virsh.
* virtinst : Fournit la commande virt-install (création) et virt-clone (clonage).
2. Informations et Statut
Lister les machines virtuelles
Pour afficher toutes les VM (y compris celles qui sont éteintes), l'option –all est indispensable.
sudo virsh list --all
Obtenir les détails d'une VM
Affiche les informations générales (Statut, CPU, Mémoire allouée).
sudo virsh dominfo <nom_de_la_vm>
Connaître l'adresse IP d'une VM
Permet de trouver l'IP attribuée par le serveur DHCP interne de libvirt ou détectée sur l'hôte.
sudo virsh domifaddr <nom_de_la_vm>
3. Gestion de l'alimentation
Démarrer une VM
sudo virsh start <nom_de_la_vm>
Éteindre proprement une VM
Envoie un signal ACPI à l'OS invité pour un arrêt propre (comme un clic sur “Éteindre”).
sudo virsh shutdown <nom_de_la_vm>
Forcer l'arrêt (Urgence)
Équivalent à débrancher la prise électrique. À n'utiliser que si la VM est totalement plantée.
sudo virsh destroy <nom_de_la_vm>
Activer le démarrage automatique
Pour que la VM s'allume toute seule au boot du serveur Debian hôte.
sudo virsh autostart <nom_de_la_vm>
Pour désactiver : ajouter l'option –disable à la fin de la commande.
4. Gestion de la Configuration (XML)
Afficher la configuration XML complète
sudo virsh dumpxml <nom_de_la_vm>
Sauvegarder la configuration dans un fichier
Utile pour faire une sauvegarde textuelle avant modification.
sudo virsh dumpxml <nom_de_la_vm> > backup_<nom_de_la_vm>.xml
Modifier la configuration à la volée
Ouvre la configuration de la VM dans l'éditeur de texte par défaut du système (souvent Nano ou Vim). La VM doit être redémarrée pour appliquer les changements.
sudo virsh edit <nom_de_la_vm>
5. Ressources Matérielles (Évolution)
| Type | Commande | Note |
|---|
| RAM | sudo virsh setmaxmem <nom> 4194304 –config sudo virsh setmem <nom> 4194304 –config | VM éteinte obligatoirement (Exprimé en Kibibytes, ici 4 Go) |
| CPU | sudo virsh setvcpus <nom> 4 –maximum –config sudo virsh setvcpus <nom> 4 –config | VM éteinte obligatoirement |
Agrandir un Disque Dur
1. Trouver le chemin du fichier de disque :
sudo virsh domblklist <nom_de_la_vm>
2. Éteindre la VM, puis ajouter l'espace (ex: +20 Go) sur l'hôte :
sudo qemu-img resize /chemin/vers/image.qcow2 +20G
3. Rallumer la VM et étendre la partition à l'intérieur du système invité.
6. Réseau et Stockage
Lister les disques attachés à une VM
sudo virsh domblklist <nom_de_la_vm> --details
Lister les interfaces réseau d'une VM
sudo virsh domiflist <nom_de_la_vm>
7. Création et Duplication de VM
Créer une VM depuis un ISO (virt-install)
Cette commande instancie la VM, crée son disque dur au format QCOW2 et boot sur l'ISO.
sudo virt-install \ --name "ma-nouvelle-vm" \ --memory 2048 \ --vcpus 2 \ --os-variant debian12 \ --disk size=20,format=qcow2,pool=default \ --network network=default \ --cdrom /var/lib/libvirt/images/debian-12-installer.iso \ --graphics vnc,listen=0.0.0.0 \ --noautoconsole
Note pour le réseau : Remplacer network=default par network=routeur_nat si vous souhaitez la lier à votre routeur virtuel.
Dupliquer / Cloner une VM (virt-clone)
Permet de créer une copie conforme d'une VM existante (comme un modèle) vers une nouvelle instance, en générant de nouvelles adresses MAC et de nouveaux disques pour éviter les conflits. La VM source doit être éteinte.
sudo virt-clone --original ynh_modèle --name nouvelle-instance.fr --auto-copy
8. Instantanés (Snapshots)
Les snapshots nécessitent que les disques des VM soient au format QCOW2. Idéal avant une mise à jour critique de YunoHost.
Créer un instantané
sudo virsh snapshot-create-as <nom_de_la_vm> nom-du-snapshot "Ma description ici"
Astuce : Ajoutez l'option –live si la VM est allumée et que vous voulez aussi figer l'état exact de la RAM.
Lister les instantanés d'une VM
sudo virsh snapshot-list <nom_de_la_vm>
Restaurer un instantané (Retour en arrière)
Il est recommandé d'éteindre la VM avant la restauration.
sudo virsh snapshot-revert <nom_de_la_vm> nom-du-snapshot
Supprimer un instantané
À faire une fois la mise à jour validée pour libérer de l'espace disque et conserver de bonnes performances.
sudo virsh snapshot-delete <nom_de_la_vm> nom-du-snapshot
9. Accès graphique à distance (Tunnel SSH + VNC)
Le port VNC de l'hôte n'étant pas accessible directement depuis l'extérieur pour des raisons de sécurité, il faut faire passer le flux graphique à l'intérieur d'un tunnel SSH chiffré.
Étape 1 : Identifier le port VNC utilisé
Sur le serveur distant, vérifiez le numéro d'affichage ou le port de la VM en cours d'exécution :
sudo virsh vncdisplay ma-nouvelle-vm
* Si le résultat est :0, le port réel est 5900.
* Si le résultat est :1, le port réel est 5901, etc.
Étape 2 : Créer le tunnel depuis votre machine locale
Ouvrez un nouveau terminal sur votre PC local (pas sur le serveur distant) et exécutez la commande suivante :
ssh -L 5900:127.0.0.1:5900 utilisateur@adresse_ip_du_serveur
Note : Si à l'étape 1 la VM affichait “:1”, remplacez le port de destination par 5901 (ex: 5900:127.0.0.1:5901).
Laissez ce terminal ouvert, c'est lui qui maintient le pont sécurisé.
Étape 3 : Se connecter avec un visionneur VNC
1. Ouvrez votre logiciel VNC local (Remmina, TigerVNC, Vinagre, etc.).
2. Dans le champ d'adresse, connectez-vous sur : 127.0.0.1:5900
3. L'écran graphique de l'installateur ou du bureau Debian de la VM distante s'affiche.
