virsh
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. 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¶
Für virsh braucht man die Pakete [1].
virtinst
libvirt-bin
Befehl zum Installieren der Pakete:
sudo apt-get install virtinst libvirt-bin
Oder mit apturl installieren, Link: apt://virtinst,libvirt-bin
Verbindung zum Hypervisor¶
Um eine Verbindung zum Hypervisor herzustellen (das kann der lokale oder ein über das Netzwerk erreichbarer Server sein, in den meisten Fällen nutzt man den lokalen Hypervisor) wird dieser Terminalbefehl[2] verwendet:
virsh connect qemu:///system
Die resultierende Ausgabe:
Connecting to uri: qemu:///system
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.
Der nachfolgende Befehl erstellt eine erste Linux-VM mittels virt-install. Sie hieße in diesem Falle foo, hat 512 MB Ram, eine CPU, eine Festplatte mit 12 GB sowie das lokale CDROM-Laufwerk. Wenn man schon mal eine VM unter KVM 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 -n foo -r 512 --vcpus=1 -f /var/lib/libvirt/images/festplatte1.img -s 12 --vnc --cdrom /media/cdrom0 --noautoconsole --os-type linux --accelerate --network=bridge:br0,model=virtio -m 00:00:00:00:00:07 -k de
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. Andere Ordner scheitern stets mit Permission denied
.
Einige grundlegende Optionen von virt-install | |
Option | Erklärung |
-h, --help | Zeigt die Hilfe-Meldungen |
-n NAME, --name=NAME | Name der Gastinstanz bzw. in virt-install-Domäne genannt |
-r MEMORY, --ram=MEMORY | Arbeitsspreicher |
--vcpus=VCPUS | Anzahl der virtuellen CPU's für die VM |
-f DISKFILE, --file=DISKFILE | Dateiname und Pfad, der als Festplattenimage benutzt werden soll |
-s DISKSIZE, --file-size=DISKSIZE | Festplattengröße (falls sie noch nicht erstellt wurde) in Gigabyte |
--import | erstellt das Festplatten-Image nicht neu (vorhandene VM's oder Backups aufnehmen) |
-w NETWORK, --network=NETWORK | verbindet den Gast zu einem virtuellen Netzwerk, forwardet zu einem physichen Netzadapter mit NAT |
--vnc | Benutze VNC als grafischer Interfaceprovider der VM |
--vncport=VNCPORT | definiert den Port für VNC |
Arbeiten mit laufenden virtuellen Maschinen¶
Hat man erst eine VM laufen, kann man sie auf verschiedene Arten mit virsh bearbeiten, soweit man mit dem Hypervisor verbunden ist.
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 es auch in der VM installiert und aktiviert sein. Unter Ubuntu ist dafür das Paket
acpid
Befehl zum Installieren der Pakete:
sudo apt-get install acpid
Oder mit apturl installieren, Link: apt://acpid
notwendig.
Alternativ bleibt sonst nur ein
virsh destroy foo
womit gewissermaßen der Stecker gezogen wird.
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 zerstören, um dann die Definition in libvirt aufheben zu können.
virsh destroy foo_new
virsh undefine foo_new
Sonstiges¶
XML-Format in libvirt bzw. VM Konfiguration¶
Man kann aber auch die VMs direkt über die Konfigurations-XML-Datei erstellen[3]. Eine solche Datei kann man ins /tmp-Verzeichnis exportieren, indem man in die Konsole 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
Soweit man die VIM-Syntax beherrscht, kann man die Bearbeitung der XML-Datei am besten mit dem Befehl virsh edit
vornehmen. Damit kann man dann ganz einfach die Konfiguration anpassen. Wie bei VIM auch kann man mit :i
für bearbeiten und :wq
für Speichern und Schließen die Konfiguration anpassen.
virsh edit foo
Wesentlich umfangreichere Optionen zur Verwendung finden sich in der Manpage von virsh.
VM Konsole¶
Manchmal ist es nützlich, die Konsole einer laufenden VM zu benutzen, um Debug-Informationen zu erhalten oder anderes zu erhalten. Sie ist jedoch bitte nicht mit dem QEMU-Monitor zu verwechseln:
virsh console foo
Dieser Befehl stellt eine Verbindung zu der VM foo her. Die Konsole verlässt man dann mit den gleichzeitig gedrückten Tasten Strg + Alt Gr + 9
Tools¶
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
Links¶
virt-manager - GNOME- und libvirt-basierter VM-Manager
Manpage 🇬🇧
Virtuelle Maschinen fernsteuern mit Virsh 🇩🇪 - Artikel Linux Magazin, 12/2011
Beschreibung 🇬🇧 der wichtigsten Optionen für virt-install
Hypervisor 🇬🇧, die von libvirt unterstützt werden