41.4libvirt-Kommandos
Nachdem ich Ihnen im vorigen Abschnitt recht ausführlich den Virtual Machine Manager als wichtigsten Vertreter der libvirt-Werkzeuge präsentiert habe, folgen in diesem Abschnitt einige Kommandos, deren Nutzung keine grafische Benutzeroberfläche voraussetzt.
virsh
Mit dem Kommando virsh starten Sie die libvirt-Shell. Darin können Sie Kommandos zur Verwaltung aller virtuellen Maschinen ausführen, die libvirt bekannt sind.
Mit der virsh können Sie virtuelle Maschinen mit start, suspend/resume, shutdown, destroy, save/restore bzw. undefine starten, vorübergehend anhalten und wieder fortsetzen, geordnet herunterfahren (ACPI Shutdown), sofort ausschalten, speichern und wieder fortsetzen oder aus der Liste der libvirt-Definitionen löschen.
edit ermöglicht es, die XML-Datei mit der Beschreibung der virtuellen Maschine direkt in einem Editor zu bearbeiten. Als Editor kommt üblicherweise vi zum Einsatz. Wenn Sie mit einem anderen Editor arbeiten möchten, müssen Sie die Umgebungsvariable EDITOR entsprechend einstellen.
Bei allen oben aufgezählten virsh-Kommandos müssen Sie den Namen der virtuellen Maschine, deren UUID-Nummer oder bei laufenden virtuellen Maschinen die ID-Nummer angeben. Die UUID-Nummer geht aus der XML-Definitionsdatei hervor. Auskunft über die ID-Nummern laufender virtueller Maschinen gibt das virsh-Kommando list.
Sofern virsh erkennt, dass der Rechner ein KVM-Host ist, stellt es nach Möglichkeit eine Verbindung zu dem auf Systemebene laufenden Dämon libvirtd her. Wenn virsh nur mit Benutzerrechten ausgeführt wird, erfordert eine Verbindung auf Systemebene unter Ubuntu die Zugehörigkeit zur Gruppe libvirtd. Unter CentOS, Fedora und RHEL müssen Sie das Kommando als root starten, wenn Sie auf Systemebene arbeiten möchten.
Es ist möglich, innerhalb der virsh-Shell die Verbindung mit dem Kommando connect zu verändern: qemu:///session bezeichnet dabei eine Verbindung auf Benutzerebene, qemu:///system eine Verbindung auf Systemebene.
Via SSH können Sie auch eine Verbindung zum Dämon libvirtd auf einem anderen Rechner herstellen. Wenn es sich beim KVM-Host um einen RHEL- oder Fedora-Rechner handelt, müssen Sie als Benutzername root angeben, weil auf diesen Systemen nur root eine Verbindung zum libvirt-Systemdämon herstellen darf. Beachten Sie, dass nach qemu+ssh: nur zwei Schrägstriche folgen, nicht drei! Wenn auf dem KVM-Host aus Sicherheitsgründen ein root-Login mit Passwortangabe via SSH unmöglich ist, müssen Sie vor dem ersten Verbindungsaufbau Ihren öffentlichen SSH-Schlüssel auf dem KVM-Host einrichten.
Anstatt virsh interaktiv zu verwenden, können Sie ein einzelnes virsh-Kommando in der Form virsh kommando ausführen:
Wenn Sie dabei nicht die von virsh standardmäßig vorgesehene Verbindung verwenden möchten, geben Sie die Verbindungszeichenkette mit der Option -c an:
Zum Abschluss stelle ich Ihnen einige ausgewählte virsh-Kommandos vor. man virsh dokumentiert mindestens hundert weitere Kommandos. Innerhalb der Shell erhalten Sie mit help name eine ausführliche Beschreibung des jeweiligen Kommandos.
-
connect qemu:///session: stellt eine gewöhnliche Benutzerverbindung zu libvirtd her. Auf diese Weise können eigene virtuelle Maschinen verwaltet werden.
-
connect qemu:///system: stellt eine root-Verbindung zu libvirtd her. Das ist nur erforderlich, wenn globale KVM-Optionen oder virtuelle Netzwerke verändert werden sollen.
-
list [--inactive oder --all]: listet alle laufenden virtuellen Maschinen auf. Wenn Sie nur die gerade nicht aktiven oder überhaupt alle Maschinen auflisten möchten, geben Sie die Optionen --inactive oder --all an.
-
start name: startet die angegebene virtuelle Maschine. Wenn Sie mit der Maschine im Grafikmodus kommunizieren möchten, verwenden Sie dazu entweder das Programm virt-viewer oder einen VNC-Client. Die Verbindungsdaten ermittelt das virsh-Kommando vncdisplay.
-
suspend/resume name: stoppt die angegebene virtuelle Maschine vorübergehend bzw. setzt die Ausführung wieder fort. Die gestoppte virtuelle Maschine beansprucht weiterhin RAM! Es wird also nur die virtuelle CPU angehalten.
-
shutdown/reboot name: fährt die virtuelle Maschine herunter bzw. startet sie neu. Die virtuelle Maschine erhält via ACPI ein Shutdown-Signal. Es ist allerdings der virtuellen Maschine überlassen, ob sie auch darauf reagiert. Wenn das bei älteren Distributionen nicht der Fall ist, hilft in der Regel die Installation des Pakets acpid in der virtuellen Maschine.
-
save name dateiname: speichert den Zustand der virtuellen Maschine in einer Datei und stoppt dann die Ausführung der Maschine.
-
restore dateiname: aktiviert die zuvor gespeicherte virtuelle Maschine wieder. Die Zustandsdatei kann anschließend gelöscht werden.
-
destroy name: beendet die virtuelle Maschine sofort. Das ist so, als würden Sie bei Ihrem Rechner das Stromkabel ausstecken, und es kann dieselben Folgen haben.
-
undefine name: löscht die XML-Datei, die die virtuelle Maschine beschreibt. Die Image-Datei mit der virtuellen Festplatte bleibt erhalten.
-
autostart [--disable] name: gibt an, dass die virtuelle Maschine während des Boot-Prozesses des Hostrechners automatisch gestartet werden soll. Mit der Option --disable wird der automatische Start wieder abgestellt. Der automatische Start funktioniert nur für Maschinen, die auf Systemebene eingerichtet werden. Auf Session-Ebene werden autostart-Maschinen dagegen erst gestartet, wenn mit virsh zum ersten Mal eine Verbindung zu libvirtd hergestellt wird.
-
console name: ermöglicht die Bedienung der angegebenen virtuellen Maschine direkt in der Konsole. Das setzt voraus, dass in der virtuellen Maschine ein getty-Prozess für die serielle Schnittstelle /dev/ttyS0 läuft. Um die Verbindung zu beenden, drücken Sie (Strg)+(¿).
-
ttyconsole name: gibt an, über welches Device des Host-Computers die serielle Schnittstelle des Gastsystems zugänglich ist (z.B. /dev/pts/5). Sie können nun in einem Terminalfenster socat - /dev/pts/5 ausführen und dann mit der virtuellen Maschine kommunizieren (ganz ähnlich wie beim oben beschriebenen console-Kommando). Vorher muss in der Regel das Paket socat installiert werden.
-
vncdisplay name: liefert die IP-Adresse (leer für localhost) und Portnummer für die VNC-Anzeige der virtuellen Maschine. Sie können nun einen beliebigen VNC-Client (z.B. Vinagre) starten, um mit der virtuellen Maschine zu interagieren. Am KVM-Host können Sie stattdessen auch virt-viewer name ausführen. Aus Sicherheitsgründen funktioniert der VNC-Zugang nur von localhost.
vncdisplay liefert kein Ergebnis, wenn die virtuelle Maschine ihr Grafiksystem gar nicht über VNC freigibt, sondern stattdessen das modernere Spice-System verwendet. In diesem Fall können Sie die virtuelle Maschine mit dem Programm virt-viewer bedienen. An dieses Programm können Sie direkt den Namen der virtuellen Maschine übergeben.
Sollte sich dennoch die Notwendigkeit ergeben, die Spice-Portnummer zu ermitteln, wird es schwierig. In virsh fehlt ein Kommando, um ähnlich wie mit vncdisplay den Spice-Port einer virtuellen Maschine zu ermitteln. Abhilfe schafft das folgende Kommando, das ich in einem Forum von ubuntuusers.de gefunden habe. Es extrahiert die Portnummer aus der Prozessliste.
spice_port=$(ps aux | grep vm_name | grep -oP "(?<=-spice port=).*?(?=,)")
-
edit name: lädt die XML-Datei zur Beschreibung der virtuellen Maschine in den Editor, den Sie in der Umgebungsvariablen $EDITOR eingestellt haben.
virt-clone
Das Einrichten einer neuen virtuellen Maschine nimmt normalerweise geraume Zeit in Anspruch. Wenn Sie eine virtuelle Maschine wünschen, die im Wesentlichen dieselben Eckdaten wie eine bereits vorhandene virtuelle Maschine hat, ist es wesentlich schneller, diese einfach zu kopieren bzw. zu »klonen«. Dabei hilft das Kommando virt-clone: Standardmäßig erzeugt es eine neue XML-Definitionsdatei, kopiert die Image-Datei für die virtuelle Festplatte und gibt dem Netzwerkadapter eine neue, zufällige MAC-Adresse. Die restlichen Hardware-Komponenten bleiben unverändert. Die virtuelle Maschine muss vor dem Kopieren heruntergefahren werden.
Das folgende Kommando kopiert eine Ubuntu-Server-Installation. Die neue virtuelle Maschine erhält den Namen userver6, die neue Image-Datei wird in der Datei /var/lib/libvirt/images/userver6.img gespeichert. Achten Sie darauf, die neue Image-Datei in einem libvirt-Speicherpool anzulegen: So verhindern die SELinux-Regeln unter RHEL/Fedora die Ausführung der virtuellen Maschine.
Nach dem Kopieren müssen Sie in der virtuellen Maschine diverse Anpassungen vornehmen. Beispielsweise müssen Sie die Netzwerkkonfiguration ändern, damit es keine IP-Adresskonflikte gibt. Je nach Konfiguration ist es erforderlich, auch die Dateien /etc/hosts und /etc/hostname zu aktualisieren. Wenn es in der ursprünglichen virtuellen Maschine einen SSH-Server gab, sollten Sie in der virtuellen Maschine unbedingt einen neuen SSH-Schlüssel erzeugen:
virt-viewer
virt-viewer aus dem gleichnamigen Paket ist ein VNC- und Spice-Client zur Darstellung des Bildschirminhalts sowie zur Kommunikation mit einer virtuellen Maschine. virt-viewer vm-name stellt die Verbindung zu einer laufenden virtuellen Maschine her. Das setzt voraus, dass die virtuelle Maschine VNC oder Spice nutzt.
Wenn Sie virt-viewer ohne root-Rechte ausführen, aber die Verbindung zu einer auf Systemebene laufenden virtuellen Maschine herstellen möchten, geben Sie die Verbindungszeichenkette mit der Option -c an:
Sofern die virtuelle Maschine VNC zur Weitergabe des virtuellen Grafiksystems nutzt, können Sie statt virt-viewer jeden beliebigen anderen VNC-Client einsetzen. Der einzige Unterschied besteht darin, dass Sie zuerst mit dem virsh-Kommando vncdisplay die Verbindungsdaten ermitteln müssen.
Um virtuelle Maschinen von Windows aus zu steuern, können Sie virt-viewer von der folgenden Seite auch als Windows-Programm herunterladen:
http://www.spice-space.org/download.html
virt-top
Das Kommando virt-top aus dem gleichnamigen Paket liefert ähnlich wie top eine Auflistung aller virtuellen Maschinen. Zu jeder virtuellen Maschine werden deren Speicher- und CPU-Bedarf sowie diverse andere Parameter angezeigt.