In der Welt der Virtualisierung ist Proxmox VE (Virtual Environment) eine feste Größe. Als Open-Source-Plattform ermöglicht es die Verwaltung von virtuellen Maschinen (VMs) und Containern auf einer einzigen Hardware-Basis. Oft reicht die standardmäßige Zuweisung von virtuellem Speicher jedoch nicht aus, insbesondere wenn maximale Performance, direkter Zugriff auf Hardware-Informationen (wie SMART-Daten) oder die Nutzung spezialisierter Speichersoftware (wie TrueNAS oder FreeNAS) in einer VM erforderlich ist. Hier kommt das Festplatten-Passthrough ins Spiel – eine mächtige Funktion, die es einer VM ermöglicht, eine physische Festplatte (oder einen ganzen Controller) direkt zu steuern, so als wäre sie physisch mit dieser verbunden.
Diese umfassende Anleitung führt Sie durch die notwendigen Schritte und Überlegungen, um eine Festplatte oder sogar einen kompletten SATA/SAS-Controller direkt an eine Proxmox VM durchzuschleifen. Ziel ist es, Ihnen das Wissen und die Werkzeuge an die Hand zu geben, um Ihre Virtualisierungsumgebung optimal zu konfigurieren und von den Vorteilen des direkten Zugriffs zu profitieren.
### Warum direkter Zugriff auf Speicher in einer Proxmox VM?
Die meisten VMs erhalten ihre Festplatten als virtuelle Blockgeräte, die von Proxmox VE bereitgestellt werden. Das ist für die meisten Anwendungsfälle ausreichend und bietet Vorteile wie einfache Snapshots und Live-Migration. Es gibt jedoch Szenarien, in denen dies an seine Grenzen stößt:
* **Maximale Performance:** Durch das Passthrough wird der Overhead der Virtualisierungsschicht minimiert, was zu einer nahezu nativen Speicher-Performance führen kann.
* **Direkter Zugriff auf Hardware:** Programme in der VM können SMART-Daten auslesen, Firmware-Updates durchführen oder andere tiefgreifende Interaktionen mit der Festplatte vornehmen, was bei virtuellen Festplatten nicht möglich ist.
* **Spezialisierte Speichersoftware:** Anwendungen wie TrueNAS (ehemals FreeNAS), OpenMediaVault oder selbst konfigurierte Software-RAID-Lösungen (z.B. ZFS) profitieren enorm davon, wenn sie direkten Zugriff auf physische Festplatten und idealerweise den gesamten Controller haben. Dies ermöglicht eine effizientere Datenverwaltung und die Nutzung von Features wie ZFS-Pools mit voller Funktionalität.
* **Lizenzierung oder Kompatibilität:** Manchmal erfordern bestimmte Betriebssysteme oder Anwendungen (z.B. Windows Server mit speziellen RAID-Konfigurationen) den direkten Zugriff auf spezifische Hardware.
* **Hardware-RAID-Karten:** Wenn Sie eine Hardware-RAID-Karte verwenden und deren Funktionalität vollständig in einer VM nutzen möchten, ist ein Controller-Passthrough unerlässlich.
### Grundlagen: Was Sie vor dem Start wissen müssen
Bevor wir in die Details eintauchen, ist es entscheidend, die Voraussetzungen und potenziellen Risiken zu verstehen.
#### IOMMU (Input-Output Memory Management Unit)
Der wichtigste Grundstein für jedes Passthrough ist die IOMMU. Dies ist eine Hardware-Komponente (und eine entsprechende BIOS-Einstellung), die es virtuellen Maschinen ermöglicht, direkten und sicheren Zugriff auf physische Hardware-Geräte zu erhalten, ohne dass die gesamte Systemstabilität gefährdet wird.
* **Intel-Systeme:** Erfordert „Intel VT-d” (Virtualization Technology for Directed I/O).
* **AMD-Systeme:** Erfordert „AMD-V” und „AMD-Vi” (IOMMU).
Stellen Sie sicher, dass diese Funktionen im BIOS/UEFI Ihres Servers aktiviert sind. Ohne IOMMU ist kein PCIe-Passthrough möglich.
#### Hardware-Anforderungen und Kompatibilität
Nicht jede Hardware ist für Passthrough geeignet:
* **CPU:** Muss IOMMU unterstützen.
* **Mainboard:** Muss IOMMU unterstützen und oft eine Option im BIOS/UEFI haben, um sie zu aktivieren. Einige Mainboards gruppieren PCI-Geräte in IOMMU-Gruppen, die nicht geteilt werden können, was das Passthrough erschweren oder unmöglich machen kann (z.B. wenn eine Netzwerkkarte und ein SATA-Controller in derselben Gruppe sind).
* **SATA/SAS-Controller:** Für das Controller-Passthrough ist es ideal, einen dedizierten HBA (Host Bus Adapter) im IT-Modus (Initiator Target Mode, oft als „LSI HBA” bekannt) zu verwenden. Diese Controller sind speziell dafür konzipiert, direkten Zugriff auf Festplatten zu ermöglichen, ohne eigene RAID-Funktionen zu implementieren, die die ZFS-Verwaltung stören könnten.
#### Risikohinweis: Backup ist Pflicht!
Das direkte Durchschleifen von Festplatten birgt Risiken. Eine Fehlkonfiguration kann zu Datenverlust führen. Stellen Sie sicher, dass Sie alle wichtigen Daten gesichert haben, bevor Sie Änderungen an Ihrer Speicher- oder Virtualisierungskonfiguration vornehmen.
### Methode 1: Direkter Festplatten-Passthrough (Single Disk Passthrough)
Dies ist die einfachere Methode und eignet sich, wenn Sie eine oder mehrere *einzelne* Festplatten an eine VM durchschleifen möchten, ohne den gesamten Controller zu übergeben. Proxmox bindet die Festplatte als virtuelles SCSI-Gerät in die VM ein, agiert aber im Hintergrund als „Proxy” für den direkten Zugriff.
#### Wann diese Methode verwenden?
* Sie möchten eine einzelne Festplatte oder SSD einer VM zuweisen.
* Sie benötigen Zugriff auf SMART-Daten oder nahe native Performance.
* Sie möchten Proxmox-Features wie Snapshots für andere virtuelle Festplatten der VM beibehalten.
* Der Host soll weiterhin Zugriff auf den SATA-Controller haben.
#### Schritt-für-Schritt-Anleitung
1. **Festplatte identifizieren (mittels `by-id`):**
Es ist entscheidend, die Festplatte über ihre stabile ID zu identifizieren, nicht über ` /dev/sdX`, da diese Bezeichnung nach einem Neustart variieren kann.
Öffnen Sie eine Shell auf Ihrem Proxmox-Host und führen Sie aus:
„`bash
ls -l /dev/disk/by-id/
„`
Suchen Sie die gewünschte Festplatte in der Ausgabe. Sie sehen Einträge wie `ata-WDC_WD1000EZEX-00BN5A0_WD-WCC3FXXXXXXX` oder `scsi-35000c500xxxxxxx`. Merken Sie sich den vollständigen Pfad (z.B. `/dev/disk/by-id/ata-WDC_WD1000EZEX-00BN5A0_WD-WCC3FXXXXXXX`).
2. **Festplatte zur VM hinzufügen:**
Sie können dies entweder über die Proxmox Web-GUI oder die Kommandozeile tun. Die Kommandozeile ist oft präziser.
* **Per Kommandozeile (empfohlen):**
Ersetzen Sie `
„`bash
qm set
„`
* `scsi0`: Definiert den virtuellen SCSI-Slot (Sie können `scsi1`, `scsi2` usw. verwenden, falls bereits `scsi0` belegt ist).
* `cache=writeback`: Bietet gute Performance, birgt aber bei Stromausfall ein geringes Datenverlustrisiko. `cache=none` ist sicherer, aber langsamer.
* `discard=on`: Ermöglicht TRIM-Befehle, wichtig für SSDs, um die Leistung über die Zeit zu erhalten. Kann auch für HDDs sinnvoll sein.
* `ssd=1`: Teilt dem Gast-Betriebssystem mit, dass es sich um eine SSD handelt, was zu optimiertem Verhalten führen kann. Auch für HDDs in bestimmten Szenarien nützlich.
* **Per Proxmox Web-GUI:**
* Navigieren Sie zu Ihrer VM.
* Wählen Sie „Hardware”.
* Klicken Sie auf „Hinzufügen” -> „Festplatte”.
* Wählen Sie „SCSI” als Bustyp und „SCSI Controller” auf „VirtIO SCSI”.
* Wählen Sie unter „Disk” die Option „Rohes Gerät” (Raw device) aus.
* Geben Sie den vollständigen Pfad `/dev/disk/by-id/
* Aktivieren Sie bei Bedarf „SSD Emulation”, „Discard” und wählen Sie den gewünschten „Cache”-Modus.
* Klicken Sie auf „Hinzufügen”.
3. **VM starten und Festplatte im Gast-OS konfigurieren:**
Starten Sie die VM. Das Gast-Betriebssystem sollte die Festplatte als neues Laufwerk erkennen. Sie können sie nun wie eine physisch angeschlossene Festplatte partitionieren und formatieren.
#### Vorteile und Nachteile dieser Methode
* **Vorteile:** Einfache Konfiguration, weiterhin Zugriff auf Host-SATA-Controller, VM-Snapshots der VM-Konfiguration und der virtuellen Festplatten sind weiterhin möglich (aber *nicht* der durchgeschleiften physischen Disk selbst).
* **Nachteile:** Nicht ganz so „direkt” wie PCIe-Passthrough, da Proxmox immer noch eine kleine Schicht dazwischen legt. Der Host hat weiterhin Zugriff auf die Festplatte, was in spezialisierten Setups (z.B. TrueNAS ZFS) unerwünscht sein kann, da ZFS direkten und exklusiven Zugriff auf die Blockgeräte erwartet.
### Methode 2: PCIe-Passthrough eines SATA/SAS-Controllers (Controller Passthrough)
Dies ist die „Königsdisziplin” des Passthroughs und bietet einer VM vollständige und exklusive Kontrolle über einen physischen Hardware-Controller und alle daran angeschlossenen Laufwerke. Dies ist ideal für TrueNAS/FreeNAS, die eine HBA-Karte im IT-Modus (Initiator-Target) erwarten, um ZFS-Pools optimal zu verwalten.
#### Wann diese Methode verwenden?
* Sie benötigen maximale Performance und direkte Hardware-Kontrolle.
* Sie möchten spezielle RAID-Karten (HBA) oder Grafikkarten (GPU) einer VM zuweisen.
* Sie betreiben Software-RAID-Lösungen (z.B. ZFS in TrueNAS), die exklusiven Zugriff auf die physischen Laufwerke verlangen.
* Der Proxmox-Host soll keinen Zugriff auf die an diesen Controller angeschlossenen Laufwerke haben.
#### Schritt-für-Schritt-Anleitung
1. **IOMMU in Proxmox aktivieren:**
Dies ist der erste und wichtigste Schritt für *jedes* PCIe-Passthrough.
* Bearbeiten Sie die GRUB-Konfigurationsdatei:
„`bash
nano /etc/default/grub
„`
* Suchen Sie die Zeile `GRUB_CMDLINE_LINUX_DEFAULT`.
* Für Intel CPUs fügen Sie `intel_iommu=on` hinzu. Die Zeile könnte dann so aussehen:
`GRUB_CMDLINE_LINUX_DEFAULT=”quiet intel_iommu=on”`
* Für AMD CPUs fügen Sie `amd_iommu=on iommu=pt` hinzu:
`GRUB_CMDLINE_LINUX_DEFAULT=”quiet amd_iommu=on iommu=pt”`
(Die Option `iommu=pt` ist optional, wird aber oft empfohlen, um Probleme zu vermeiden.)
* Speichern Sie die Datei (Strg+O, Enter, Strg+X).
* Aktualisieren Sie GRUB und starten Sie das System neu:
„`bash
update-grub
reboot
„`
* Nach dem Neustart überprüfen Sie, ob IOMMU aktiv ist:
„`bash
dmesg | grep -e DMAR -e IOMMU
„`
Sie sollten Meldungen sehen, die auf die Aktivierung von IOMMU hinweisen. Überprüfen Sie auch, ob IOMMU-Gruppen verfügbar sind:
„`bash
for d in /sys/kernel/iommu_groups/*/devices/*; do nuke=$(basename $d); printf ‘IOMMU Group %s %sn’ „$(basename $(dirname $d))” „$(lspci -nns $nuke)”; done
„`
Suchen Sie hier Ihren Controller. Idealerweise sollte er in einer eigenen IOMMU-Gruppe sein, oder zumindest mit Geräten, die Sie ebenfalls an die VM durchschleifen möchten.
2. **Notwendige Module laden und Treiber für Passthrough vorbereiten:**
Wir müssen Proxmox anweisen, die zu passthrough-enden Geräte nicht mit seinen eigenen Treibern zu initialisieren, sondern sie für den `vfio`-Treiber vorzuhalten.
* Erstellen Sie eine Konfigurationsdatei für `vfio`:
„`bash
nano /etc/modules
„`
Fügen Sie die folgenden Zeilen hinzu:
„`
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
„`
* Blockieren Sie die Standardtreiber des Geräts.
Finden Sie zunächst die Vendor-ID und Device-ID Ihres Controllers (z.B. LSI HBA):
„`bash
lspci -nn
„`
Suchen Sie Ihren Controller in der Ausgabe (z.B. `01:00.0 SCSI storage controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [1000:0072]`). Die ID in den Klammern `[1000:0072]` ist Vendor-ID:Device-ID.
* Erstellen Sie eine `vfio.conf`-Datei:
„`bash
echo „options vfio-pci ids=1000:0072” > /etc/modprobe.d/vfio.conf
„`
Ersetzen Sie `1000:0072` durch die IDs Ihres Controllers. Wenn Sie mehrere Geräte isolieren möchten, trennen Sie diese mit Kommas (z.B. `ids=1000:0072,8086:1521`).
* Verhindern Sie, dass Proxmox die Geräte über die Blacklist erkennt:
„`bash
echo „blacklist nouveau” >> /etc/modprobe.d/blacklist.conf
echo „blacklist nvidia” >> /etc/modprobe.d/blacklist.conf
echo „blacklist radeon” >> /etc/modprobe.d/blacklist.conf
# Fügen Sie hier die passenden Blacklist-Einträge für Ihren Controller hinzu, falls er einen eigenen Kernel-Treiber hat
# Beispiel für LSI/Broadcom (mpt2sas oder mpt3sas):
# echo „blacklist mpt2sas” >> /etc/modprobe.d/blacklist.conf
# echo „blacklist mpt3sas” >> /etc/modprobe.d/blacklist.conf
„`
**Wichtiger Hinweis:** Wenn Sie einen Storage-Controller durchschleifen, stellen Sie sicher, dass keine anderen Systemfestplatten an diesem Controller hängen, da der Host den Zugriff darauf verlieren wird!
* Aktualisieren Sie die Initramfs und starten Sie neu:
„`bash
update-initramfs -u -k all
reboot
„`
* Überprüfen Sie nach dem Neustart, ob der `vfio-pci` Treiber die Kontrolle über das Gerät übernommen hat:
„`bash
lspci -nnk | grep -iE „vga|3d|display|audio|raid|scsi” -A7
„`
Suchen Sie nach Ihrem Controller. Unter `Kernel driver in use` sollte `vfio-pci` stehen.
3. **Controller zur VM hinzufügen:**
* **Per Proxmox Web-GUI:**
* Navigieren Sie zu Ihrer VM.
* Wählen Sie „Hardware”.
* Klicken Sie auf „Hinzufügen” -> „PCI-Gerät”.
* Wählen Sie im Dropdown-Menü „PCI-Gerät” Ihren Controller aus (er wird mit seiner PCI-Adresse `XX:XX.X` angezeigt).
* Aktivieren Sie „Primäres PCI-Gerät” (falls es eine GPU ist, die als Hauptanzeige dienen soll).
* Aktivieren Sie „ROM-Bar deaktivieren” (Disable ROM-Bar) und „PCIe” (falls Ihr System PCIe unterstützt und der Controller dies erfordert, was meist der Fall ist).
* Klicken Sie auf „Hinzufügen”.
* **Per Kommandozeile:**
„`bash
qm set
„`
Ersetzen Sie `
* `hostpci0`: Der Slot für das durchgeschleifte PCI-Gerät.
* `pcie=1`: Sollte für moderne PCIe-Geräte immer gesetzt werden.
* `x-vga=on`: Nur für Grafikkarten, die als Hauptanzeige der VM dienen sollen.
* `rombar=0`: Oft für bestimmte ältere oder problematische Geräte erforderlich, kann aber auch weggelassen werden, wenn es funktioniert.
4. **VM starten und Festplatten im Gast-OS konfigurieren:**
Starten Sie die VM. Das Gast-Betriebssystem sollte nun den gesamten Controller und alle daran angeschlossenen Festplatten direkt erkennen. Sie können nun alle Funktionalitäten des Controllers (z.B. Hardware-RAID-Konfiguration) oder der angeschlossenen Festplatten (z.B. ZFS-Pools) im Gast-Betriebssystem nutzen.
#### Wichtige Überlegungen und Einschränkungen
* **Host verliert Zugriff:** Sobald ein Controller durchgeschleift ist, verliert der Proxmox-Host jeglichen Zugriff auf diesen Controller und die daran angeschlossenen Laufwerke. Stellen Sie sicher, dass keine wichtigen System-Disks oder VM-Speicherpools über diesen Controller laufen.
* **Keine Live-Migration:** Eine VM mit durchgeschleiften PCI-Geräten kann nicht live migriert werden.
* **Keine VM-Snapshots:** VM-Snapshots sind bei PCIe-Passthrough problematisch und werden nicht empfohlen. Während der Status der VM selbst eingefroren werden könnte, ist der Zustand des physischen PCI-Geräts (und der daran angeschlossenen Disks) nicht Teil des Snapshots, was zu Inkonsistenzen führen kann.
* **IOMMU-Gruppen:** Wenn Ihr Controller mit anderen nicht durchschleifbaren Geräten in derselben IOMMU-Gruppe ist, kann das Passthrough unmöglich sein. Dies ist ein bekanntes Problem bei manchen Mainboards und erfordert unter Umständen fortgeschrittene Kernel-Patches (ACS Override) oder andere Hardware.
* **Firmware:** Einige HBA-Karten (z.B. LSI) müssen im „IT-Modus” (Initiator Target) geflasht werden, um optimal mit Software-RAID-Lösungen wie ZFS zu funktionieren.
### Troubleshooting & Häufige Probleme
* **VM startet nicht oder bleibt hängen:**
* Überprüfen Sie die IOMMU-Aktivierung (`dmesg | grep -e DMAR -e IOMMU`).
* Stellen Sie sicher, dass der `vfio-pci` Treiber den Controller übernommen hat (`lspci -nnk`).
* Überprüfen Sie die korrekte PCI-ID in der VM-Konfiguration.
* Versuchen Sie, `rombar=0` hinzuzufügen oder zu entfernen.
* **Fehlermeldungen im Gast-OS:**
* Prüfen Sie, ob die Kernel-Parameter für IOMMU korrekt gesetzt sind.
* Überprüfen Sie, ob die Blacklist für native Treiber korrekt ist.
* Manchmal hilft ein erneutes `update-initramfs -u -k all` und ein Reboot des Hosts.
* **Controller nicht in eigener IOMMU-Gruppe:** Dies ist ein komplexeres Problem. Suchen Sie online nach „ACS Override Proxmox” für mögliche Lösungen, beachten Sie jedoch, dass dies mit Risiken verbunden sein kann und nicht von Proxmox unterstützt wird.
### Best Practices für den Passthrough
* **Immer Backups erstellen:** Dies kann nicht oft genug betont werden.
* **`by-id` verwenden:** Bei der Einzelplatten-Zuweisung immer die `/dev/disk/by-id/` Pfade nutzen, um Stabilität zu gewährleisten.
* **Dedizierte Hardware:** Verwenden Sie nach Möglichkeit dedizierte Controller für das Passthrough, um Konflikte zu vermeiden.
* **Dokumentation:** Führen Sie detaillierte Aufzeichnungen über Ihre Konfiguration, insbesondere über die Vendor/Device-IDs und PCI-Adressen.
* **Testen:** Testen Sie die Funktionalität nach jeder größeren Änderung gründlich.
* **TrueNAS/FreeNAS:** Für ZFS in TrueNAS/FreeNAS ist der PCIe-Passthrough eines dedizierten HBA im IT-Modus die bevorzugte und stabilste Methode.
### Fazit: Volle Kontrolle für maximale Flexibilität
Das direkte Durchschleifen von HDDs oder Controllern in Proxmox VE ist eine äußerst mächtige Funktion, die Ihnen volle Kontrolle über Ihre Speicherhardware in virtuellen Umgebungen bietet. Ob Sie nun maximale Performance für anspruchsvolle Anwendungen benötigen, SMART-Daten auslesen möchten oder spezialisierte Speicherlösungen wie TrueNAS betreiben – mit Passthrough sind die Möglichkeiten vielfältig.
Während die Einrichtung, insbesondere für PCIe-Passthrough, etwas technisches Verständnis und sorgfältige Planung erfordert, sind die Vorteile für bestimmte Anwendungsfälle unbestreitbar. Indem Sie diese definitive Anleitung befolgen und die genannten Best Practices beachten, können Sie Ihre Proxmox-Umgebung auf ein neues Niveau der Flexibilität und Leistung heben. Experimentieren Sie verantwortungsvoll und genießen Sie die volle Kontrolle über Ihre virtuellen Maschinen!