Virsh , abréviation de Vir tuelle Sh ell, est une interface utilisateur en ligne de commande pour la gestion des machines virtuelles invitées. Virsh vous permet de créer, répertorier, modifier, démarrer, redémarrer, arrêter, suspendre, reprendre, arrêter et supprimer des machines virtuelles. Il prend actuellement en charge KVM, LXC, Xen, QEMU, OpenVZ, VirtualBox et VMware ESX. Dans ce guide, nous expliquerons comment gérer KVM machines virtuelles avec interface utilisateur de gestion Virsh sous Linux.
Assurez-vous d'avoir installé les utilitaires KVM et Virsh sur votre machine Linux. Les guides suivants expliquent comment installer KVM sur des systèmes basés sur DEB et RPM.
- Installer et configurer KVM dans le serveur sans tête Ubuntu 20.04
- Installer et configurer KVM sur le serveur CentOS 8
- Installer et configurer KVM dans OpenSUSE Tumbleweed
1. Gérer les machines virtuelles KVM avec la commande Virsh
Si vous débutez avec Virsh et KVM, il est préférable de commencer par lire le manuel d'aide. Cela vous donnera une idée de base de l'utilisation de Virsh.
1.1. Obtenir de l'aide
Entrez la commande suivante pour afficher la liste des commandes disponibles avec une brève description :
$ virsh help
Vous verrez une liste complète des commandes virsh disponibles pour gérer les machines virtuelles KVM à partir de la ligne de commande.
Vous n'êtes pas obligé de tout mémoriser. Lisez simplement la description d'une commande que vous souhaitez exécuter et utilisez-la.
Les commandes sont regroupées dans les sections suivantes :
- Gestion de domaine,
- Surveillance de domaine,
- Hébergeur et Hyperviseur,
- Point de contrôle,
- Interface,
- Filtre réseau,
- Mise en réseau,
- Périphérique de nœud,
- Secret,
- Instantané,
- Sauvegarde,
- Groupe de stockage,
- Volume de stockage,
- Virsh lui-même.
Chaque section contient les commandes liées à un ensemble particulier de tâches. Vous pouvez afficher la section d'aide d'un groupe, par exemple Réseautage , comme ci-dessous :
$ virsh help Networking
Vous verrez des commandes liées aux tâches de mise en réseau :
Networking (help keyword 'network'): net-autostart autostart a network net-create create a network from an XML file net-define define an inactive persistent virtual network or modify an existing persistent one from an XML file net-destroy destroy (stop) a network net-dhcp-leases print lease info for a given network net-dumpxml network information in XML net-edit edit XML configuration for a network net-event Network Events net-info network information net-list list networks net-name convert a network UUID to network name net-start start a (previously defined) inactive network net-undefine undefine a persistent network net-update update parts of an existing network's configuration net-uuid convert a network name to network UUID net-port-list list network ports net-port-create create a network port from an XML file net-port-dumpxml network port information in XML net-port-delete delete the specified network port
Vous pouvez également afficher la section d'aide d'une commande spécifique. Par exemple, je vais afficher la section d'aide de "net-name" commande :
$ virsh help net-name NAME net-name - convert a network UUID to network name SYNOPSIS net-name <network> OPTIONS [--network] <string> network uuid
1.2. Lister les machines virtuelles
Pour afficher la liste des machines virtuelles invitées en mode exécution ou suspension, exécutez la commande suivante :
$ virsh list Id Name State --------------------
Comme vous pouvez le voir, il n'y a pas d'invités en mode exécution ou suspension.
Vous pouvez utiliser le --inactif possibilité de lister les invités inactifs.
Pour afficher toutes les machines invitées, exécutez :
$ virsh list --all Id Name State -------------------------------- - centos8-uefi shut off - nginx_centos8 shut off
Comme vous le voyez dans la sortie ci-dessus, j'ai deux machines virtuelles, à savoir "centos8-uefi" et "nginx_centos8". Les deux sont éteints.
1.3. Démarrer les machines virtuelles
Pour démarrer une machine virtuelle, par exemple "centos8-uefi", exécutez :
$ virsh start centos8-uefi
Vous verrez une sortie comme ci-dessous :
Domain centos8-uefi started
Pour vérifier si la VM est en cours d'exécution, utilisez "list" commande :
$ virsh list Id Name State ------------------------------ 1 centos8-uefi running
1.4. Enregistrer les machines virtuelles
Pour enregistrer l'état actuel d'une VM en cours d'exécution, exécutez :
$ virsh save centos8-uefi centos8-save Domain centos8-uefi saved to centos8-save
Cette commande arrête l'invité nommé "centos8-uefi" et enregistre les données dans un fichier appelé "centos8-save". Cela prendra quelques instants en fonction de la quantité de mémoire utilisée par votre machine invitée.
1.5. Restaurer les machines virtuelles
Pour restaurer l'état précédemment enregistré d'une VM, il suffit de spécifier le nom du fichier comme ci-dessous :
$ virsh restore centos8-save Domain restored from centos8-save
Vérifiez si la VM est restaurée à l'aide de la commande "list":
$ virsh list Id Name State ------------------------------ 4 centos8-uefi running
1.6. Redémarrer les machines virtuelles
Pour redémarrer une VM en cours d'exécution, exécutez :
$ virsh reboot centos8-uefi Domain centos8-uefi is being rebooted
1.7. Suspendre/Pauser les machines virtuelles
Pour suspendre une VM en cours d'exécution, procédez comme suit :
$ virsh suspend centos8-uefi Domain centos8-uefi suspended
Vérifiez-le avec la commande "list":
$ virsh list Id Name State ----------------------------- 1 centos8-uefi paused
1.8. Reprendre les machines virtuelles
Pour reprendre la VM en pause, exécutez :
$ virsh resume centos8-uefi Domain centos8-uefi resumed
1.9. Arrêter les machines virtuelles actives
Pour arrêter de force une VM active et la laisser à l'état inactif, exécutez :
$ virsh destroy centos8-uefi Domain centos8-uefi destroyed
Vous pouvez également arrêter la VM avec élégance au lieu de la forcer comme ci-dessous :
$ virsh destroy centos8-uefi --graceful Domain centos8-uefi destroyed
1.10. Arrêter les machines virtuelles
Pour éteindre une VM en cours d'exécution, procédez comme suit :
$ virsh shutdown centos8-uefi Domain centos8-uefi is being shutdown
1.11. Récupérer le vidage XML des machines virtuelles
Pour afficher le fichier de configuration XML d'une VM dans la sortie standard, exécutez :
$ virsh dumpxml centos8-uefi
Cette commande affichera les détails de configuration complets (logiciel et matériel) de la machine virtuelle :
Vous pouvez également exporter le vidage XML vers un fichier au lieu de simplement l'afficher dans la sortie standard comme ci-dessous :
$ virsh dumpxml centos8-uefi > centos8.xml
Cette commande videra le fichier XML "centos8-uefi" dans un fichier nommé "centos8.xml" et l'enregistrera dans le répertoire de travail actuel.
1.12. Créer des machines virtuelles avec un vidage XML
Vous pouvez créer une nouvelle machine virtuelle invitée à l'aide du code XML existant à partir d'invités créés précédemment. Commencez par créer un vidage XML comme indiqué ci-dessus, puis créez une nouvelle machine virtuelle à l'aide du fichier XML comme ci-dessous :
$ virsh create centos8.xml Domain centos8-uefi created from centos8.xml
Cette commande créera une nouvelle machine virtuelle et la démarrera immédiatement. Vous pouvez le vérifier en utilisant la commande :
1.13. Modifier le fichier de configuration XML des machines virtuelles
Si vous souhaitez apporter des modifications à une machine invitée, vous pouvez simplement modifier son fichier de configuration et effectuer les modifications comme vous le souhaitez. Les invités peuvent être modifiés pendant leur exécution ou lorsqu'ils sont hors ligne.
$ virsh edit centos8-uefi
Cette commande ouvrira le fichier dans votre éditeur par défaut que vous avez défini avec la variable $EDITOR.
1.14. Activer l'accès à la console pour les machines virtuelles
Après avoir créé des machines invitées KVM, vous pouvez y accéder via SSH, le client VNC, Virt-viewer, Virt-manager et la console Web Cockpit, etc. Cependant, vous ne pouvez pas y accéder à l'aide de la commande "virsh console". La commande console est utilisée pour connecter la console série virtuelle pour l'invité. Pour accéder aux invités KVM à l'aide de la commande "virsh console", vous devez activer l'accès à la console série sur la machine invitée. Reportez-vous au guide suivant pour activer l'accès à la console virsh :
- Comment activer l'accès à la console Virsh pour les invités KVM
1.15. Renommer les machines virtuelles
Si vous avez déjà voulu renommer une machine virtuelle, consultez le guide suivant.
- Comment renommer la machine virtuelle invitée KVM
1.16. Afficher l'ID de domaine des machines virtuelles
Pour trouver l'ID de domaine d'une machine virtuelle invitée en cours d'exécution, exécutez :
$ virsh domid centos8-uefi 2
Veuillez noter que l'invité doit être en cours d'exécution pour obtenir son identifiant de domaine.
1.17. Afficher le nom de domaine des machines virtuelles
Pour obtenir le nom de domaine d'une VM en cours d'exécution, exécutez :
$ virsh domname <domain-id or domain-uuid>
Exemple :
$ virsh domname 2 centos8-uefi
Ici, 2 est l'identifiant du domaine.
1.18. Afficher l'UUID des machines virtuelles
Pour trouver l'UUID de la machine invitée, exécutez :
$ virsh domuuid <domain-name or domain-id>
Exemple :
$ virsh domuuid centos8-uefi
Ou,
$ virsh domuuid 2
Exemple de résultat :
de4100c4-632e-4c09-8dcf-bbde29170268
1.19. Afficher les détails des machines virtuelles
Pour afficher les informations d'une machine invitée, utilisez le nom de domaine, l'identifiant de domaine ou l'uuid de domaine comme ci-dessous :
$ virsh dominfo centos8-uefi
Ou,
$ virsh dominfo 2
Ou,
$ virsh dominfo de4100c4-632e-4c09-8dcf-bbde29170268
Exemple de résultat :
Id: -
Name: centos8-uefi
UUID: de4100c4-632e-4c09-8dcf-bbde29170268
OS Type: hvm
State: shut off
CPU(s): 2
Max memory: 2097152 KiB
Used memory: 2097152 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: apparmor
Security DOI: 0
1.20. Afficher les informations sur l'hôte KVM
Pour obtenir les informations de votre système hôte, exécutez :
$ virsh nodeinfo
Exemple de résultat :
CPU model: x86_64
CPU(s): 4
CPU frequency: 1167 MHz
CPU socket(s): 1
Core(s) per socket: 2
Thread(s) per core: 2
NUMA cell(s): 1
Memory size: 8058840 KiB
1.21. Afficher les informations du CPU virtuel
Pour afficher les informations du CPU virtuel, exécutez :
$ virsh vcpuinfo <domain-id or domain-name or domain-uuid>
Exemple :
$ virsh vcpuinfo centos8-uefi
VCPU: 0
CPU: 3
State: running
CPU time: 5.6s
CPU Affinity: yyyy
VCPU: 1
CPU: 1
State: running
CPU time: 0.0s
CPU Affinity: yyyy
1.22. Trouver l'adresse IP des machines virtuelles
Trouver l'adresse IP d'une machine virtuelle n'est pas un gros problème. Si vous avez un accès console à la machine virtuelle, vous pouvez facilement trouver son adresse IP à l'aide de la commande "ip". Cependant, il est également possible d'identifier l'adresse IP d'une VM KVM sans avoir à accéder à sa console. Le guide suivant explique comment trouver l'adresse IP d'une machine virtuelle KVM.
- Comment trouver l'adresse IP d'une machine virtuelle KVM
1.23. Supprimer les machines virtuelles
Si vous ne voulez plus de VM, supprimez-la simplement comme ci-dessous :
$ virsh destroy centos8-uefi
$ virsh undefine centos8-uefi
La première commande arrêtera de force la machine virtuelle si elle est déjà en cours d'exécution. Et la deuxième commande l'annulera et le supprimera complètement.
Vous pouvez également utiliser les options suivantes pour supprimer les volumes de stockage et les instantanés.
--managed-save remove domain managed state file
--storage remove associated storage volumes (comma separated list of targets or source paths) (see domblklist)
--remove-all-storage remove all associated storage volumes (use with caution)
--delete-storage-volume-snapshots delete snapshots associated with volume(s)
--wipe-storage wipe data on the removed volumes
--snapshots-metadata remove all domain snapshot metadata (vm must be inactive)
2. Gérer les réseaux virtuels
J'espère que vous avez appris à gérer les machines virtuelles KVM avec la commande Virsh sous Linux. Cette section répertorie les commandes importantes pour gérer les réseaux virtuels KVM sous Linux à l'aide de l'utilitaire de ligne de commande virsh.
2.1. Lister les réseaux virtuels
Pour lister les réseaux virtuels disponibles, exécutez :
$ virsh net-list
Name State Autostart Persistent
--------------------------------------------
default active yes yes
Comme vous pouvez le voir, je n'ai qu'un seul réseau virtuel qui est celui par défaut.
2.2. Afficher les détails du réseau virtuel
Pour afficher les détails d'un réseau virtuel, exécutez :
$ virsh net-dumpxml default
Remplacez "default" par le nom de votre réseau dans la commande ci-dessus.
Exemple de résultat :
<network connections='1'>
<name>default</name>
<uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:ee:35:49'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
2.3. Démarrer des réseaux virtuels
Pour démarrer un réseau inactif, exécutez :
$ virsh net-start <Name-Of-Inactive-Network>
Pour démarrer automatiquement un réseau :
$ virsh net-autostart <network-name>
2.4. Créer un vidage XML de réseaux virtuels
Pour créer le fichier de configuration XML d'un réseau virtuel existant, exécutez :
$ virsh net-dumpxml default > default.xml
La commande ci-dessus créera la configuration XML du réseau "par défaut" et l'enregistrera dans un fichier nommé "default.xml" dans le répertoire courant.
Vous pouvez afficher le fichier XML à l'aide de la commande cat :
$ cat default.xml
<network connections='1'>
<name>default</name>
<uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:ee:35:49'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
2.5. Créer de nouveaux réseaux virtuels à partir d'un fichier XML
Pour créer un nouveau réseau virtuel à l'aide d'un fichier XML existant et le démarrer immédiatement, exécutez :
$ virsh net-create <Name-of-XMLfile>
Si vous souhaitez créer un réseau à partir d'un fichier XML mais que vous ne souhaitez pas le démarrer automatiquement, exécutez :
$ virsh net-define <Name-of-XMLfile>
2.6. Désactiver les réseaux virtuels
Pour désactiver un réseau actif, exécutez :
$ virsh net-destroy <network-name>
2.7. Supprimer les réseaux virtuels
Pour supprimer un réseau virtuel, désactivez-le d'abord comme indiqué ci-dessus, puis exécutez :
$ virsh net-undefine <Name-Of-Inactive-Network>
Virsh a beaucoup de commandes et d'options. Apprendre à utiliser l'outil de ligne de commande Virsh à fond est juste suffisant pour configurer un environnement virtuel complet sous Linux. Vous n'avez besoin d'aucune application graphique.
Pour plus de détails, reportez-vous aux pages de manuel de virsh.
$ man virsh
3. Gérez graphiquement les invités KVM
Se souvenir de toutes les commandes virsh est presque impossible et également inutile. Si vous avez du mal à effectuer toutes les tâches de gestion KVM à partir de la ligne de commande, vous pouvez essayer des outils de gestion KVM graphiques tels que Virt-manager et Cockpit.
- Gérer les machines virtuelles KVM à l'aide de la console Web Cockpit
- Comment gérer les machines virtuelles KVM avec Virt-Manager
Conclusion
Si vous savez comment gérer des machines virtuelles KVM avec l'interface utilisateur de gestion Virsh sous Linux, vous êtes à mi-chemin pour gérer un environnement de virtualisation de niveau entreprise. La configuration de KVM et la gestion des machines virtuelles KVM à l'aide de la commande virsh sont très importantes pour tous les administrateurs Linux.
Image sélectionnée par Elias Sch. de Pixabay.