ubuntuusers.de

virsh

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


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:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Ein Terminal öffnen

  3. ⚓︎ Ein Programm starten

  4. ⚓︎ KVM Kernel-basierte virtuelle Maschinen

  5. ⚓︎ QEMU Freier Emulator und Virtualisierer

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

  7. ⚓︎ mit Root-Rechten arbeiten

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

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.

Diese Revision wurde am 30. August 2023 20:49 von karzer erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Emulation und Virtualisierung, Server