{{tag>software virtualisation vm cli kvm linux}}
====== Virsh ======
**virsh** est la CLI disponible en espace utilisateur dialoguant avec le module [[sysadmin/linux/virtualisation_avec_kvm|KVM]] et permettant de gérer les machines virtuelles notamment:
* Lister les VMs;
* Afficher des informations sur l'état des VMs et des ressources;
* Contrôler l'exécution des VMs : démarrer, arrêter, suspendre;
* Modifier les configurations à chaud (en ligne) ou de façon permanente.
virsh
# équivalent à
virsh --connect qemu:///system
===== Contrôler l'exécution des VMs =====
Une fois en mode interactif, on va pouvoir contrôler les machines via les commandes:
* **list** : afficher les VMs
* **start** : démarrer une VM
* **console** : ouvre un terminal sur la VM
* **suspend** : susprendre l'exécution de la VM
* **resume** : reprendre l'exécution de la VM
* **shutdown** : arrêter une VM
* **reset** : redémarrage forcé de la VM
* **destroy** : forcer l'arrêt d'une VM
===== Obtenir des informations =====
Pour obtenir des informations sur les VMs (désignées domaines) on dispose de la commande **dominfo**
dominfo aVm
* **domstate** : état de la VM
* **dommemstat** : consommation de la mémoire
* **domstats** : affiche les variables statisqtiques
* **domblklist** : lister les périphériques de type bloc (disques) associés à une VM
* **domiflist** : lister les interfaces d'une VM:
La configuration du domaine est décrite dans un fichier XML. Les balises du document sont décrites dans la documentation disponible en ligne à l'URL https://libvirt.org/formatdomain.html
La commande **virsh edit** permet d'éditer le document XML décrivant le domaine:
virsh edit aDomainName
Utiliser la commande **edit** est équivalent aux commandes:
virsh dumpxml --inactive --security-info domain > domain.xml
# Lance l'éditeur en fonction des variables $VISUAL et $EDITOR
vi domain.xml
# Redéfini le domaine avec le fichier modifié
virsh define domain.xml
===== Éditer une configuration =====
Les commandes ci-dessous sont équivalente à **virsh edit** mais l'exécution pas à pas permet de conserver des révisions du fichier XML. On copie la configuration initiale, on la modifie et de la réimporte si la syntaxe est correcte:
# Exporter la configuration de la VM
virsh dumpxml aDomain > aFile.xml
# Editer le fichier XML
vim aFile.xml
# Tester la validité du fichier après altération
virt-xml-validate afile.xml
# Redéfinir la VM via le fichier modifié
virsh define afile.xml
===== Description et commentaires ====
Le document XML comprend les balises **%%
Mes commentaires
ici
Après toute modification apportée au document, vérifier la syntaxe :
virt-xml-validate aVMConfig.xml
===== Supprimer une VM =====
Utiliser la commande **undefine** sur une VM à l'arrêt:
list --all
Id Name State
---------------------------
- debian11 shut off
undefine debian11
Domain debian11 has been undefined
===== Connexion à la VM =====
Pour se connecter à une VM en mode graphique on peut utiliser le client **remote-viewer**
# Affiche l'URI de connexion à l'interface graphique de la VM
domdisplay aDomainName
# Connexion à la GUI de la VM
remote-viewver spice://localhost:5900
Si une console a été définie on peut également se connecter à la console
virsh console --domain aVM
Si la VM fournit les services telnet ou ssh, on peut ouvrir un shell distant mais il faut d'abord [[/software/applications/virsh/lister_adresses_ip_systeme_invite| déterminer l'adresse IP de la VM]].
===== Gestion des réseaux =====
Pour afficher les réseau virtuels :
# liste l'ensemble des réseaux
virsh net-list --all
# liste les réseau virtuels actif :
virsh net-list
Pour obtenir les informations détaillées d’un réseau virtuel :
virsh net-info nom_reseau
Comme pour les VMs, la configuration du réseau virtuel peut être exportée et éditée :
virsh net-dumpxml aNetwork > aNetwork.xml
Ci dessous pour exemple le dump du réseau virtuel par défaut :
default
af20a5ca-db45-4b5e-a2ee-e50ad4c79264
On peut y voir notamment :
* le périphérique virtuel de type pont associé "virbr0"
* La configuration DHCP
* La configuration du NAT
Pour désactiver un réseau virtuel :
virsh net-destroy nom_reseau
Pour activer un réseau virtuel :
virsh net-start default
Voir également [[software/applications/virsh/gerer_les_reseaux|gérer les réseaux virtuels avec virsh]].
===== Références =====
* https://www.libvirt.org/manpages/virsh.html
* https://ubuntu.com/server/docs/virtualization-libvirt
* https://www.youtube.com/watch?v=jDSJ3WYfxUI