====== 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 ==== 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 ===== 3. Gestion de l'alimentation ===== ==== Démarrer une VM ==== sudo virsh start ==== Éteindre proprement une VM ==== Envoie un signal ACPI à l'OS invité pour un arrêt propre (comme un clic sur "Éteindre"). sudo virsh shutdown ==== Forcer l'arrêt (Urgence) ==== Équivalent à débrancher la prise électrique. À n'utiliser que si la VM est totalement plantée. sudo virsh destroy ==== Activer le démarrage automatique ==== Pour que la VM s'allume toute seule au boot du serveur Debian hôte. sudo virsh autostart //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 ==== Sauvegarder la configuration dans un fichier ==== Utile pour faire une sauvegarde textuelle avant modification. sudo virsh dumpxml > backup_.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 ===== 5. Ressources Matérielles (Évolution) ===== ^ Type ^ Commande ^ Note ^ | **RAM** | ''sudo virsh setmaxmem 4194304 --config'' \\ ''sudo virsh setmem 4194304 --config'' | VM éteinte obligatoirement (Exprimé en Kibibytes, ici 4 Go) | | **CPU** | ''sudo virsh setvcpus 4 --maximum --config'' \\ ''sudo virsh setvcpus 4 --config'' | VM éteinte obligatoirement | ==== Agrandir un Disque Dur ==== 1. Trouver le chemin du fichier de disque : sudo virsh domblklist 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 --details ==== Lister les interfaces réseau d'une VM ==== sudo virsh domiflist ===== 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-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 ==== Restaurer un instantané (Retour en arrière) ==== **Il est recommandé d'éteindre la VM avant la restauration.** sudo virsh snapshot-revert 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-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.