QEMU & KVM: Native Virtualization (Artikel 041)
Tiefgehende Analyse der nativen Linux-Virtualisierung mit KVM und QEMU. Architekturverständnis, Performance-Optimierung und CLI-basiertes VM-Management.
# QEMU & KVM: Hochleistungs-Virtualisierung im Linux-Kernel
TL;DR / Management Summary KVM (Kernel-based Machine) verwandelt den Linux-Kernel in einen Typ-1 Hypervisor. In Kombination mit QEMU (Quick Emulator), der die Hardware emuliert, entsteht eine Virtualisierungslösung, die performanter als VMware oder Hyper-V ist. Das Rückgrat von Proxmox, AWS und OpenStack. Wir schauen uns an, wie man VMs ohne GUI direkt auf der Kommandozeile erstellt und optimiert.
# 1. Einführung & Architektur
Wie Linux zum Hypervisor wird.
- KVM: Ein Kernel-Modul, das CPUs mit Hardware-Virtualisierungsfeatures (VT-x / AMD-V) direkt ansteuert.
- QEMU: Emuliert Peripherie wie Disks, Netzwerkkarten und Grafik.
graph TD
A[Hardware: CPU VT-x/AMD-V] --- B[Linux Kernel + KVM Module]
B --- C[QEMU Process / VM 1]
B --- D[QEMU Process / VM 2]
C --- E[Guest OS: Windows]
D --- F[Guest OS: Linux]
G[Management: libvirt / Proxmox] --> C
G --> D
# 2. Hardware-Check & Installation
Ist der Server bereit?
# CPU Features prüfen
# Muss eine Zahl > 0 zurückgeben
egrep -c '(vmx|svm)' /proc/cpuinfo
# Pakete installieren
sudo apt update
sudo apt install qemu-system-x86 qemu-utils libvirt-daemon-system libvirt-clients virtinst bridge-utils
# 3. VM Erstellung via CLI
Der Profi-Weg mit virt-install.
Anstatt ISOs manuell zu brennen, nutzen wir Cloud-Images oder automatisierte Installer.
sudo virt-install \
--name ubuntu-server \
--memory 2048 \
--vcpus 2 \
--disk size=20,format=qcow2,bus=virtio \
--os-variant ubuntu22.04 \
--network bridge=vmbr0,model=virtio \
--graphics none \
--console pty,target_type=serial \
--location 'http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
# 4. Day-2 Operations: Performance & Storage
Das System ausreizen.
# VirtIO: Die Autobahn für Daten
Nutzen Sie niemals IDE oder SATA für VMs. VirtIO ist ein paravirtualisierter Treiber, der die Latenz massiv senkt.
- Disk:
bus=virtio - Network:
model=virtio
# QCOW2 vs. RAW
- RAW: Schnellste Performance, aber keine Snapshots, belegt sofort den vollen Platz.
- QCOW2: Unterstützt Snapshots, Kompression und “Thin Provisioning” (wächst mit den Daten).
# 5. Troubleshooting & “War Stories”
Wenn die VM hakt.
# Story 1: “Der hängende VNC-Zugriff”
Symptom: Die VM läuft, aber Sie kommen nicht per Konsole ran.
Ursache: Standardmäßig lauscht QEMU/KVM nur auf 127.0.0.1.
Lösung: In der Libvirt-XML (virsh edit <name>) den Listen-Type auf 0.0.0.0 ändern oder SSH-Tunnel nutzen. Am besten: Serial Console nutzen (siehe Artikel 012).
# Story 2: “CPU Steal Time”
Symptom: Die VM ist extrem langsam, obwohl die CPU-Last im Gast niedrig ist.
Ursache: Zu viele VMs auf zu wenigen echten CPU-Kernen (Overcommitment). Der Host kommt mit dem Scheduling nicht hinterher.
Lösung: Nutzen Sie top auf dem Host und achten Sie auf %st (Steal Time). Reduzieren Sie die Anzahl der vCPUs oder pinnen Sie CPUs (CPU Pinning).
# 6. Fazit & Empfehlung
- Management: Nutzen Sie Libvirt (
virsh) für Standalone-Server. Es ist der Standard-Wrapper für QEMU. - Hardware: Aktivieren Sie im BIOS immer “Virtualization Technology” und “SR-IOV”.
- VirtIO: Ohne VirtIO-Treiber (besonders unter Windows) verlieren Sie bis zu 50% Performance.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Liste aller VMs | virsh list --all |
| VM starten | virsh start <name> |
| VM stoppen (Hard) | virsh destroy <name> |
| VM Editieren (XML) | virsh edit <name> |
| Snapshot erstellen | virsh snapshot-create-as <name> snap1 |
| VM Klonen | virt-clone --original <name> --name <neu> --auto-clone |