Was ist virsh?
Libvirt ist ein Toolkit, mit dem du unterschiedliche Virtualisierungs-Plattformen (Hypervisor), wie KVM oder VirtualBox ansprechen kannst.
Sowohl mit dem GUI Virtual Machine Manager, als auch mit virsh als CLI-Tool lassen sich VMs (virtuelle Maschinen) administrieren.
In der Welt von virsh werden VMs als Domain 💡 bezeichnet.
In diesem Artikel zeige ich dir, was du so alles mit virsh unter Linux anstellen kannst.
Voraussetzungen und Installation
Bevor du virsh und KVM nutzen kannst, müssen die grundlegenden Voraussetzungen bei Hardware und Software erfüllt sein.
Hardware
Die CPU muss Hardware-Virtualisierung unterstützen (Intel VT-x oder AMD-V/SVM):
- diese Option muss im BIOS/UEFI des Servers/PCs aktiviert sein
- das prüfst du unter Linux mit
egrep -c '(vmx|svm)' /proc/cpuinfo, was die Anzahl der CPU-Kerne ausgibt
Software
Jetzt kannst du die Pakete installieren.
Die Schritte für Debian/Ubuntu:
|
|
Die Schritte für Fedora/RHEL:
|
|
Und so kannst du das Ergebnis auf allen Distribution überprüfen:
|
|
Modi zur Nutzung von virsh
Wenn bis hierhin alles geklappt hat, bist du nun bereit virsh zu nutzen:
- du kannst einzelne Befehle absetzen, wie
virsh list --all - oder es interaktiv nutzen, indem du
virshaufrufst
Die mit virsh aufgerufene Shell kannst du durch Eingabe von quit wieder verlassen.
Wir werden nur die 1. Option nutzen.
Verbindung zu virsh
Für eine Verbindung zu virsh ist eine URI erforderlich, die je nach Hypervisor anders aussieht oder auch auf einem anderen System läuft.
lokale Verbindung
So kannst du die Default-URI abfragen: virsh uri.
Die Ausgabe ist bei mir: qemu:///session
Falls es keine Verbindung gibt, kannst du sie so explizit angeben: virsh -c qemu:///system
Remote-Verbindung
Hier ein paar Beispiele, wie eine Remote-URI aussehen kann:
| URI | Protokoll |
|---|---|
virsh -c qemu+ssh://<USER>@<IP-Adresse>/system |
SSH |
virsh -c qemu://<USER>@<IP-Adresse>/system |
TLS/x509 |
virsh -c qemu+tcp://<USER>@<IP-Adresse>/system |
SASL/Kerberos |
Wir arbeiten aber weiter mit der lokalen Verbindung und du kannst die URI weglassen. Also ist virsh -c qemu:///system nodeinfo äquivalent zu virsh nodeinfo.
Ein Golden Image
Jetzt ist es an der Zeit, deine erste VM zu erstellen und dann mit virsh zu testen. Das kannst du tun, indem du ein ISO von der Distribution deiner Wahl herunterlädst und damit im Virtual Machine Manager eine VM erstellst.
Alternativ lädst du dir ein fertiges QCOW2-Image herunter. Du findest sie zum Beispiel hier:
Virtuelle Maschinen verwalten
Mit einer ersten VM kannst du die folgenden Befehle live testen.
Hier sind einige grundlegende Befehle zum Anzeigen und Starten von VMs:
|
|
Jetzt kannst du dich im Virtual Machine Manager lokal auf der Konsole anmelden und auf der VM nach Belieben arbeiten.
Mit den folgenden Kommandos kannst du deine VM wieder ausschalten oder komplett entfernen:
|
|
SSH, IP-Adresse und Netzwerke
So kannst du eine SSH-Verbindung zu deiner VM aufbauen:
|
|
Willst du es genauer wissen? So kannst du das Default-Netzwerk anzeigen:
|
|
Snapshots verwalten
Snapshots sind Zustände des Betriebssystems, die sich wiederherstellen lassen.
Das kann in vielen Fällen sinnvoll sein. Deswegen zeige ich dir jetzt die wichtigsten Befehle dazu:
|
|
Erweiterte Verwendung
Bis hierher hast du einen guten, grundlegenden Überblick zu virsh erhalten. Aber darüber hinaus ist noch viel mehr möglich.
Das erkennst du zum Beispiel, wenn du virsh gefolgt von Leerzeichen und Tab-Taste eingibst: Hier kannst du über 280 Möglichkeiten anzeigen.
Ich zeige dir in diesem Abschnitt noch ein paar vertiefende Beispiele, die ich häufig verwende.
Netzwerke managen
Du kannst statt des Default-Netzwerks weitere Netzwerke anlegen oder ändern.
Dafür kannst du ein XML ausgeben: virsh net-dumpxml default > classA.xml
Dann den Inhalt anpassen an deine Wünsche und das Ganze wieder importieren, um daraus ein neues Netzwerk zu definieren.
Die Netzwerk-Arten sind in der Dokumentation genauer beschrieben.
So könnte dein Import aussehen:
|
|
Diese Netzwerke kannst du dann VMs individuell zuordnen.
VMs generisch managen
Auch bei VMs kann es tiefer gehen. Wenn du einmal mehrere Golden Images hast und verschiedene Netzwerke, dann könntest du so neue Instanzen erstellen.
So kannst du das XML zu einer VM exportieren: virsh dumpxml debian13 > custom_debian13.xml
Dann kannst du es nach Bedarf anpassen - zum Beispiel die Werte für MAC, RAM, CPU, Disk und vieles mehr.
Und danach erstellst du daraus eine neue Instanz: virsh define custom_debian13.xml
Diese Instanz lässt sich wieder in allen Aspekten managen, die wir oben gesehen haben und die darüber hinaus möglich sind.
Zusammenfassung
Wenn du KVM/QEMU effizient administrieren willst, dann führt der Weg zu virsh 😎.
Mit diesem mächtigen CLI-Tool steuerst du deine virtuelle Infrastruktur unter Linux von der Erstellung über das Netzwerkmanagement bis hin zu Snapshots komplett aus einem Guss.
Hilfe zu virsh
Mehr zu virsh findest du unter man virsh und tldr virsh. Details zum Befehl tldr gibt es hier.