Die virtuelle Shell oder virsh ist ein flexibles Befehlszeilendienstprogramm zum Verwalten virtueller Maschinen (VMs), die von libvirt gesteuert werden, einem Toolkit und einer API zum Verwalten von Virtualisierungsplattformen. Es ist das Standardverwaltungstool für Linux-Kernel-basierte virtuelle Maschinen (KVMs) und unterstützt auch Xen, VMware und andere Plattformen.
Die virsh
Mit dem Befehl können Sie VMs interaktiv oder im Batch verwalten. Es ist auch hilfreich für die Steuerung von VMs über die Linux-Shell und lässt sich in Skripts oder Automatisierungstools integrieren. Durch die Verwendung von virsh
können Sie mithilfe von Secure Shell (SSH) schnell eine Verbindung zu einem Server herstellen und Vorgänge auf Ihren VMs ohne Zugriff auf eine grafische Benutzeroberfläche ausführen.
Wenn Sie virsh
ausführen ohne Optionen versucht es, sich mit einem lokalen Hypervisor zu verbinden. Für Linux verweist die Standardverbindung auf ein lokales QEMU-System, um lokale KVM-Rechner zu verwalten. Sie können auch eine Verbindung zu einem entfernten Hypervisor herstellen, indem Sie die Option -c
verwenden oder --connect
und Angabe des Uniform Resource Identifier (URI) des Remote-Hypervisors mithilfe der libvirt-Syntax. Weitere Informationen finden Sie in der URI-Spezifikation von libvirt.
Standardmäßig virsh
bietet Hunderte von Unterbefehlen und Optionen, mit denen Sie jeden Aspekt Ihrer Virtualisierungsplattform oder VMs verwalten können. In diesem Artikel teile ich die acht virsh
Unterbefehle, die ich am häufigsten verwende. Aufgrund der Art der täglichen Arbeit gelten die meisten dieser Unterbefehle direkt für VMs (oder Domänen in der libvirt-Terminologie), sondern virsh
verfügt auch über Befehle zum Verwalten der Plattform selbst, z. B. zum Hinzufügen von Speicherpools, Netzwerken und mehr.
virsh-Liste
virsh list
ist ein grundlegender Befehl, der alle laufenden Domänen (VMs) auflistet. Sie können auch alle konfigurierten VMs auflisten, indem Sie --all
hinzufügen Möglichkeit. Dies ist nützlich, wenn Sie alle im Ziel-Hypervisor konfigurierten VMs sehen möchten, die Sie für nachfolgende Befehle verwenden können. So listen Sie beispielsweise alle verfügbaren virtuellen Maschinen auf einem lokalen Linux-KVM-Hypervisor auf:
# virsh list --all
Id Name State
------------------------------
3 rh8-vm01 running
- crc shut off
- rh8-tower01 shut off
Sie können die ID oder den Domänennamen als Eingabe für nachfolgende Befehle verwenden.
virsh starten / neu starten / herunterfahren
Obwohl sie unterschiedlich sind, habe ich start
gruppiert , reboot
, und shutdown
Unterbefehle, da sie denselben grundlegenden Vorgang zur Verwaltung des Energiezustands der VM ausführen.
Zum Herunterfahren der VM rh8-vm01
(aus der list
obigen Befehl):
# virsh shutdown rh8-vm01
Domain 'rh8-vm01' is being shutdown
# virsh list
Id Name State
--------------------
Mit start
können Sie es wieder starten Unterbefehl:
# virsh start rh8-vm01
Domain 'rh8-vm01' started
# virsh list
Id Name State
--------------------------
4 rh8-vm01 running
Mithilfe dieser Unterbefehle können Sie eine VM schnell starten, neu starten oder herunterfahren, ohne eine umfangreiche grafische Anwendung starten zu müssen.
[ Möglicherweise möchten Sie auch erfahren, wie Sie sshd_config mit einem Bash-Skript bearbeiten. ]
virsh dumpxml
Die dumpxml
Der Unterbefehl gibt die XML-Konfiguration für eine bestimmte Domäne aus. Sie können es verwenden, um die Konfiguration in eine Datei zu exportieren, um Änderungen an einer vorhandenen VM vorzunehmen, oder es als Vorlage verwenden, um eine andere VM mit einer ähnlichen Konfiguration zu erstellen. Standardmäßig wird die Konfiguration in STDOUT abgelegt , leiten Sie es also mithilfe der Shell-Umleitungsoperatoren >
in eine Datei um in einer Datei speichern:
# 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>
Sie können die XML-Ausgabe in Skripten und Automatisierungstools verwenden, um das Erstellen von VMs zu automatisieren.
virsh domifaddr
Die domifaddr
Der Unterbefehl listet alle IP-Adressen auf, die für alle virtuellen Schnittstellen in einer bestimmten VM konfiguriert sind. Es ist nützlich, wenn die VM dynamische IP-Adressen verwendet, da Sie damit die zugewiesene IP-Adresse sehen und eine Verbindung zur VM herstellen können:
# 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
Standardmäßig listet es die von einem DHCP-Server geleaste IP-Adresse auf. Wenn der Hypervisor diese Informationen nicht bereitstellt, können Sie auch die Option --source agent
verwenden um das Gastbetriebssystem (OS) direkt über den Virtualisierungsagenten abzufragen. Dazu ist ein im Gastbetriebssystem installierter Virtualisierungsagent erforderlich.
virsh bearbeiten
Die edit
Unterbefehl öffnet die aktuelle XML-Konfiguration in Ihrem Standard $EDITOR
, sodass Sie Live-Änderungen in einer VM vornehmen können:
# virsh edit rh8-vm01
<domain type='kvm'>
<name>rh8-vm01</name>
<uuid>53b92c48-fce3-4464-95bf-6f442e988c94</uuid>
<metadata>
... TRUNCATED OUTPUT ...
</domain>
Nachdem Sie Ihre Änderungen vorgenommen haben, speichern Sie die Datei, um sie anzuwenden. Einige Änderungen werden möglicherweise erst nach einem Neustart wirksam.
virsh net-edit
Die net-edit
Mit dem Unterbefehl können Sie Live-Änderungen an einer virtuellen Netzwerkkonfiguration vornehmen. Es ist hilfreich, um Optionen für ein virtuelles Netzwerk zu ändern, z. B. eine bestimmte MAC-Adresse einer IP-Adresse zuzuordnen, indem standardmäßig libvirt
verwendet wird DHCP-Konfiguration. Es ist ein fortgeschrittenerer Befehl, den ich regelmäßig verwende. Wie das edit
Unterbefehl öffnet er die Konfigurationsdatei in Ihrem Standard $EDITOR
um Änderungen vorzunehmen. Speichern Sie die Datei, um die Änderungen zu übernehmen:
# 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>
Sie können auch andere netzwerkbezogene Unterbefehle verwenden, die mit net-
beginnen um verschiedene Aspekte der virtuellen Hypervisor-Netzwerke zu verwalten.
[ Jetzt herunterladen:Eine Anleitung für Systemadministratoren zum Bash-Scripting. ]
Was kommt als nächstes?
virsh ist ein leistungsstarkes und flexibles Dienstprogramm, mit dem Sie jeden Aspekt der Linux-Virtualisierung und anderer Plattformen verwalten können. Weitere Informationen dazu finden Sie in den Manpages oder in der Online-Dokumentation.