ZFS unter Proxmox: Datasets, Snapshots und ARC-Tuning im Produktivbetrieb
Warum ZFS die beste Wahl für Proxmox ist – wenn man es richtig macht
ZFS ist nicht einfach ein Dateisystem – es ist ein komplettes Storage-Universum mit integriertem RAID, Copy-on-Write und Checksummen. Wer Proxmox im Produktivbetrieb nutzt, kommt um ZFS kaum herum. Doch zwischen Basis-Konfiguration und optimiertem Betrieb liegen Welten. Hier zeige ich, wie Sie das Maximum aus Ihrem ZFS-Pool herausholen.
Die Vorteile von ZFS sind mannigfaltig: Datenintegrität durch End-to-End-Checksummen, flexible Speicherpools, integriertes Volume Management, Snapshots und Klone, Kompression und Deduplizierung. Für virtualisierte Umgebungen wie Proxmox VE bietet ZFS eine robuste und performante Basis, vorausgesetzt, die Konfiguration ist auf den Einsatzzweck abgestimmt.
Dataset-Strategie: Mehr als nur Partitionen
ZFS-Datasets sind die scharfe Waffe gegen Storage-Chaos. Anders als klassische Partitionen können Sie sie dynamisch anpassen und mit individuellen Eigenschaften versehen. Eine durchdachte Dataset-Struktur ist der Grundstein für eine effiziente Verwaltung und Performance-Optimierung.
Beispiel 1: Dedizierte Datasets für VM-Images und Container.
zfs create -o rec=8 -o compression=lz4 -o acltype=posixacl -o xattr=sa proxmox/vm
zfs create -o rec=8 -o compression=lz4 -o acltype=posixacl -o xattr=sa proxmox/container
Diese Datasets können unabhängig voneinander gemountet, mit unterschiedlichen Kompressionsalgorithmen versehen, mit Quotas versehen oder für Snapshots konfiguriert werden. Das ermöglicht eine granulare Kontrolle und Optimierung.
Beispiel 2: Datasets für Backups und die eigentlichen VM-Daten.
Trennung von produktiven Daten und Backups auf unterschiedlichen Datasets erlaubt es, Backup-Snapshots einfacher zu verwalten und unerwünschte Änderungen an produktiven Daten durch versehentliches Überschreiben von Backup-Dateien zu verhindern. Dies ist besonders wichtig, wenn Sie mit Snapshots arbeiten.
Performance-Tuning: Das ARC optimieren
Der Adaptive Replacement Cache (ARC) ist das Herzstück der ZFS-Performance. Er ist ein RAM-basierter Cache, der Leseanfragen beschleunigt, indem häufig genutzte Daten im Arbeitsspeicher vorgehalten werden. Die Standardeinstellungen sind oft nicht optimal für produktive Umgebungen.
Die wichtigsten Parameter für das ARC-Tuning sind:
zfs_arc_max: Begrenzt die maximale Größe des ARC. Ein zu kleiner Wert limitiert die Cache-Performance, ein zu großer Wert kann zu Instabilität des Systems führen, wenn zu viel RAM für ZFS reserviert wird und das Betriebssystem oder Anwendungen aushungert.zfs_arc_min: Definiert die minimale Größe des ARC.
Für Proxmox VE mit vielen VMs und Containern kann es sinnvoll sein, den ARC großzügig zu dimensionieren, aber niemals den gesamten verfügbaren RAM zu beanspruchen. Ein guter Ausgangspunkt ist, 25-50% des verfügbaren RAMs für den ARC zu reservieren, abhängig von der Systemlast und der Anzahl der laufenden VMs. Die genaue Einstellung hängt stark von der jeweiligen Hardware und der Workload ab. Monitoring ist hier entscheidend.
Sie können die aktuellen Werte mit arc_summary oder arcstat einsehen und die maximal zulässige Größe über die sysctl-Parameter anpassen. Änderungen sollten in /etc/sysctl.conf persistent gemacht werden.

Datensicherung mit ZFS Snapshots
ZFS Snapshots sind ein mächtiges Werkzeug für die Datensicherung. Sie sind schreibgeschützte Kopien eines Datasets zu einem bestimmten Zeitpunkt. Snapshots sind extrem schnell erstellt und verbrauchen initial keinen zusätzlichen Speicherplatz, da sie nur die Änderungen zum Zeitpunkt der Erstellung speichern.
Snapshot-Strategie:
- Häufigkeit: Legen Sie fest, wie oft Snapshots erstellt werden sollen (z.B. stündlich, täglich, wöchentlich).
- Aufbewahrung: Definieren Sie, wie lange Snapshots aufbewahrt werden sollen, um Speicherplatz zu sparen. Eine gängige Praxis ist die Aufbewahrung von stündlichen Snapshots für 24 Stunden, täglichen für 7 Tage und wöchentlichen für 4 Wochen.
- Automatisierung: Nutzen Sie Skripte oder Proxmox-interne Funktionen zur automatischen Erstellung und Bereinigung von Snapshots. Proxmox bietet hierfür gute Bordmittel.
Für die langfristige Archivierung oder die Sicherung auf ein externes Speichermedium sollten Sie ZFS-Send/Receive-Befehle nutzen, um Snapshots auf einen anderen ZFS-Pool oder Server zu übertragen. Dies schützt vor physischem Hardwareversagen.
Beispiel für ZFS Send/Receive:
# Snapshot auf Quellsystem erstellen
zfs snapshot proxmox/vm@backup-2023-10-27
# Snapshot auf Zielsystem senden (rekursiv)
zfs send -R proxmox/vm@backup-2023-10-27 | ssh user@zielserver zfs recv -F backup/vm-backup
Diese Methode ist extrem effizient, da nur die Änderungen seit dem letzten gesendeten Snapshot übertragen werden.
Zusätzliche Optimierungen und Überlegungen
Kompression: Aktivieren Sie Kompression (z.B. lz4) auf Ihren Datasets. lz4 bietet einen guten Kompromiss zwischen Kompressionsrate und CPU-Last und ist oft eine deutliche Beschleunigung für I/O-intensive Workloads.
Recordsize: Für VM-Images sind oft größere recordsize-Werte (z.B. 1M) performanter als die Standardwerte, da sie die Fragmentierung reduzieren können. Container und Datenbanken können von kleineren Werten profitieren. Passen Sie dies pro Dataset an.
TRIM/Discard: Stellen Sie sicher, dass TRIM für SSDs aktiviert ist, wenn Sie ZFS auf Solid State Drives nutzen. Dies verbessert die Lebensdauer und Performance der SSDs.
Monitoring: Regelmäßiges Monitoring der ZFS-Pools und des ARC ist unerlässlich. Tools wie zpool iostat, arc_summary und arcstat geben wertvolle Einblicke in die Performance und den Zustand Ihres Speichersystems.
Wenn Sie diese Praktiken konsequent anwenden, verwandeln Sie ZFS von einem einfachen Dateisystem in eine hochperformante und ausfallsichere Speicherlösung für Ihre Proxmox-Umgebung.
