virsh
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
⚓︎ Virtualisierung Allgemeine Einführung in die Virtualisierung
virsh 🇬🇧 ist ein Werkzeug zum Verwalten virtueller Maschinen[6] unter Xen, QEMU, KVM, LXC, Test, OpenVZ, VirtualBox, OpenNebula oder VMware ESX. Man kann eine Maschine von der Kommandozeile aus erstellen, löschen, starten, stoppen und verwalten. Virsh ist für den fortgeschrittenen Linuxadministrator von Interesse, um einfache Skriptautomatismen für die Virtualisierung zu realisieren. Dieser Artikel ist besonders auf die Nutzung von virsh mit KVM ausgelegt. Wenn man sich bisher noch nicht mit Virtualisierung[6] beschäftigt hat oder bisher nur graphische Oberflächen wie die von Virtual-Box gewohnt ist und jetzt tiefer einsteigen möchte, sollte nach Möglichkeit erst mit der reinen KVM- oder QEMU-Technik auf der Konsole beginnen, um die Konfigurationsspezifika z.B. für eine Windowsmaschine kennen zu lernen.
Für einen stabilen Betrieb ist hier im Vorfeld einiges zu Themen, welche Virtuelle Netzwerkkarte oder welcher Festplattendateityp für den Fall das Beste sind[4][5], zu klären. Die Vorteile von virsh liegen dann im vereinfachten Verwalten der virtuellen Instanzen.
virsh ist ein Teil des Libvirt-Projekts 🇬🇧, das eine Befehlssammlung (Library) für diverse Programmiersprachen zur Verfügung stellt, mit denen die Hypervisoren gesteuert werden können. Es stellt gewissermaßen die Befehlssätze in der Shell zur Verfügung.
Installation¶
Virsh wird über das libvirt-daemon-system-Paket installiert [1]. Das Paket virtinst wird zusätzlich für den Befehl virt-install
benötigt:
libvirt-daemon-system (main)
virtinst (main)
Befehl zum Installieren der Pakete:
sudo apt-get install libvirt-daemon-system virtinst
Oder mit apturl installieren, Link: apt://libvirt-daemon-system,virtinst
Verbindung zum Hypervisor¶
Die virtuellen Maschinen werden über einen libvirt-Daemon verwaltet, den man z.B. mit virsh über die Kommandozeile bedienen kann. Der Daemon läuft entweder mit Root-Rechten, oder mit Benutzerrechten, dabei ist man jedoch in den Einstellungen Beschränkt (z.B. Netzwerk, USB-Geräte durchreichen). Siehe libvirt daemon operation modes 🇬🇧.
Im Folgenden wird der Fall beschrieben, in der der Daemon mit Root-Rechten läuft, was unter Ubuntu als Standard vorkonfiguriert ist (die entsprechende Umgebungsvariable wird mit /etc/profile.d/libvirt-uri.sh gesetzt).
Damit man beim Zugriff auf den libvirt-Daemon micht selbst Root-Rechte anwenden muss, kann man seinen Benutzer der Gruppe libvirt zuweisen:
sudo usermod -aG libvirt $USER
Die Änderung wird erst nach einem Neustart des Rechners übernommen.
Virtuelle Maschine erstellen¶
Virtuelle Maschinen, die mit virsh verwaltet werden, erstellt man durch Definition der Maschine in einer libvirt-XML-Datei. Soweit man die Syntax noch nicht kennt, sollte man mit virt-install
eine erste XML-Datei bzw. die Virtuelle Maschine komplett damit erstellen.
virt-install– Einrichtung einer virtuellen Maschine¶
Der nachfolgende Befehl erstellt eine erste Linux-VM mittels virt-install. Sie heißt in diesem Fall foo, hat 2048 MB Ram, eine CPU, eine Festplatte mit 20 GB sowie ein ISO-Image mit dem Betriebssystem-Installer. Wenn man schon mal eine VM unter QEMU direkt gestartet hat, wird man sich an dieser Stelle schnell zurecht finden. Näheres dazu welche Einstellung zu welcher VM passen findet man bei QEMU[5] oder KVM[6].
virt-install --connect qemu:///system \ --name foo \ --memory 2048 \ --vcpus=1 --accelerate \ --graphics spice,keymap=de \ --disk /var/lib/libvirt/images/festplatte1.img,size=20 \ --cdrom /var/lib/libvirt/images/installer.iso \ --network=default
Die virtuelle Festplatte sollte sich im Ordner /var/lib/libvirt/images befinden. Für diesen Ordner existiert eine Ausnahmeregel in den Regeln der vorinstallierten AppArmor-Schutzsoftware, zu finden in der Datei /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper. Auf andere Ordner kann wegen fehlenden Berechtigungen nicht zugegriffen werden.
Optionen von virt-install¶
Einige grundlegende Optionen von virt-install | ||
Option | Erklärung | |
--help | Zeigt die Hilfe-Meldungen | |
--name=NAME | Name der Gastinstanz bzw. in virt-install-Domäne genannt | |
--memory MEMORY | Arbeitsspreicher | |
--vcpus=VCPUS | Anzahl der virtuellen CPU's für die VM | |
--disk DISKFILE,size=SIZE | Dateiname und Pfad, der als Festplattenimage mit Größe SIZE benutzt werden soll | |
--import | erstellt das Festplatten-Image nicht neu (vorhandene VM's oder Backups aufnehmen) | |
--network=NETWORK | verbindet den Gast zu einem virtuellen Netzwerk | |
--graphics | Einstellung der Grafik, z.B. spice oder VNC |
Netzwerk¶
Libvirt kann aus den von QEMU zur Verfügung gestellten Netzwerk-Optionen automatisch oder mit Benutzerhilfe ein komplexeres Netzwerk erstellen:
user: Einfaches QEMU-Netzwerk, bei dem die virtuelle Maschine über NAT mit dem Host verbunden ist. Wenig effizient.
default: Erzeugt eine Brücke im Host und verbindet die virtuellen Maschinen über ein Tap-Device. Die Brücke wird über NAT mit dem Host-Netzwerk verbunden und es wird ein DHCP-Server für die Brücke gestartet.
bridge: Die virtuelle Maschine wird mit einer vom Benutzer auf dem Host erstellten Netzwerkbrücke verbunden.
none: Kein Netzwerk
Verbinden mit der virtuellen Maschine¶
Man kann sich in der virtuellen "foo"-Maschine einloggen mit
virt-viewer foo
oder sich über virsh eine Konsole geben lassen:
virsh console foo
Die Konsole verlässt man dann mit den gleichzeitig gedrückten Tasten Strg + Alt Gr + 9 oder Strg + 5 .
Arbeiten mit virtuellen Maschinen¶
Hat man eine VM aufgesetzt, kann man sie auf verschiedene Arten mit virsh bearbeiten.
Starten der VM
virsh start foo
Neustart der VM
virsh reboot foo
Ausschalten der VM via ACPI
virsh shutdown foo
Hinweis:
Damit der Shutdown via ACPI funktioniert, muss dies auch vom Betriebssystem in der VM unterstützt werden. Alternativ bleibt sonst nur ein hartes Ausschalten über virsh destroy
Hartes Auschschalten der VM ("Stecker ziehen")
virsh destroy foo
Pausieren bzw. Einfrieren der VM
virsh suspend foo
Aufheben des Pausezustands einer VM
virsh resume foo
VM's auflisten
virsh list
Id Name State ---------------------------------- 1 foo running
Löschen einer VM¶
Um eine VM löschen zu können, muss man sie erst einmal auflösen, um dann die Definition in libvirt aufheben zu können.
virsh destroy foo_new virsh undefine foo_new
Eventuell verknüpfte virtuelle Festplatten werden dabei nicht automatisch gelöscht.
VM-Konfiguration¶
Man kann aber auch die VMs direkt über eine Konfigurationsdatei im XML-Format erstellen. Eine solche Datei kann man in das /tmp/-Verzeichnis exportieren, indem man in das Terminal [2] Folgendes eingibt:
virsh dumpxml foo > /tmp/foo.xml
Sobald man die XML-Datei angepasst hat, kann man daraus eine neue Virtuelle Maschine erstellen und automatisch laufen lassen:
virsh create /tmp/foo_new.xml
Alternativ kann man die VM auch nur definieren, ohne sie zu starten:
virsh define /tmp/foo_new.xml
Am einfachsten lässt sich die Datei mit dem Befehl virsh edit
bearbeiten. Beim ersten Start des Befehls kann man sich aus einer Liste seinen bevorzugen Texteditor auswählen.
virsh edit foo
Wesentlich umfangreichere Optionen zur Verwendung finden sich in der Manpage von virsh.
Werkzeuge¶
Mit virt-top
kann man sich einen Überblick über die Lastverteilung unter den laufenden virtuellen Maschinen machen.
virt-top
Befehl zum Installieren der Pakete:
sudo apt-get install virt-top
Oder mit apturl installieren, Link: apt://virt-top
Mit folgendem Befehl ruft man virt-top
dann auf:
virt-top
und mit
Q kann man virt-top
wieder verlassen.
Problemlösung¶
Festplattenimage wird mit Maximalgröße angelegt¶
Beim qcow2-Format für Festplattenimages wird das Image mit einer maximalen Größe definiert, aber als "sparse"-Image angelegt und nimmt damit als Datei nur so viel Platz ein, wie im Image belegt ist. Legt man ein solches Festplattenimage mit virt-install oder mit dem virt-manager an, wird das Image aber gleich mit der vollen Größe angelegt. Möchte man das nicht, kann man das Festplattenimage selbst mit qemu-img anlegen, oder ein bestehendes Image mit virt-sparsify
wieder verkleinern.
Links¶
virt-manager - GNOME- und libvirt-basierter VM-Manager
Manpage 🇬🇧
Virtuelle Maschinen fernsteuern mit Virsh 🇩🇪 - Artikel Linux Magazin, 12/2011
Hypervisor 🇬🇧, die von libvirt unterstützt werden
Linux Hypervisor Setup (libvirt/qemu/kvm) 🇬🇧 - Installation und Konfiguration von libvirt
VM Networking ( Libvirt / Bridge ) 🇬🇧 - Netzwerkkonfiguration mit libvirt