← Zurueck zu Proxmox Grundlagen
🖥️

VMs erstellen & verwalten

Virtuelle Maschinen mit KVM - von der Erstellung bis zur Optimierung.

⏱️ 30-45 Minuten 📊 Mittel
🔧 KVM-basiert
🪟 Windows & Linux
🔒 Volle Isolation
Hardware-Passthrough
🤔 Wann brauche ich eine VM? +

Virtuelle Maschinen bieten vollstaendige Hardware-Virtualisierung mit eigenem Kernel.

VM verwenden fuer:

  • ✓ Windows-Betriebssysteme
  • ✓ BSD, Solaris, andere OS
  • ✓ Eigene Kernel-Module noetig
  • ✓ GPU/PCIe-Passthrough
  • ✓ Maximale Isolation gewuenscht
  • ✓ Nested Virtualization

Besser LXC Container:

  • → Reine Linux-Services
  • → Docker/Container-Host
  • → Ressourcen-Effizienz wichtig
  • → Schnelle Start-Zeiten
  • → Viele kleine Instanzen
💡

Performance-Unterschied

VMs haben ca. 5-10% Overhead gegenueber Bare-Metal. LXC Container nur ca. 1-2%. Fuer die meisten Linux-Workloads sind Container effizienter.

💿 ISO-Images vorbereiten +

Bevor du eine VM erstellen kannst, brauchst du ein Installations-ISO.

ISO hochladen (Web-UI)

  1. Datacenter → Storage → local (oder anderer Storage)
  2. ISO Images → Upload
  3. ISO-Datei auswaehlen und hochladen
ISO per CLI hochladen
bash

# ISO direkt auf Server herunterladen
cd /var/lib/vz/template/iso/

# Debian
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso

# Ubuntu Server
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.4-live-server-amd64.iso

# Windows VirtIO-Treiber (wichtig fuer Windows-VMs!)
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
ISO von URL herunterladen (Web-UI)
bash

# Alternativ: Download from URL in der Web-UI
# Datacenter → Storage → ISO Images → Download from URL
# URL eingeben, Proxmox laedt direkt herunter
⚠️

Windows-VMs

Fuer Windows-VMs unbedingt die VirtIO-Treiber-ISO herunterladen! Ohne diese erkennt Windows die virtuellen Festplatten nicht.

🖱️ VM erstellen (Web-UI) +

Rechtsklick auf den Node → Create VM

1. General

  • Node: Auf welchem Server die VM laufen soll
  • VM ID: Eindeutige Nummer (100-999999999)
  • Name: Beschreibender Name (z.B. "debian-webserver")

2. OS

  • ISO image: Installations-ISO auswaehlen
  • Guest OS: Typ und Version (Linux/Windows)

3. System

  • Machine: q35 (modern) oder i440fx (legacy)
  • BIOS: OVMF (UEFI) oder SeaBIOS (Legacy)
  • SCSI Controller: VirtIO SCSI single (beste Performance)
  • Qemu Agent: Aktivieren fuer bessere Integration

4. Disks

  • Bus/Device: SCSI (VirtIO)
  • Storage: local-lvm oder ZFS
  • Disk size: Nach Bedarf (kann spaeter vergroessert werden)
  • Cache: Write back (mit BBU) oder None
  • Discard: Aktivieren fuer SSDs (TRIM)
  • IO thread: Aktivieren fuer bessere Performance

5. CPU

  • Sockets: 1 (ausser Multi-Socket-Server)
  • Cores: Nach Bedarf
  • Type: host (beste Performance) oder x86-64-v2-AES

6. Memory

  • Memory: RAM in MiB
  • Ballooning: Aktivieren fuer dynamisches RAM

7. Network

  • Bridge: vmbr0 (oder andere Bridge)
  • Model: VirtIO (paravirtualized)
  • VLAN Tag: Optional fuer VLAN-Zuweisung
  • Firewall: Proxmox-Firewall aktivieren

Empfohlene Einstellungen

  • Machine: q35 + BIOS: OVMF (UEFI)
  • CPU Type: host
  • SCSI Controller: VirtIO SCSI single
  • Disk: Discard=on, IO thread=on
  • Network: VirtIO (virtio)
⌨️ VM erstellen (CLI) +

VMs lassen sich auch komplett per CLI erstellen und verwalten.

Linux-VM erstellen
bash

# Debian/Ubuntu Server VM
qm create 100 \
  --name "debian-server" \
  --ostype l26 \
  --machine q35 \
  --bios ovmf \
  --efidisk0 local-lvm:1,efitype=4m,pre-enrolled-keys=1 \
  --cpu host \
  --cores 2 \
  --sockets 1 \
  --memory 4096 \
  --balloon 2048 \
  --scsihw virtio-scsi-single \
  --scsi0 local-lvm:32,discard=on,iothread=1,ssd=1 \
  --ide2 local:iso/debian-12.5.0-amd64-netinst.iso,media=cdrom \
  --net0 virtio,bridge=vmbr0,firewall=1 \
  --agent enabled=1 \
  --boot order=scsi0;ide2

# VM starten
qm start 100
Windows-VM erstellen
bash

# Windows 11 VM (mit VirtIO-Treiber-ISO)
qm create 101 \
  --name "windows11" \
  --ostype win11 \
  --machine q35 \
  --bios ovmf \
  --efidisk0 local-lvm:1,efitype=4m,pre-enrolled-keys=1 \
  --tpmstate0 local-lvm:1,version=v2.0 \
  --cpu host \
  --cores 4 \
  --sockets 1 \
  --memory 8192 \
  --scsihw virtio-scsi-single \
  --scsi0 local-lvm:64,discard=on,iothread=1,ssd=1 \
  --ide0 local:iso/Win11_23H2_German_x64.iso,media=cdrom \
  --ide2 local:iso/virtio-win.iso,media=cdrom \
  --net0 virtio,bridge=vmbr0,firewall=1 \
  --agent enabled=1 \
  --boot order=scsi0;ide0

# TPM ist fuer Windows 11 erforderlich!
💡

Windows-Installation

Bei der Windows-Installation "Treiber laden" waehlen und auf die VirtIO-ISO navigieren. Dort den passenden Storage-Treiber (vioscsi) und Netzwerk-Treiber (NetKVM) laden.

🔧 VMs verwalten +

Wichtige Befehle fuer die taegliche VM-Verwaltung.

Grundlegende Operationen
bash

# Alle VMs auflisten
qm list

# VM-Status abfragen
qm status 100

# VM starten
qm start 100

# VM herunterfahren (graceful via ACPI)
qm shutdown 100

# VM sofort stoppen (wie Stecker ziehen)
qm stop 100

# VM neu starten
qm reboot 100

# VM pausieren/fortsetzen
qm suspend 100
qm resume 100

# VM-Konfiguration anzeigen
qm config 100
Hardware aendern
bash

# CPU-Cores aendern
qm set 100 --cores 4

# RAM aendern
qm set 100 --memory 8192

# Weitere Festplatte hinzufuegen
qm set 100 --scsi1 local-lvm:50,discard=on

# Festplatte vergroessern
qm resize 100 scsi0 +20G

# Netzwerk aendern
qm set 100 --net0 virtio,bridge=vmbr0,tag=100

# CD-ROM auswerfen
qm set 100 --ide2 none,media=cdrom

# Beschreibung setzen
qm set 100 --description "Webserver fuer Produktion"
Konsole & Agent
bash

# VNC-Konsole (im Terminal)
qm terminal 100

# QEMU Guest Agent Befehle
qm agent 100 ping
qm agent 100 get-osinfo
qm agent 100 get-host-name
qm agent 100 get-memory-blocks
qm agent 100 get-vcpus

# Datei in VM ausfuehren (Guest Agent)
qm agent 100 exec -- 'cat /etc/os-release'
⚠️

Guest Agent installieren

Fuer volle Funktionalitaet den QEMU Guest Agent in der VM installieren:

# Debian/Ubuntu
apt install qemu-guest-agent
systemctl enable --now qemu-guest-agent
📋 Klonen & Templates +

Templates und Klone sparen Zeit bei der Erstellung mehrerer aehnlicher VMs.

Full Clone

  • Komplette Kopie aller Daten
  • Unabhaengig vom Original
  • Braucht vollen Speicherplatz
  • Fuer: Produktive VMs

Linked Clone

  • Nur Aenderungen werden gespeichert
  • Abhaengig vom Original (Snapshot)
  • Spart Speicherplatz
  • Fuer: Tests, temporaere VMs
Template erstellen
bash

# VM herunterfahren
qm shutdown 100

# Cloud-Init vorbereiten (optional, fuer automatische Konfiguration)
qm set 100 --ide2 local-lvm:cloudinit
qm set 100 --boot order=scsi0
qm set 100 --serial0 socket --vga serial0

# In Template umwandeln
qm template 100

# Template kann nicht mehr gestartet werden!
# Nur noch klonen moeglich
VM klonen
bash

# Full Clone erstellen
qm clone 100 200 --name "webserver-prod" --full

# Linked Clone erstellen (schneller, aber abhaengig)
qm clone 100 201 --name "webserver-test"

# Clone mit anderem Storage
qm clone 100 202 --name "webserver-backup" --full --storage backup-storage
💡

Cloud-Init

Mit Cloud-Init koennen VMs automatisch konfiguriert werden (Hostname, SSH-Keys, Netzwerk). Ideal fuer Infrastructure-as-Code Workflows.

🔄 Migration zwischen Nodes +

VMs koennen zwischen Cluster-Nodes verschoben werden - online oder offline.

Migration
bash

# Offline Migration (VM muss gestoppt sein)
qm migrate 100 pve2

# Online Migration (VM laeuft weiter)
qm migrate 100 pve2 --online

# Mit lokalem Storage (kopiert Disks)
qm migrate 100 pve2 --online --with-local-disks

# Ziel-Storage angeben
qm migrate 100 pve2 --online --targetstorage local-lvm
⚠️

Voraussetzungen fuer Live-Migration

  • Gemeinsamer Storage (Ceph, NFS, iSCSI) ODER --with-local-disks
  • Gleiche CPU-Features (oder --force)
  • Cluster korrekt konfiguriert
  • Ausreichend RAM auf Ziel-Node
🎮 GPU Passthrough (PCI) +

Dedizierte Grafikkarte direkt an eine VM durchreichen.

IOMMU aktivieren
bash

# /etc/default/grub anpassen
# Intel:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

# AMD:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

# Grub aktualisieren
update-grub
reboot
VFIO-Module laden
bash

# /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

# GPU von Host-Treiber trennen
# /etc/modprobe.d/vfio.conf
# GPU-IDs mit "lspci -nn" herausfinden
options vfio-pci ids=10de:2684,10de:22ba disable_vga=1

# Blacklist Host-Treiber
# /etc/modprobe.d/blacklist.conf
blacklist nouveau
blacklist nvidia

# Initramfs aktualisieren
update-initramfs -u -k all
reboot
GPU zur VM hinzufuegen
bash

# PCI-Geraete auflisten
lspci -nn | grep -i nvidia

# GPU zur VM hinzufuegen (Web-UI: Hardware → Add → PCI Device)
qm set 100 --hostpci0 0000:01:00,pcie=1,x-vga=1

# Fuer NVIDIA: ROM-Bar deaktivieren falls Probleme
qm set 100 --hostpci0 0000:01:00,pcie=1,x-vga=1,rombar=0
⚠️

GPU Passthrough Hinweise

  • Nicht alle GPUs/Mainboards unterstuetzen Passthrough
  • IOMMU-Gruppen beachten (ACS Override evtl. noetig)
  • GPU kann nur von einer VM gleichzeitig genutzt werden
  • Fuer Gaming/CAD: CPU-Type host wichtig
🔧 Troubleshooting +
Haeufige Probleme
bash

# VM startet nicht - Logs pruefen
qm start 100
journalctl -u pve-qemu-server@100 -e

# UEFI Boot-Probleme
# EFI-Disk neu erstellen
qm set 100 --efidisk0 local-lvm:1,efitype=4m

# Kein Netzwerk in der VM
# Bridge pruefen
brctl show
ip a show vmbr0

# VirtIO-Treiber fehlen (Windows)
# VirtIO-ISO als zweites CD-Laufwerk einbinden

# VM haengt beim Shutdown
# Forcierter Stop
qm stop 100 --skiplock

# Disk voll
df -h /var/lib/vz
lvs
Performance-Probleme
bash

# CPU-Auslastung pruefen
qm monitor 100
# Dann: info cpus

# I/O-Statistiken
qm monitor 100
# Dann: info block

# Live-Ansicht der VM-Ressourcen
watch -n 1 'qm status 100 --verbose'

# Host-CPU-Typ pruefen (fuer type: host)
cat /proc/cpuinfo | grep "model name" | head -1

Hilfe bei der VM-Einrichtung?

Wir unterstuetzen bei der Planung und Konfiguration deiner virtuellen Infrastruktur.

Beratung anfragen →