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.