Die Starline ZFS-FAQ
Die Grundlagen der ZFS-Architektur
TrueNAS ZFS ZPool VDEV FAQ
Erfahren Sie in unserer FAQ, wie fortschrittlich und zuverlässig ZFS arbeitet.
Das Verständnis über den Aufbau der ZFS-Architektur wird Ihnen dabei helfen, zwei wichtige Ziele zu erreichen:
- Die besten Hardware-Komponenten für Ihren TrueNAS Storage Server auszuwählen.
- Ihren Server so zu konfigurieren, dass er sowohl die gewünschte Leistung als auch die gewünschte Datensicherheit erhält.
Gängige POSIX-Dateisysteme dienen vor allem einem Zweck: Daten und ihre relevanten Metadaten in strukturierter und zugänglicher Form zu erhalten. Und um eine Festplatte mit einem bestimmten Dateisystem zu formatieren, müssen Sie vorab eine Software (z. B. fdisk, gparted, lvm usw.) verwenden, um daraus Volumes (Partitionen und RAID-Gruppen) zu erstellen. Anschließend formatieren Sie diesen Datenträger dann noch in Ihrem bevorzugten Dateisystem (FAT, EXT4, NTFS, XFS usw.).
ZFS hingegen ist nicht nur ein Dateisystem, sondern gleichzeitig auch ein unabhängiger Volume Manager. Es kann Volumes erstellen und seine eigenen Software-RAID-Strukturen – bekannt als RAIDZ – aufbauen als auch verwalten. Damit entfällt zudem der Zwang einen Hardware-RAID-Controller zu installieren. Im Allgemeinen raten Experten zwar davon ab, einen Controller zu verwenden. Das heißt aber nicht, dass man unter ZFS keinen verwenden darf. Sie müssen nur wissen, welche Controller Sie in welcher Form mit ZFS verwenden können. Mehr zu diesem Punkt weiter unten.
Machen wir Sie nun mit einigen wichtigen ZFS-Begriffen wie ZPools, VDEVs, Datasets, Volumes, ARC und ZIL vertraut.
Was ist ein ZPool?
In jeder ZFS-Speicherlösung werden Ihre Daten in einem ZFS-Pool (kurz: ZPool) gespeichert. Dieser ZPool besteht aus einer oder mehreren virtuellen Gerätegruppen (VDEVs), diese VDEVs bestehen aus physischen Festplatten (Geräten). Wenn mehr als ein VDEV im Pool vorhanden ist, werden die Daten immer verteilt. Das bedeutet, dass jede Festplatte, die Sie an Ihren ZFS-Server anschließen, zu einem VDEV gehören muss.
Daraus ergeben sich zudem zwei sehr wichtige Aspekte:
- In ZFS erfolgt die Redundanz auf der VDEV-Ebene und nicht auf der Pool-Ebene.
- Wenn Sie einen kompletten VDEV verlieren würden, wäre auch Ihr Pool verloren.
Ein ZPool, bestehend aus zwei verteilten VDEVs
Bei Schreibvorgängen verteilt das System die Daten gleichmäßig auf die Geräte (Festplatten), je nachdem, wie viel freier Speicherplatz auf jedem Gerät vorhanden ist. Es gibt jedoch eine Ausnahme von dieser Regel. Wenn ZFS beispielsweise registriert, dass sich mehr Daten auf eine Platte speichern ließen, weil sie dann besser ins VDEV/Pool passen würden. Dazu später mehr.
Kann die Kapazität eines ZPools erhöht werden?
- Sie können die Kapazität eines ZPools erhöhen, indem Sie VDEVs hinzufügen oder ein oder mehrere VDEVs vergrößern.
- Sie können die Kapazität eines VDEVs erhöhen, indem Sie alle Festplatten innerhalb des VDEVs austauschen.
Das bedeutet: Um die Kapazität eines VDEVs mit 4x 2 TB zu verdoppeln, müssen Sie alle 2-TB-Platten einzeln austauschen und jeweils warten, bis ZFS seinen Wiederherstellungsprozess abgeschlossen hat (AKA Resilvering). Sobald ZFS das Resilvering der vierten Festplatte abgeschlossen hat, können Sie die neue Kapazität auf Ihrer TrueNAS > Pool-Seite einsehen.
Aber das Vergrößern eines Pools ist ein unumkehrbarer Prozess. Sie können also ein VDEV nicht aus einem ZPool entfernen oder seine Kapazität wieder verringern.
Ein ZPool, bestehend aus nicht übereinstimmenden VDEVs
Was sind VDEVs? Und welche VDEV-Typen werden von ZFS unterstützt?
VDEVs sind virtuelle ZFS-Geräte. Eine oder mehrere physische Laufwerke fasst das System also zu einem ZFS-kompatiblen VDEV-Typ zusammen. VDEVs können wie Festplatten behandelt werden. Sie können sie stripen und spiegeln, um daraus einen ZPool zu bilden. ZFS unterstützt sieben verschiedene Typen von VDEVs. VDEV können sein:
Physikalische Platte | Das kann eine HDD, SDD, PCIe NVME, etc. sein |
Datei | Ein absoluter Pfad zu einer zuvor zugewiesenen Datei oder einem Image |
Spiegel | Eine Standard-Software-RAID1-Spiegelung |
ZFS-Software-RAIDZ1/2/3 | Nichtstandardisiertes verteiltes und Paritäts-basiertes Software-RAID |
Hot Spare | Festplatten, die als Hot Spare für das ZFS-Software-RAID markiert wurden |
Cache | Ein Gerät für den adaptiven ZFS-Level-2-Lesecache – bekannt als L2ARC |
Log | Ein separates Log-Gerät (SLOG) für das so genannte ZFS Intent Log (ZIL)* |
*Standardmäßig wird die ZIL auf die gleichen Datenplatten im ZPool geschrieben.
Was ist RAIDZ?
RAIDZ ist ein nicht standardisiertes Software-RAID, das ZFS verwendet, um VDEVs mit darüber verfügbaren Geräten zu erstellen. Mit Nicht-Standard meinen wir, dass es ZFS-spezifisch ist und nicht mit anderen gängigen Software-RAID-Standards übereinstimmt.
RAIDZ unterstützt die folgenden drei RAID-Stufen:
RAIDZ- Stufe | Äquivalent zu | Paritäts- Disks | Toleranz bei Festplatten- verlusten | Geschwindigkeit |
RAIDZ1 | RAID5 | Eine | -1 | schnellste |
RAIDZ2 | RAID6 | Zwei | -2 | langsamer |
RAIDZ3 | RAID7 | Drei | -3 | langsamste |
Welches RAIDZ ist schneller? Welches RAIDZ ist am sichersten?
Aus der obigen Tabelle können Sie ersehen, dass RAIDZ3 mit einer Toleranz von bis zu -3 Festplatten zwar am sichersten, aber auch am langsamsten arbeitet. Schließlich muss das System die dreifache Menge an Paritätsbits berechnen und auf die Laufwerke schreiben.
RAIDZ3 benötigt auch den meisten Platz, da es immerhin drei Datenträger für die Parität verwendet.
RAIDZ1 hingegen ist die schnellste und platzsparendste der drei Varianten. Aber sie ist auch die gefährlichste.
RAIDZ2 bildet indes einen stimmigen Kompromiss aus den beiden anderen Varianten. Es bietet eine höhere Leistung als RAIDZ3 und einen besseren Schutz als RAIDZ1. Dies ist auch das Setup, das wir unseren ZFS/TrueNAS-Kunden normalerweise empfehlen.
Aus unserer Erfahrung heraus können wir Ihnen von RAIDZ1 nur abraten. Trotz seiner relativ schnellen Leistung bietet es den schlechtesten Datenschutz der drei Varianten. Wenn Sie Pech haben, streikt eine weitere Festplatte während des Wiederherstellungsprozesses (Resilvering) und dann könnten Sie Ihren gesamten Pool verlieren.
*Die nutzbare Kapazität eines ZPools wird durch die zugrunde liegende VDEV-Struktur bestimmt.
Kann ich RAIDZ1 verwenden, wenn ich ein Backup meiner Daten habe?
Nur wenn Sie einen wasserdichten Backup-Plan haben. TrueNAS Core unterstützt sowohl Replikation als auch Cloud-Backup zu verschiedenen Speicheranbietern.
Bitte bedenken Sie, dass erst die Replikation (zwei identische primäre und sekundäre Server) der richtige Weg wäre, wenn Ihre täglichen Abläufe von der sofortigen Verfügbarkeit Ihrer Daten abhängen. Die Wiederherstellung aus einer Cloud-Sicherung führt zwangsläufig zu Ausfallzeiten, da Sie die Daten noch abrufen und in Ihrem gesamten Netzwerk verfügbar machen müssen.
Was ist Hot-Spare?
Eine Hot-Spare ist ein Ersatz für ein ausgefallenes oder fehlerhaftes Gerät, das in einem ZPool verwendet werden kann. Hot-Spare-Geräte bleiben in einem Pool inaktiv, bis Sie von ZFS/TrueNAS angewiesen werden das fehlerhafte Gerät zu ersetzen. Hot-Spares sind kein Muss, werden aber für unternehmenskritische Server dringend empfohlen, da sie die Wiederherstellungszeit insgesamt verkürzen.
Beachten Sie einfach die beiden folgenden Punkte:
- Hot-Spares belegen Server-Slots, was die nutzbare Kapazität Ihres Servers beeinträchtigt.
- Die Ersatzplatten müssen mit den zu ersetzenden Festplatten identisch oder größer sein als diese.
Hot-Spares selbst bieten keine Datenredundanz. Sie sind ein statisches (schlafendes) Mitglied des ZPools, das weder zur Speicherkapazität noch zur Leistung beiträgt. Sie werden nur dann gebraucht, falls eines der Laufwerke Gerät ausfallen sollte. Sie sind auch sehr nützlich, wenn Sie den Wiederherstellungsprozess aus der Ferne einleiten wollen, da das Ersatzgerät bereits an das Gehäuse angeschlossen ist.
Aus diesem Grund raten wir Ihnen, Ihren Server nicht mit Hot-Spares zu überfrachten, denn jede Ersatzplatte belegt einen Slot, den Sie tatsächlich zum Speichern Ihrer Daten verwenden könnten. Außerdem haben Sie immer noch Ihr VDEV-Layout (RAIDZ2, RAIDZ3, Mirroring usw.), das Ihnen den Rücken freihält.
Ziehen Sie außerdem in Erwägung, Ihre Ersatzteile zusammen mit Ihrem neuen Server zu kaufen – vor allem, wenn Sie nicht auf Nachbestellungen und Kurierdienste warten können.
Welchen Cache brauche ich?
Standardmäßig verwendet ZFS den System-RAM, um die gelesenen Datenblöcke zwischenzuspeichern. Dies trägt dazu bei, sekundäre Client-Datenanfragen zu beschleunigen, da ZFS sie dann direkt aus dem RAM bedienen kann, statt von den Pool-Festplatten. Dieser primäre Cache wird als Adaptive Replacement Cache (ARC) bezeichnet und befindet sich immer im RAM.
Obwohl es stets ratsam ist, mehr physische RAM-Module hinzuzufügen, kann auch eine weitere Maßnahme die Lesevorgänge erhöhen: So mag es mitunter sinnvoll sein, einen Level-2 Adaptive Replacement Cache (L2ARC) zu integrieren. Insbesondere dann, wenn Sie keine RAM-Steckplätze mehr frei haben oder RAM gerade teuer ist, bietet sich die Möglichkeit extrem schnelle NVMe-Laufwerke als L2ARC zu substituieren.
Bedenken Sie aber, dass eine Vergrößerung des physischen Arbeitsspeichers immer besser arbeitet als ein L2ARC.
Was ist ZIL? Und was ist ein SLOG-Gerät?
Als ZIL wird ein spezielles Protokoll namens Write Intent Log (ZIL) bezeichnet. Hier protokolliert ZFS synchrone Operationen, bevor sie in das ZPool-Array geschrieben werden. Ein synchroner Schreibvorgang liegt vor, wenn ein Klient ein Datei-Fragment ans ZFS sendet und auf ein Bestätigungssignal (ACK) wartet. In der Folge schickt der der Klient erst dann weitere Daten, wenn die vohergehenden auf die ZPool-Platten geschrieben wurden. Dies erhöht zwar die Datensicherheit, verlangsamt aber auch die Abläufe, insbesondere wenn Ihr ZPool auf Festplatten aufbaut.
Um die Dinge zu beschleunigen und Datenverluste im Falle einer Stromunterbrechung zu vermeiden, verwendet ZFS nicht das RAM für den Schreibcache, sondern schnellere Flash-Laufwerke als dauerhafte Speicherung (Persistent Storage) für den Schreibcache. Dieser Cache beschleunigt die Schreibvorgänge, indem er die Daten vorübergehend auf diesem Persistent Storage speichert, während sie auf die Sicherungsplatten des ZPools geschrieben werden. Dadurch kann das System eine schnellere Bestätigung an den Client zurückgeschicken und so die Zeit bis zum nächsten zu sendenden Datenpaket verkürzen.
Ein Diagramm eines ZPools mit dem in die Festplatten des Pools integrierten ZIL
Ein Diagramm eines ZPools mit separaten Flash-ZIL- und L2ARC-Platten
Wir raten Ihnen dringend, Ihre SLOG-Geräte zu spiegeln. Dies trägt zum Schutz vor Datenverlusten bei, die durch einen plötzlichen Ausfall einer einzelnen SSD verursacht werden. Die Verwendung von Enterprise-grade NVMe mit Power Failure Protection (PFP) ist ein Muss für jeden geschäftskritischen ZFS-Server. Enterprise-Hardware hat schließlich höhere Fertigungsstandards, kann jahrelang rund um die Uhr betrieben werden, wird mit einer erweiterten Garantie geliefert und hat einen deutlich höheren DWPD-Wert – im Vergleich zu Consumer-Hardware.
Beispiele für strukturierte ZPools und VDEVs
ZPool mit separaten NVMe-Geräten für L2ARC und ZIL
TL;DR
ZPools und VDEVs
- ZPools werden mit Hilfe von virtuellen Festplattengruppen (VDEVs) erstellt, die wiederum aus Festplatten (Laufwerken) bestehen.
- Wenn ein ZPool mehr als ein vdev enthält, werden die VDEVs verteilt.
- Die Kapazität eines ZPools ist die Summe der Kapazitäten der zugrundeliegenden VDEVs – abhängig von der internen Struktur der VDEVs (RAIDZ-Typ, Mirroring, Striping usw.).
- Sie können einen ZPool unter Verwendung eines JBOD erstellen.
- Die Kapazität eines VDEV = Die Anzahl der Festplatten multipliziert mit der Kapazität der kleinsten Platte abzüglich der Parität.
- Sie sollten einen ZPool mit VDEVs der gleichen Größe erstellen (mit identischen Festplatten).
- Durch Hinzufügen weiterer VDEVs können Sie einen ZPool vergrößern
- Aus einem ZPool können Sie ein VDEV nicht entfernen.
- Sie können ein VDEV vergrößern, indem Sie alle Festplatten einzeln austauschen und dem Pool jeweils Zeit zum Resilvering lassen..
- Resilvering ist der Prozess des Wiederaufbaus des ZFS-Pools nach einem Plattenaustausch/Upgrade.
- Sie können eine Festplatte nicht aus einem VDEV entfernen.
- Die ZPool-Redundanz wird auf der VDEV-Ebene definiert.
- Wenn Sie einen kompletten VDEV verlieren, verlieren Sie Ihren Pool.
- Es gibt drei RAIDZ-Stufen: 1, 2 und 3. Die Ziffer steht für die Redundanz der Parität.
- Vermeiden Sie RAIDZ1. Er bietet das schwächste Schutzniveau.
- Wichtig: Verwenden Sie also möglichst kein RAIDZ1.
TrueNAS
- Sie können mehrere Pools innerhalb Ihres TrueNAS Core-Servers haben.
- Die beste Pool-Konfiguration ist ein Mittelweg zwischen Kapazität, Leistung und Datenschutz.
- Die nutzbare Kapazität Ihres ZPools wird durch die Struktur der zugrunde liegenden VDEVs bestimmt.
- TrueNAS Core unterstützt sowohl Replikation als auch Cloud-Backup.
- Bei der Replikation wird der Inhalt eines primären TrueNAS-Servers auf einen sekundären Server geklont. Es ist wünschenswert, dass beide Server hardware-identisch sind, aber nicht zwingend erforderlich.
- Ein Hot-Spare ist ein Laufwerk, das als Ersatz für ein anderes fehlerhaftes Gerät in einem ZPool verwendet werden kann.
- ZFS hat zwei Ebenen von Lese-Caches: ARC und L2ARC
- ARC arbeitet im RAM.
- L2ARC kann über schnelle NVMes oder SSDs realisiert werden.
- Es ist immer besser, mehr physischen Arbeitsspeicher als L2ARC hinzuzufügen.
- ZFS verfügt über ein Write Intent Log (ZIL), in dem ZFS synchrone Operationen protokolliert, bevor sie in das ZPool-Array geschrieben werden.
- ZIL befindet sich standardmäßig auf demselben Datenträger, auf dem auch die Daten gespeichert sind.
- Um synchrone Schreibvorgänge zu verbessern, kann ZFS separate Geräte für das ZIL-Protokoll verwenden. Dies sind in der Regel schnelle NVMes/SSDs. Da sie getrennt sind, werden sie SLOGs genannt.
- SLOG-Geräte müssen nicht GROSS, aber Enterprise-grade ausgelegt sein.
- Sie müssen Ihre SLOG-Geräte spiegeln, um sich gegen den Ausfall eines einzelnen Geräts zu schützen.
- Sie sollten Ihre L2ARC-Geräte stripen, um die Leistung zu verbessern.