← Zurück zu den Tutorials
5. Mai 2026·4 Min. Lesezeit

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 uri

Domains auflisten und untersuchen

Listen Sie laufende Domains auf oder alle definierten, einschließlich gestoppter:

virsh list
virsh list --all

Holen Sie detaillierte Informationen zu einer einzelnen Domain — Status, vCPUs, Arbeitsspeicher und das Autostart-Flag:

virsh dominfo ubuntu-test

Prüfen Sie die Live-Auslastung und die virtuelle Hardware einer Domain:

virsh domstats ubuntu-test
virsh domblklist ubuntu-test
virsh domiflist ubuntu-test

Den 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-test

Um 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-test

Domain-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 --live

Um 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-test

Mit 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 snap1

Beachten 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 default

So sehen Sie, welche IP-Adressen das DHCP von libvirt in einem Netzwerk vergeben hat:

virsh net-dhcp-leases default

Storage-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 default

Hä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 qcow2

Mit 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-test

Mit 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.