libvirt & virsh: KVM-VMs per CLI verwalten
KVM-VMs per Kommandozeile mit virsh steuern: auflisten, starten, stoppen, Snapshots, Domain-XML bearbeiten sowie libvirt-Netzwerke und Storage-Pools verwalten.
Sobald KVM läuft, wird virsh zum Kommandozeilen-Cockpit für alles, was libvirt verwaltet: virtuelle Maschinen (sogenannte Domains), virtuelle Netzwerke und Storage-Pools. Es ist skriptfähig, schnell und funktioniert tadellos per SSH auf einem Server ohne Bildschirm — genau deshalb steuern Orchestrierungsschichten wie OpenStack libvirt im Hintergrund, anstatt sich durch eine GUI zu klicken.
Diese Anleitung behandelt die praktischen virsh-Befehle für den täglichen Einsatz: Domains auflisten und steuern, Domain-XML prüfen und bearbeiten, Snapshots anlegen sowie Netzwerke und Storage-Pools verwalten. Sie setzt einen funktionierenden KVM/QEMU-Host voraus — falls nicht, beginnen Sie mit unserer Anleitung zum Installieren von KVM/QEMU unter Ubuntu 24.04.
Voraussetzungen
Sie benötigen Ubuntu 24.04 mit installiertem qemu-kvm, libvirt-daemon-system und libvirt-clients, Ihren Benutzer in der Gruppe libvirt und mindestens eine definierte VM (die Beispiele nutzen eine Domain namens ubuntu-test). Bestätigen Sie mit systemctl status libvirtd, dass der Dienst läuft.
Die Verbindungs-URI verstehen
virsh spricht über eine Verbindungs-URI mit einem libvirt-Daemon. Für lokale System-VMs ist das qemu:///system. Setzen Sie sie einmal pro Shell, damit Sie nicht bei jedem Befehl --connect angeben müssen:
export LIBVIRT_DEFAULT_URI=qemu:///system
virsh uriDomains auflisten und untersuchen
Listen Sie laufende Domains auf oder alle definierten, einschließlich gestoppter:
virsh list
virsh list --allHolen Sie detaillierte Informationen zu einer einzelnen Domain — Status, vCPUs, Arbeitsspeicher und das Autostart-Flag:
virsh dominfo ubuntu-testPrüfen Sie die Live-Auslastung und die virtuelle Hardware einer Domain:
virsh domstats ubuntu-test
virsh domblklist ubuntu-test
virsh domiflist ubuntu-testDen VM-Lebenszyklus steuern
Die zentralen Lebenszyklus-Verben sind intuitiv. shutdown fordert das Gastbetriebssystem auf, sich per ACPI sauber auszuschalten, während destroy dem Ziehen des Netzsteckers entspricht — nutzen Sie es nur bei hängenden Gästen:
virsh start ubuntu-test
virsh shutdown ubuntu-test
virsh reboot ubuntu-test
virsh destroy ubuntu-testUm eine VM in den RAM zu suspendieren und später fortzusetzen oder eine Domain automatisch mit dem Host starten zu lassen:
virsh suspend ubuntu-test
virsh resume ubuntu-test
virsh autostart ubuntu-test
virsh autostart --disable ubuntu-testDomain-XML bearbeiten
Jede Domain wird durch ein XML-Dokument definiert, das CPU, Arbeitsspeicher, Festplatten und NICs beschreibt. Zeigen Sie es an oder öffnen Sie es im Editor mit Validierung beim Speichern:
virsh dumpxml ubuntu-test
virsh edit ubuntu-testÄnderungen an einer laufenden Domain werden beim nächsten Boot wirksam. Für eine schnelle Live-Anpassung setzen Sie Speicher und vCPU-Anzahl ohne XML-Bearbeitung:
virsh setmem ubuntu-test 4194304 --live
virsh setvcpus ubuntu-test 4 --liveUm eine völlig neue Domain aus einer vorbereiteten XML-Datei zu definieren oder eine Domain-Definition zu entfernen (die Festplatte bleibt unberührt):
virsh define mydomain.xml
virsh undefine ubuntu-testMit Snapshots arbeiten
Snapshots erfassen einen Zustand zu einem Zeitpunkt, zu dem Sie zurückkehren können — unbezahlbar vor riskanten Upgrades. Anlegen, auflisten, zurückrollen:
virsh snapshot-create-as ubuntu-test snap1 'Vor Kernel-Upgrade'
virsh snapshot-list ubuntu-test
virsh snapshot-revert ubuntu-test snap1
virsh snapshot-delete ubuntu-test snap1Beachten Sie: Interne Snapshots funktionieren mit qcow2-Festplatten. Für raw- oder RBD-basierte Festplatten unterscheidet sich der Ablauf — ein Grund, warum Produktions-Clouds Snapshots auf Storage-Ebene bevorzugen.
Virtuelle Netzwerke verwalten
libvirt liefert ein voreingestelltes NAT-Netzwerk. Netzwerke auflisten, eines untersuchen und seinen Lebenszyklus steuern:
virsh net-list --all
virsh net-dumpxml default
virsh net-start default
virsh net-autostart defaultSo sehen Sie, welche IP-Adressen das DHCP von libvirt in einem Netzwerk vergeben hat:
virsh net-dhcp-leases defaultStorage-Pools und Volumes verwalten
Storage-Pools sind Verzeichnisse oder Geräte, aus denen libvirt Festplatten-Images zuteilt. Pools auflisten, den Default untersuchen und ein Volume anlegen:
virsh pool-list --all
virsh pool-info default
virsh vol-create-as default data.qcow2 10G --format qcow2
virsh vol-list defaultHängen Sie dieses Volume als neue virtuelle Festplatte an eine laufende VM an und machen Sie die Änderung über Neustarts hinweg dauerhaft:
virsh attach-disk ubuntu-test \
/var/lib/libvirt/images/data.qcow2 vdb \
--persistent --subdriver qcow2Mit der Konsole verbinden
Um die serielle Konsole einer VM direkt aus dem Terminal zu erreichen (praktisch per SSH, wenn noch kein Netzwerkzugriff auf den Gast besteht):
virsh console ubuntu-testMit Strg+] verlassen Sie die Konsole. Erscheint nichts, benötigt der Gast eventuell eine serielle Konsole auf der Kernel-Befehlszeile (console=ttyS0).
Fehlerbehebung und Stolperfallen
- „failed to connect to the hypervisor“ — Sie zielen auf die falsche URI; exportieren Sie
LIBVIRT_DEFAULT_URI=qemu:///system, sonst erscheinen Ihre VMs in der unprivilegierten Benutzersitzung. - Leere Domain-Liste — fast immer die obige Verwechslung von Session- und System-URI; die VMs existieren, Sie schauen nur in den falschen Bereich.
- XML-Änderungen scheinbar verworfen — Sie haben eine laufende Domain bearbeitet; Änderungen greifen erst nach vollständigem Herunterfahren und Starten, nicht bei einem Reboot aus dem Gast heraus.
- Snapshot-Fehler bei raw-Festplatten — interne Snapshots erfordern qcow2; konvertieren Sie die Festplatte oder nutzen Sie externe Snapshots.
Wie es weitergeht
Sie steuern KVM jetzt vollständig über die CLI — genau die Schicht, die OpenStack in großem Maßstab automatisiert. Um Ihren Domains produktionsreifen, replizierten Storage zu geben, geht es weiter mit Ceph RBD als KVM/libvirt-Storage.
Fazit
virsh verwandelt einen KVM-Host in eine voll verwaltbare, skriptfähige Virtualisierungsplattform, ohne je eine GUI zu öffnen. Domain-Lebenszyklus, XML-Bearbeitung, Snapshots, Netzwerke und Pools zu beherrschen ist dasselbe mentale Modell, das clouditiv-Operatoren nutzen — nur steuern wir Tausende dieser Domains über OpenStack, damit Sie es nicht müssen. Wenn das Verwalten von libvirt über eine ganze Flotte nach viel Aufwand klingt: clouditiv betreibt eine souveräne, ISO-27001-/BSI-C5-konforme Private Cloud auf Ubuntu 24.04 + OpenStack 2025.2 mit Daten in Deutschland. Sehen Sie sich unsere On-Premise-Cloud-Lösung für den gemanagten Weg an.