staging.inyokaproject.org

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:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Ein Terminal öffnen

  3. ⚓︎ Ein Programm starten

  4. ⚓︎ KVM Kernel-basierte virtuelle Maschinen

  5. ⚓︎ QEMU Frei Emulator und Virtualisierer

  6. ⚓︎ Virtualisierung Allgemeine Einführung in die Virtualisierung

libvirt-logo.png 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
OptionErklä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

Diese Revision wurde am 2. Mai 2021 18:26 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Emulation und Virtualisierung, Server