Le shell virtuel, ou virsh, est un utilitaire de ligne de commande flexible pour la gestion des machines virtuelles (VM) contrôlées par libvirt, qui est une boîte à outils et une API pour gérer les plates-formes de virtualisation. Il s'agit de l'outil de gestion par défaut pour les machines virtuelles basées sur le noyau Linux (KVM), et il prend également en charge Xen, VMware et d'autres plates-formes.
Le virsh La commande vous permet de gérer les machines virtuelles de manière interactive ou par lots. Il est également utile pour contrôler les VM à partir du shell Linux et s'intègre aux scripts ou aux outils d'automatisation. En utilisant virsh , vous pouvez vous connecter rapidement à un serveur à l'aide d'un shell sécurisé (SSH) et effectuer des opérations sur vos VM sans avoir accès à une interface graphique.
Lorsque vous exécutez virsh sans aucune option, il essaie de se connecter à un hyperviseur local. Pour Linux, la connexion par défaut pointe vers un système QEMU local pour gérer les machines KVM locales. Vous pouvez également vous connecter à un hyperviseur distant en utilisant l'option -c ou --connect et en spécifiant l'URI (Uniform Resource Identifier) de l'hyperviseur distant à l'aide de la syntaxe de libvirt. Pour plus d'informations, consultez la spécification URI de libvirt.
Par défaut, virsh fournit des centaines de sous-commandes et d'options qui vous permettent de gérer chaque aspect de votre plate-forme de virtualisation ou de vos machines virtuelles. Dans cet article, je vais partager les huit virsh sous-commandes que j'utilise le plus souvent. En raison de la nature du travail quotidien, la plupart de ces sous-commandes s'appliquent directement aux VM (ou domaines dans la terminologie libvirt) mais virsh dispose également de commandes pour gérer la plate-forme elle-même, telles que l'ajout de pools de stockage, de réseaux, etc.
liste virsh
virsh list est une commande de base qui répertorie tous les domaines en cours d'exécution (VM). Vous pouvez également lister toutes les VM configurées en ajoutant le --all option. Ceci est utile si vous souhaitez voir toutes les machines virtuelles configurées dans l'hyperviseur cible que vous pouvez utiliser sur les commandes suivantes. Par exemple, pour répertorier toutes les machines virtuelles disponibles sur un hyperviseur KVM Linux local :
# virsh list --all
Id Name State
------------------------------
3 rh8-vm01 running
- crc shut off
- rh8-tower01 shut off Vous pouvez utiliser l'ID ou le nom de domaine comme entrée pour les commandes suivantes.
virsh démarrer/redémarrer/arrêter
Bien qu'ils soient différents, j'ai regroupé les start , reboot , et shutdown sous-commandes, car elles effectuent la même opération de base de gestion de l'état d'alimentation de la machine virtuelle.
Pour arrêter la VM rh8-vm01 (de la list commande ci-dessus) :
# virsh shutdown rh8-vm01
Domain 'rh8-vm01' is being shutdown
# virsh list
Id Name State
--------------------
Vous pouvez le redémarrer en utilisant le start sous-commande :
# virsh start rh8-vm01
Domain 'rh8-vm01' started
# virsh list
Id Name State
--------------------------
4 rh8-vm01 running En utilisant ces sous-commandes, vous pouvez rapidement démarrer, redémarrer ou arrêter une machine virtuelle sans avoir à lancer une application graphique lourde.
[ Vous pourriez également être intéressé par la modification de sshd_config à l'aide d'un script Bash. ]
virsh dumpxml
Le dumpxml la sous-commande vide la configuration XML pour un domaine donné. Vous pouvez l'utiliser pour exporter la configuration vers un fichier afin d'apporter des modifications à une machine virtuelle existante ou l'utiliser comme modèle pour créer une autre machine virtuelle avec une configuration similaire. Par défaut, il vide la configuration vers STDOUT , donc redirigez-le vers un fichier en utilisant les opérateurs de redirection du shell > pour enregistrer dans un fichier :
# virsh dumpxml rh8-vm01
<domain type='kvm' id='4'>
<name>rh8-vm01</name>
<uuid>53b92c48-fce3-4464-95bf-6f442e988c94</uuid>
<metadata>
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
<libosinfo:os id="http://redhat.com/rhel/8.4"/>
</libosinfo:libosinfo>
</metadata>
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<vcpu placement='static'>2</vcpu>
... TRUNCATED OUTPUT ...
</domain> Vous pouvez utiliser la sortie XML dans des scripts et des outils d'automatisation pour automatiser la création de machines virtuelles.
virsh domifaddr
Le domifaddr La sous-commande répertorie toutes les adresses IP configurées pour toutes les interfaces virtuelles d'une machine virtuelle donnée. C'est utile si la VM utilise des adresses IP dynamiques, car cela vous permet de voir l'adresse IP attribuée et de vous connecter à la VM :
# virsh domifaddr rh8-vm01
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet6 52:54:00:c8:17:6e ipv4 192.168.122.19/24
vnet7 52:54:00:04:4d:ac ipv4 192.168.64.210/24
Par défaut, il répertorie l'adresse IP louée par un serveur DHCP. Si l'hyperviseur ne fournit pas ces informations, vous pouvez également utiliser l'option --source agent pour interroger le système d'exploitation (OS) invité directement via l'agent de virtualisation. Cela nécessite un agent de virtualisation installé dans le système d'exploitation invité.
édition virsh
Le edit la sous-commande ouvre la configuration XML actuelle dans votre $EDITOR par défaut , vous permettant d'apporter des modifications en direct dans une VM :
# virsh edit rh8-vm01
<domain type='kvm'>
<name>rh8-vm01</name>
<uuid>53b92c48-fce3-4464-95bf-6f442e988c94</uuid>
<metadata>
... TRUNCATED OUTPUT ...
</domain> Après avoir effectué vos modifications, enregistrez le fichier pour les appliquer. Certaines modifications peuvent n'entrer en vigueur qu'après un redémarrage.
virsh net-edit
Le net-edit La sous-commande vous permet d'apporter des modifications en direct à une configuration de réseau virtuel. C'est utile pour modifier les options d'un réseau virtuel, comme associer une adresse MAC donnée à une adresse IP à l'aide de la norme libvirt Paramétrage DHCP. C'est une commande plus avancée que j'utilise régulièrement. Comme le edit sous-commande, elle ouvre le fichier de configuration dans votre $EDITOR par défaut pour faire des changements. Enregistrez le fichier pour appliquer les modifications :
# virsh net-edit --network hostonly
<network>
<name>hostonly</name>
<uuid>eddd03ff-5825-42ef-bc99-968bddf773c2</uuid>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:67:75:b1'/>
<domain name='hostonly'/>
<ip address='192.168.64.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.64.128' end='192.168.64.254'/>
</dhcp>
</ip>
</network>
Vous pouvez également utiliser d'autres sous-commandes liées au réseau commençant par net- pour gérer différents aspects des réseaux virtuels de l'hyperviseur.
[ Télécharger maintenant :un guide de l'administrateur système sur les scripts Bash. ]
Quelle est la prochaine ?
virsh est un utilitaire puissant et flexible qui vous permet de gérer tous les aspects de la virtualisation Linux et d'autres plates-formes. Pour plus d'informations à ce sujet, consultez les pages de manuel ou consultez sa documentation en ligne.