Virsh , kurz für Vir tual Sch ell, ist eine Befehlszeilen-Benutzeroberfläche zum Verwalten virtueller Gastmaschinen. Mit Virsh können Sie VMs erstellen, auflisten, bearbeiten, starten, neu starten, stoppen, aussetzen, fortsetzen, herunterfahren und löschen. Es unterstützt derzeit KVM, LXC, Xen, QEMU, OpenVZ, VirtualBox und VMware ESX. In diesem Leitfaden besprechen wir die Verwaltung von KVM Virtuelle Maschinen mit Virsh-Verwaltungsbenutzeroberfläche unter Linux.
Stellen Sie sicher, dass Sie KVM und das Virsh-Dienstprogramm auf Ihrem Linux-Computer installiert haben. Die folgenden Anleitungen erläutern die Installation von KVM auf DEB- und RPM-basierten Systemen.
- KVM in Ubuntu 20.04 Headless Server installieren und konfigurieren
- KVM in CentOS 8 Server installieren und konfigurieren
- KVM in OpenSUSE Tumbleweed installieren und konfigurieren
1. Verwalten Sie virtuelle KVM-Maschinen mit dem Virsh-Befehl
Wenn Sie neu bei Virsh und KVM sind, ist es besser, mit dem Lesen der Hilfeanleitung zu beginnen. Es wird eine grundlegende Vorstellung davon geben, wie man Virsh benutzt.
1.1. Hilfe bekommen
Geben Sie den folgenden Befehl ein, um die Liste der verfügbaren Befehle zusammen mit einer kurzen Beschreibung anzuzeigen:
$ virsh help
Sie sehen eine umfangreiche Liste verfügbarer virsh-Befehle zum Verwalten virtueller KVM-Maschinen über die Befehlszeile.
Sie müssen sich nicht alles merken. Lesen Sie einfach die Beschreibung eines Befehls, den Sie ausführen möchten, und verwenden Sie ihn.
Die Befehle sind in die folgenden Abschnitte gruppiert:
- Domainverwaltung,
- Domänenüberwachung,
- Host und Hypervisor,
- Kontrollpunkt,
- Schnittstelle,
- Netzwerkfilter,
- Vernetzung,
- Knotengerät,
- Geheim,
- Schnappschuss,
- Sicherung,
- Speicherpool,
- Speichervolumen,
- Virsh selbst.
Jeder Abschnitt enthält die Befehle für bestimmte Aufgaben. Sie können den Hilfebereich einer Gruppe anzeigen, zum Beispiel Networking , wie unten:
$ virsh help Networking
Sie werden Befehle sehen, die sich auf Netzwerkaufgaben beziehen:
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
Sie können auch den Hilfeabschnitt eines bestimmten Befehls anzeigen. Zum Beispiel werde ich den Hilfeabschnitt von "net-name" anzeigen Befehl:
$ 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. Virtuelle Maschinen auflisten
Führen Sie den folgenden Befehl aus, um eine Liste der virtuellen Gastmaschinen im Run- oder Suspend-Modus anzuzeigen:
$ virsh list Id Name State --------------------
Wie Sie sehen, befinden sich keine Gäste im Run- oder Suspend-Modus.
Sie können --inactive verwenden Option zum Auflisten inaktiver Gäste.
Führen Sie zum Anzeigen aller Gastcomputer Folgendes aus:
$ virsh list --all Id Name State -------------------------------- - centos8-uefi shut off - nginx_centos8 shut off
Wie Sie in der obigen Ausgabe sehen, habe ich zwei virtuelle Maschinen, nämlich „centos8-uefi“ und „nginx_centos8“. Beide sind ausgeschaltet.
1.3. Virtuelle Maschinen starten
Um eine virtuelle Maschine zu starten, zum Beispiel "centos8-uefi", führen Sie Folgendes aus:
$ virsh start centos8-uefi
Sie sehen eine Ausgabe wie unten:
Domain centos8-uefi started
Um zu überprüfen, ob die VM ausgeführt wird, verwenden Sie "list" Befehl:
$ virsh list Id Name State ------------------------------ 1 centos8-uefi running
1.4. Virtuelle Maschinen speichern
Um den aktuellen Status einer laufenden VM zu speichern, führen Sie Folgendes aus:
$ virsh save centos8-uefi centos8-save Domain centos8-uefi saved to centos8-save
Dieser Befehl stoppt den Gast namens „centos8-uefi“ und speichert die Daten in einer Datei namens „centos8-save“. Dies wird einige Augenblicke dauern, je nachdem, wie viel Arbeitsspeicher von Ihrem Gastcomputer verwendet wird.
1.5. Virtuelle Maschinen wiederherstellen
Um den zuvor gespeicherten Zustand einer VM wiederherzustellen, geben Sie einfach den Dateinamen wie folgt an:
$ virsh restore centos8-save Domain restored from centos8-save
Überprüfen Sie mit dem Befehl „list“, ob die VM wiederhergestellt wurde:
$ virsh list Id Name State ------------------------------ 4 centos8-uefi running
1.6. Starten Sie virtuelle Maschinen neu
Um eine laufende VM neu zu starten, führen Sie Folgendes aus:
$ virsh reboot centos8-uefi Domain centos8-uefi is being rebooted
1.7. Virtuelle Maschinen anhalten/pausieren
Gehen Sie wie folgt vor, um eine laufende VM anzuhalten:
$ virsh suspend centos8-uefi Domain centos8-uefi suspended
Bestätigen Sie es mit dem "list"-Befehl:
$ virsh list Id Name State ----------------------------- 1 centos8-uefi paused
1.8. Virtuelle Maschinen fortsetzen
Um die angehaltene VM fortzusetzen, führen Sie Folgendes aus:
$ virsh resume centos8-uefi Domain centos8-uefi resumed
1.9. Stoppen Sie aktive virtuelle Maschinen
Führen Sie Folgendes aus, um eine aktive VM zwangsweise anzuhalten und im inaktiven Zustand zu belassen:
$ virsh destroy centos8-uefi Domain centos8-uefi destroyed
Sie können die VM auch ordnungsgemäß beenden, anstatt sie wie folgt zu erzwingen:
$ virsh destroy centos8-uefi --graceful Domain centos8-uefi destroyed
1.10. Virtuelle Maschinen herunterfahren
Gehen Sie wie folgt vor, um eine laufende VM auszuschalten:
$ virsh shutdown centos8-uefi Domain centos8-uefi is being shutdown
1.11. Rufen Sie den XML-Dump der virtuellen Maschinen ab
Um die XML-Konfigurationsdatei einer VM in der Standardausgabe anzuzeigen, führen Sie Folgendes aus:
$ virsh dumpxml centos8-uefi
Dieser Befehl zeigt die vollständigen Konfigurationsdetails (Software und Hardware) der virtuellen Maschine an:
Sie können den XML-Dump auch in eine Datei exportieren, anstatt ihn nur in der Standardausgabe wie unten anzuzeigen:
$ virsh dumpxml centos8-uefi > centos8.xml
Dieser Befehl erstellt die XML-Datei „centos8-uefi“ in einer Datei namens „centos8.xml“ und speichert sie im aktuellen Arbeitsverzeichnis.
1.12. Virtuelle Maschinen mit XML-Dump erstellen
Sie können eine neue virtuelle Gastmaschine erstellen, indem Sie das vorhandene XML von zuvor erstellten Gästen verwenden. Erstellen Sie zuerst einen XML-Dump wie oben gezeigt und erstellen Sie dann eine neue VM mit der XML-Datei wie unten:
$ virsh create centos8.xml Domain centos8-uefi created from centos8.xml
Dieser Befehl erstellt eine neue VM und startet sie sofort. Sie können es mit folgendem Befehl überprüfen:
1.13. XML-Konfigurationsdatei für virtuelle Maschinen bearbeiten
Wenn Sie Änderungen an einem Gastcomputer vornehmen möchten, können Sie einfach seine Konfigurationsdatei bearbeiten und die Änderungen nach Belieben vornehmen. Die Gäste können entweder während der Ausführung oder offline bearbeitet werden.
$ virsh edit centos8-uefi
Dieser Befehl öffnet die Datei in Ihrem Standardeditor, den Sie mit der Variablen $EDITOR festgelegt haben.
1.14. Konsolenzugriff für virtuelle Maschinen aktivieren
Nachdem Sie KVM-Gastmaschinen erstellt haben, können Sie über SSH, VNC-Client, Virt-Viewer, Virt-Manager und Cockpit-Webkonsole usw. darauf zugreifen. Sie können jedoch nicht mit dem Befehl „virsh console“ darauf zugreifen. Der Befehl console wird verwendet, um die virtuelle serielle Konsole für den Gast zu verbinden. Um mit dem Befehl „virsh console“ auf KVM-Gäste zuzugreifen, müssen Sie den Zugriff auf die serielle Konsole auf dem Gastcomputer aktivieren. Lesen Sie die folgende Anleitung, um den Zugriff auf die virsh-Konsole zu aktivieren:
- So aktivieren Sie den Zugriff auf die Virsh-Konsole für KVM-Gäste
1.15. Virtuelle Maschinen umbenennen
Wenn Sie jemals eine virtuelle Maschine umbenennen wollten, lesen Sie die folgende Anleitung.
- So benennen Sie eine virtuelle KVM-Gastmaschine um
1.16. Domänen-ID der virtuellen Maschinen anzeigen
Um die Domänen-ID einer laufenden virtuellen Gastmaschine zu finden, führen Sie Folgendes aus:
$ virsh domid centos8-uefi 2
Bitte beachten Sie, dass der Gast ausgeführt werden sollte, um seine Domänen-ID abzurufen.
1.17. Domänennamen der virtuellen Maschinen anzeigen
Um den Domänennamen einer laufenden VM abzurufen, führen Sie Folgendes aus:
$ virsh domname <domain-id or domain-uuid>
Beispiel:
$ virsh domname 2 centos8-uefi
Hier, 2 ist die Domain-ID.
1.18. UUID von virtuellen Maschinen anzeigen
Um die UUID des Gastcomputers zu finden, führen Sie Folgendes aus:
$ virsh domuuid <domain-name or domain-id>
Beispiel:
$ virsh domuuid centos8-uefi
Oder,
$ virsh domuuid 2
Beispielausgabe:
de4100c4-632e-4c09-8dcf-bbde29170268
1.19. Details zu virtuellen Maschinen anzeigen
Um die Informationen eines Gastcomputers anzuzeigen, verwenden Sie den Domänennamen, die Domänen-ID oder die Domänen-UUID wie unten:
$ virsh dominfo centos8-uefi
Oder,
$ virsh dominfo 2
Oder,
$ virsh dominfo de4100c4-632e-4c09-8dcf-bbde29170268
Beispielausgabe:
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. KVM-Hostinformationen anzeigen
Führen Sie Folgendes aus, um die Informationen Ihres Hostsystems abzurufen:
$ virsh nodeinfo
Beispielausgabe:
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. Informationen zur virtuellen CPU anzeigen
Um die Informationen zur virtuellen CPU anzuzeigen, führen Sie Folgendes aus:
$ virsh vcpuinfo <domain-id or domain-name or domain-uuid>
Beispiel:
$ 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. Finden Sie die IP-Adresse der virtuellen Maschinen
Die IP-Adresse einer virtuellen Maschine zu finden, ist keine große Sache. Wenn Sie Konsolenzugriff auf die virtuelle Maschine haben, können Sie ihre IP-Adresse einfach mit dem Befehl „ip“ finden. Es ist jedoch auch möglich, die IP-Adresse einer KVM-VM zu identifizieren, ohne auf ihre Konsole zugreifen zu müssen. Die folgende Anleitung erläutert, wie Sie die IP-Adresse einer virtuellen KVM-Maschine finden.
- So finden Sie die IP-Adresse einer virtuellen KVM-Maschine
1.23. Virtuelle Maschinen löschen
Wenn Sie eine VM nicht mehr benötigen, löschen Sie sie einfach wie folgt:
$ virsh destroy centos8-uefi
$ virsh undefine centos8-uefi
Der erste Befehl stoppt die VM zwangsweise, wenn sie bereits ausgeführt wird. Und der zweite Befehl wird die Definition aufheben und vollständig löschen.
Sie können auch die folgenden Optionen verwenden, um die Speichervolumes und Snapshots zu löschen.
--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. Virtuelle Netzwerke verwalten
Ich hoffe, Sie haben gelernt, wie Sie virtuelle KVM-Maschinen mit dem Befehl Virsh unter Linux verwalten. Dieser Abschnitt listet die wichtigen Befehle zum Verwalten virtueller KVM-Netzwerke unter Linux mit dem Befehlszeilendienstprogramm virsh auf.
2.1. Virtuelle Netzwerke auflisten
Um die verfügbaren virtuellen Netzwerke aufzulisten, führen Sie Folgendes aus:
$ virsh net-list
Name State Autostart Persistent
--------------------------------------------
default active yes yes
Wie Sie sehen können, habe ich nur ein virtuelles Netzwerk, das das Standardnetzwerk ist.
2.2. Details des virtuellen Netzwerks anzeigen
Um die Details eines virtuellen Netzwerks anzuzeigen, führen Sie Folgendes aus:
$ virsh net-dumpxml default
Ersetzen Sie im obigen Befehl „default“ durch Ihren Netzwerknamen.
Beispielausgabe:
<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. Virtuelle Netzwerke starten
Um ein inaktives Netzwerk zu starten, führen Sie Folgendes aus:
$ virsh net-start <Name-Of-Inactive-Network>
So starten Sie ein Netzwerk automatisch:
$ virsh net-autostart <network-name>
2.4. XML-Dump für virtuelle Netzwerke erstellen
Führen Sie zum Erstellen der XML-Konfigurationsdatei eines vorhandenen virtuellen Netzwerks Folgendes aus:
$ virsh net-dumpxml default > default.xml
Der obige Befehl erstellt eine XML-Konfiguration des „Standard“-Netzwerks und speichert sie in einer Datei namens „default.xml“ im aktuellen Verzeichnis.
Sie können die XML-Datei mit dem cat-Befehl anzeigen:
$ 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. Erstellen Sie neue virtuelle Netzwerke aus einer XML-Datei
Um ein neues virtuelles Netzwerk mit einer vorhandenen XML-Datei zu erstellen und es sofort zu starten, führen Sie Folgendes aus:
$ virsh net-create <Name-of-XMLfile>
Wenn Sie ein Netzwerk aus einer XML-Datei erstellen möchten, es aber nicht automatisch starten möchten, führen Sie Folgendes aus:
$ virsh net-define <Name-of-XMLfile>
2.6. Virtuelle Netzwerke deaktivieren
Um ein aktives Netzwerk zu deaktivieren, führen Sie Folgendes aus:
$ virsh net-destroy <network-name>
2.7. Virtuelle Netzwerke löschen
Um ein virtuelles Netzwerk zu löschen, deaktivieren Sie es zunächst wie oben gezeigt und führen Sie dann Folgendes aus:
$ virsh net-undefine <Name-Of-Inactive-Network>
Virsh hat viele Befehle und Optionen. Das gründliche Erlernen der Verwendung des Virsh-Befehlszeilentools reicht gerade aus, um eine vollständige virtuelle Umgebung unter Linux einzurichten. Sie benötigen keine GUI-Anwendungen.
Weitere Einzelheiten finden Sie auf den Virsh-Manpages.
$ man virsh
3. KVM-Gäste grafisch verwalten
Es ist fast unmöglich und auch unnötig, sich alle virsh-Befehle zu merken. Wenn Sie Schwierigkeiten haben, alle KVM-Verwaltungsaufgaben über die Befehlszeile auszuführen, können Sie grafische KVM-Verwaltungstools wie Virt-Manager und Cockpit ausprobieren.
- Verwalten Sie virtuelle KVM-Maschinen mit der Cockpit-Webkonsole
- So verwalten Sie virtuelle KVM-Maschinen mit Virt-Manager
Schlussfolgerung
Wenn Sie wissen, wie man virtuelle KVM-Maschinen mit der Virsh-Verwaltungsbenutzeroberfläche unter Linux verwaltet, haben Sie die Hälfte des Weges zur Verwaltung einer Virtualisierungsumgebung der Enterprise-Klasse geschafft. Das Einrichten von KVM und das Verwalten virtueller KVM-Maschinen mit dem Befehl virsh ist für alle Linux-Administratoren sehr wichtig.
Vorgestelltes Bild von Elias Sch. von Pixabay.