ZFS on Linux (ZoL): Ubuntu & Debian Setup (Artikel 023)
Tiefgehende Anleitung zu ZFS unter Linux. Pool-Management, Datasets, Snapshots und Performance-Tuning für den Einsatz in Enterprise-Storage-Systemen.
# ZFS on Linux: Das ultimative Dateisystem für Datensicherheit
TL;DR / Management Summary ZFS ist nicht nur ein Dateisystem, sondern auch ein Volume Manager und RAID-Controller in einem. Es schützt Daten durch Checksummen vor “Silent Data Corruption”, bietet extrem effiziente Kompression und blitzschnelle Snapshots. Während Ubuntu ZFS nativ unterstützt, ist es für Debian via
contribverfügbar. Empfehlung: Das Non-Plus-Ultra für Storage-Server, Proxmox-Nodes und Backup-Targets.
# 1. Einführung & Architektur
Warum ZFS alles verändert.
Traditionell sind RAID, Volume Manager und Filesystem separate Schichten. ZFS bricht dieses Modell auf und verwaltet alles in einem “Storage Pool” (zpool).
# ZFS Features (Mermaid)
graph TD
A[Physical Disks] --> B[vdev: Mirror / RAID-Z]
B --> C[zpool: Storage Pool]
C --> D[Dataset: Filesystem]
C --> E[Dataset: ZVOL Block Device]
D --> F[Features: Compression, Snapshots, Quotas]
- ARC (Adaptive Replacement Cache): ZFS nutzt RAM massiv als Lese-Cache.
- Copy-on-Write (CoW): Daten werden niemals überschrieben, sondern immer neu geschrieben. Das macht ZFS immun gegen Datenverlust bei Stromausfällen.
# 2. Installation & Pool-Erstellung
Vom Start weg richtig aufgesetzt.
# Pakete installieren
# Ubuntu
sudo apt install zfsutils-linux
# Debian
sudo apt install dpkg-dev linux-headers-amd64
sudo apt install zfsutils-linux zfs-dkms
# Pool erstellen (Mirror / RAID 10 Äquivalent)
Wir nutzen zwei Disks für maximale Sicherheit und Performance.
sudo zpool create -f mypool mirror /dev/sdb /dev/sdc
# Status prüfen
zpool status
# 3. Datasets: Flexibilität ohne Grenzen
Vergessen Sie feste Partitionen.
Innerhalb eines Pools legen wir Datasets an. Diese verhalten sich wie Mountpoints, teilen sich aber den Platz des Pools.
# Dataset erstellen
sudo zfs create mypool/projects
# Kompression aktivieren (Empfohlen: lz4)
sudo zfs set compression=lz4 mypool/projects
# Mountpoint ändern
sudo zfs set mountpoint=/var/www mypool/projects
# 4. Snapshots & Replikation
Datenrettung in Sekunden.
Snapshots verbrauchen initial keinen Platz.
# Snapshot erstellen
sudo zfs snapshot mypool/projects@backup_20231026
# Daten wiederherstellen (Rollback)
sudo zfs rollback mypool/projects@backup_20231026
# 5. Day-2 Operations: Performance & Tuning
Den RAM-Hunger bändigen.
# ARC Limitierung
Standardmäßig nutzt ZFS bis zu 50% des RAMs. Auf Datenbank-Servern oder Proxmox-Nodes kann das zu viel sein.
Datei: /etc/modprobe.d/zfs.conf
# Limitiert ARC auf 8GB
options zfs zfs_arc_max=8589934592
Danach update-initramfs -u und Reboot.
# ZFS Scrubbing (Wartung)
ZFS sollte regelmäßig alle Daten lesen, um Fehler zu finden und zu reparieren.
sudo zfs scrub mypool
# 6. Troubleshooting & “War Stories”
Wenn der Pool ‘degraded’ ist.
# Story 1: “Der Disk-Tod im RAID-Z”
Symptom: Pool Status ist “DEGRADED”. Eine Disk wird als “FAULTED” markiert. Ursache: Hardwaredefekt. Lösung: Disk physisch tauschen und Pool reparieren:
sudo zpool replace mypool <alte_id> /dev/sdX
ZFS startet den “Resilver” Prozess automatisch.
# Story 2: “Performance-Einbruch bei 80% Belegung”
Symptom: Das System wird extrem langsam beim Schreiben. Ursache: ZFS braucht Platz für Copy-on-Write. Wenn der Pool zu voll ist (>80%), findet ZFS keine freien Blöcke mehr und fragmentiert massiv. Lösung: Platz schaffen oder Pool vergrößern. Lektion: Planen Sie ZFS-Speicher immer mit 20-30% Puffer.
# 7. Fazit & Empfehlung
- RAM: Viel RAM ist gut (ECC RAM dringend empfohlen!).
- Dedup: Lassen Sie die Finger von
dedup=on, außer Sie haben 5GB RAM pro 1TB Daten. Nutzen Sie stattdessencompression=lz4. - ZIL/L2ARC: Nutzen Sie SSDs als Cache nur bei synchronen Schreiblasten (NFS/Datenbanken).
# Anhang: Cheatsheet
| Befehl | Wirkung |
|---|---|
zpool list |
Kurze Pool-Übersicht. |
zfs list |
Liste aller Datasets. |
zfs set quota=10G ... |
Limitiert den Platz eines Datasets. |
zfs send/receive |
Überträgt ganze Snapshots auf andere Server. |
zfs get all mypool |
Zeigt alle Eigenschaften eines Pools/Datasets. |
zdb |
Der ZFS Debugger (für Profis). |