ZFS Dateisystem Grundlagen Einrichtung
ZFS Dateisystem Grundlagen und Einrichtung unter Linux
Was ist ZFS?
ZFS (Zettabyte File System) ist ein modernes Dateisystem und Volume Manager in einem, das von Sun Microsystems ursprünglich für Solaris entwickelt wurde. Mit dem OpenZFS-Projekt ist ZFS nun auf Linux, macOS und BSD verfügbar. ZFS bietet fortgeschrittene Funktionen wie Copy-on-Write (CoW), Datenintegritätsprüfungen mit SHA-256-Checksums, Snapshots, RAID-Z (Parity RAID) und optionale Kompression – alles integriert in einem einzigen System.
Kernkonzepte und Features von ZFS
- Copy-on-Write (CoW): Daten werden nicht überschrieben, sondern neue Kopien erstellt. Dies ermöglicht Snapshots und sichere Rollbacks
- Checksums (SHA-256, Fletcher): Jeder Datenblock hat einen Checksum zur automatischen Fehler-Erkennung und Self-Healing
- Compression: Optional transparente Kompression (LZ4, ZSTD, GZIP) für Speichereffizienz ohne Performance-Verlust
- Deduplication: Identische Blöcke werden nur einmal gespeichert (RAM-intensiv, mit Vorsicht verwenden)
- Snapshots: Point-in-Time Kopien ohne zusätzlichen physischen Platz (CoW-basiert)
- Clones: Beschreibbare Kopien von Snapshots als unabhängige Filesystems
- RAID-Z: Striping mit Parity (ähnlich RAID-5/6/7, aber besser mit selbstheilend)
- Self-Healing: Automatische Reparatur von korrupten Blöcken bei RAID-Z mittels Checksum-Vergleich
- Encryption: Native AES-256-GCM Verschlüsselung auf Dataset-Ebene
- ARC Cache: Adaptive Replacement Cache (ähnlich wie OS-Page Cache, aber intelligenter)
Installation auf Ubuntu 22.04
Installieren Sie ZFS Tools und Kernel-Module:
sudo apt update sudo apt install -y zfsutils-linux
Überprüfen Sie die Installation:
zfs version
Die Ausgabe sollte die ZFS on Linux Version anzeigen.
Laden Sie das ZFS Kernel-Modul:
sudo modprobe zfs
Überprüfen Sie, dass das Modul geladen ist:
lsmod | grep zfs
ZFS Terminologie und Konzepte
- Pool (zpool): Die oberste Ebene – ein logischer Speicherpool aus einem oder mehreren VDEVs
- VDEV (Virtual Device): Ein virtuelles Gerät, das eine physische Disk, eine Partition oder ein Array sein kann
- Dataset (zfs): Ein Dateisystem oder Clone in einem Pool. Datasets können verschachtelt sein (z.B. tank/data/users)
- Snapshot: Eine Read-Only Kopie eines Datasets zu einem bestimmten Zeitpunkt
- ZVOL: Ein Block-Device aus einem Pool (ähnlich LVM-LV)
- Record Size: Blockgröße für Dateisystem-Operationen (Standard: 128 KB)
- Ashift: Sektorgröße der zugrunde liegenden Disks (4K für moderne Disks = ashift=12)
Schritt 1: Einfachen Pool auf einer Disk erstellen
Identifizieren Sie die verfügbare Disk:
lsblk sudo fdisk -l
Erstellen Sie einen einfachen Pool (z.B. auf /dev/sdb):
sudo zpool create tank /dev/sdb
Dies erstellt einen Pool namens "tank" und automountet ihn unter /tank. Überprüfen Sie:
zpool list zfs list
Schritt 2: RAID-1 (Mirror) Pool erstellen
Für Redundanz erstellen Sie einen gespiegelten Pool (2 Disks):
sudo zpool create tank mirror /dev/sdb /dev/sdc
Dies speichert alle Daten auf beiden Disks. Bei Ausfall einer Disk funktioniert das System weiter.
Schritt 3: RAID-Z1 Pool erstellen
RAID-Z1 ist ähnlich wie RAID-5 (mit Parity-Block) – toleriert einen Disk-Ausfall mit 3+ Disks:
sudo zpool create tank raidz /dev/sdb /dev/sdc /dev/sdd
Nutzbarer Space: (N-1) * Disk-Größe (z.B. mit 3x 4TB = 8TB nutzbar)
Schritt 4: RAID-Z2 und RAID-Z3
RAID-Z2 (ähnlich RAID-6) toleriert 2 Disk-Ausfälle:
sudo zpool create tank raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sddd
RAID-Z3 toleriert 3 Disk-Ausfälle:
sudo zpool create tank raidz3 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
Schritt 5: Pool-Status überprüfen
Zeigen Sie alle Pools an:
zpool list
Detaillierte Pool-Informationen:
zpool status tank
Dies zeigt die Zustand aller Disks, RAID-Status und Errors.
I/O-Statistiken anzeigen:
zpool iostat tank 1
Dies zeigt kontinuierliche I/O-Statistiken (aktualisiert alle 1 Sekunde).
Schritt 6: Datasets erstellen und verwalten
Erstellen Sie ein Dataset für organisierte Speicherung:
sudo zfs create tank/data sudo zfs create tank/backups sudo zfs create tank/data/users
Dies erstellt eine Hierarchie von Filesystems. Überprüfen Sie:
zfs list
Schritt 7: Mount Points und Eigenschaften
Zeigen Sie den Mount Point eines Datasets an:
zfs get mountpoint tank/data
Der Standard Mount Point ist /
Ändern Sie den Mount Point:
sudo zfs set mountpoint=/mnt/mydata tank/data
Das Dataset wird sofort auf den neuen Punkt gemountet.
Schritt 8: Kompression aktivieren
Aktivieren Sie transparente Kompression auf einem Dataset:
sudo zfs set compression=lz4 tank/data
LZ4 ist schnell mit hohem Kompressionsverhältnis. Andere Optionen: - zstd: noch bessere Kompression, aber langsamer - gzip: hohe Kompression, deutlich langsamer - lz4: Balance zwischen Speed und Ratio
Überprüfen Sie das Kompressionsverhältnis:
zfs get compressratio tank/data
Dies zeigt wie viel Speicher durch Kompression gespart wird.
Schritt 9: Snapshots erstellen und verwalten
Erstellen Sie einen Snapshot eines Datasets:
sudo zfs snapshot tank/data@backup-2026-01-01
Listen Sie alle Snapshots auf:
zfs list -t snapshot
Detaillierte Snapshot-Informationen:
zfs list -t snapshot tank/data
Snapshot mounten (Read-Only)
Öffnen Sie einen Snapshot als separates Filesystem:
mkdir -p /mnt/backup-snapshot sudo mount -t zfs tank/data@backup-2026-01-01 /mnt/backup-snapshot
Der Snapshot ist Read-Only und kann zum Wiederherstellen von Dateien verwendet werden.
Rollback zu Snapshot
Stellen Sie einen Dataset auf den Zustand eines früheren Snapshots zurück:
sudo zfs rollback tank/data@backup-2026-01-01
Alle Datenänderungen seit dem Snapshot werden verworfen!
Snapshot löschen
sudo zfs destroy tank/data@backup-2026-01-01
Schritt 10: Replizierung mit zfs send/receive
Erstellen Sie ein Backup auf Remote-System über SSH:
sudo zfs send tank/data@backup-2026-01-01 | ssh user@remote-server "zfs receive backup-tank/data"
Dies sendet den gesamten Snapshot-Inhalt komprimiert über SSH zu einem Remote-System.
Für inkrementelle Backups (nur Änderungen seit letztem Snapshot):
sudo zfs send -i tank/data@backup-2026-01-01 tank/data@backup-2026-01-02 | ssh user@remote-server "zfs receive backup-tank/data"
Schritt 11: Clones erstellen
Erstellen Sie einen beschreibbaren Clone eines Snapshots:
sudo zfs clone tank/data@backup-2026-01-01 tank/data-clone
Der Clone ist ein unabhängiges Filesystem, das nur die geänderten Blocks benötigt (CoW-Effizienz).
Löschen Sie einen Clone:
sudo zfs destroy tank/data-clone
Schritt 12: ZFS Scrub (Datenintegritätsprüfung)
Führen Sie einen Scrub durch, um alle Daten zu überprüfen:
sudo zpool scrub tank
Dies kann je nach Poolgröße mehrere Stunden dauern. Überwachen Sie den Fortschritt:
zpool status tank
Nach Abschluss zeigt der Status "scan: scrub repaired X errors" oder "no errors detected".
Schritt 13: Disk-Ausfall simulieren und ersetzen
Simulieren Sie einen Disk-Ausfall (markieren Sie als fehlerhaft):
sudo zpool offline tank /dev/sdb
Der Pool läuft im degraded-Mode, aber alle Daten sind noch verfügbar (bei RAID/Mirror).
Ersetzen Sie die fehlerhafte Disk:
sudo zpool replace tank /dev/sdb /dev/sdd
Dies startet automatisch den Resilver-Prozess (Neuaufbau der Daten auf der neuen Disk).
Überwachen Sie den Fortschritt:
zpool status tank
Nach Abschluss ist der Pool wieder healthy.
Schritt 14: ZFS Encryption (AES-256-GCM)
Erstellen Sie ein verschlüsseltes Dataset:
sudo zfs create -o encryption=aes-256-gcm -o keylocation=prompt -o keyformat=passphrase tank/secure
Sie werden aufgefordert, ein Passwort einzugeben. Das Dataset wird mit AES-256-GCM verschlüsselt.
Überprüfen Sie den Verschlüsselungsstatus:
zfs get encryption tank/secure
Die Verschlüsselung ist transparent – Daten werden automatisch ver-/entschlüsselt beim Zugriff.
Schritt 15: Auto-Snapshot mit zfs-auto-snapshot
Installieren Sie das Auto-Snapshot-Package:
sudo apt install -y zfs-auto-snapshot
Dies erstellt automatisch stündlich, täglich, wöchentlich und monatliche Snapshots.
Konfigurieren Sie ein Dataset für Auto-Snapshots:
sudo zfs set com.sun:auto-snapshot=true tank/data
Überprüfen Sie die geplanten Snapshots:
zfs list -t snapshot tank/data
Schritt 16: Performance Tuning
ARC Cache Größe anpassen
ARC (Adaptive Replacement Cache) ist das Speicher-Cache von ZFS. Standardmäßig nutzt es bis zu 50% des Speichers. Für speicherintensive Systeme:
echo "options zfs zfs_arc_max=8589934592" | sudo tee /etc/modprobe.d/zfs.conf
Dies limitiert ARC auf 8 GB. Laden Sie das Modul neu:
sudo modprobe -r zfs sudo modprobe zfs
Record Size für große Dateien
Für Video-Streaming oder Backups erhöhen Sie die Record Size:
sudo zfs set recordsize=1M tank/data
Dies verbessert Performance für große, sequentielle Zugriffe, kann aber kleine Dateien verschlechtern.
Synchronisierung für Datenbanken
Für Datenbanken deaktivieren Sie Synchronisierung (bei Backup-Redundanz):
sudo zfs set sync=disabled tank/databases
Vergleich: ZFS vs ext4 vs btrfs
| Feature | ZFS | ext4 | btrfs |
|---|---|---|---|
| Stabilität | Excellent (Production Ready) | Sehr stabil | Reif, aber weniger erprobt |
| Checksums/Integrität | SHA-256 native | Keine | Ja (CRC32) |
| Snapshots | Native (CoW) | Nein | Native (CoW) |
| Compression | Native (transparent) | Nein | Native (transparent) |
| RAID-Implementation | RAID-Z (sehr robust) | Extern (mdadm) | Native (weniger erprobt) |
| Encryption | AES-256-GCM native | Nein (nutzt dm-crypt) | Nein (nutzt dm-crypt) |
| Self-Healing | Ja (mit Parity) | Nein | Ja (mit RAID) |
| Lizenz | CDDL (nicht GPL-kompatibel) | GPL | GPL |
| RAM-Bedarf | 8 GB minimum (ARC) | 1 GB+ | 2 GB+ |
| Performance | Ausgezeichnet (mit ARC) | Sehr gut | Gut |
| Best für | High-Performance Storage, NAS, Server | General-Purpose Linux | Hybrid-Setups, SSDs |
Fehlerbehebung
Pool ist degraded
Überprüfen Sie den Status:
zpool status tank
Ersetzen Sie die fehlerhafte Disk und starten Sie den Resilver-Prozess:
sudo zpool replace tank /dev/sdb /dev/sdd
Checksum Errors
Wenn Checksum-Fehler auftreten, läuft ein Scrub automatisch (bei RAID):
sudo zpool scrub tank
Pool wird nicht automatisch gemountet
Überprüfen Sie den canmount-Eigenschaft:
zfs get canmount tank
Aktivieren Sie Auto-Mount:
sudo zfs set canmount=on tank
Zusammenfassung
ZFS ist ein hochmodernes Dateisystem mit einzigartigen Funktionen wie Copy-on-Write, Snapshots, Checksums und RAID-Z. Im Gegensatz zu traditionellen Setups (ext4 + Software-RAID + LVM) kombiniert ZFS alle diese Features in einem einzigen System mit besserer Fehlerbehandlung und Datenintegrität.
ZFS ist ideal für: - High-Performance Storage und NAS-Systeme - Server mit hohen Verfügbarkeits-Anforderungen - Backup und Archiv-Systeme - Entwickler, die native Snapshots benötigen
Wichtig: ZFS benötigt ausreichend RAM (mindestens 8 GB für Produktionsnutzung) und moderne Festplatten mit 4K-Sektor-Unterstützung.
- 📖 LVM – Logical Volume Manager unter Linux
- 📖 Software-RAID unter Linux mit mdadm
- 📖 Backup-Strategien nach der 3-2-1 Regel
- 🔧 Sichere Server bei Enjyn mieten
- 🔧 Enjyn Server Monitor – Kostenlose Uptime-Überwachung