Die Grundlagen der ZFS-Architektur

Die Starline ZFS-FAQ

Das Verständnis über den Aufbau der ZFS-Architektur wird Ihnen dabei helfen, zwei wichtige Ziele zu erreichen:

  1. Die besten Hardware-Komponenten für Ihren TrueNAS Storage Server auszuwählen
  2. 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.

Index

Was ist ein ZPool?

Kann die Kapazität eines ZPools erhöht werden?

Kann ich ein JBOD verwenden, um einen ZPool zu erstellen?

Was sind VDEVs? Und welche VDEV-Typen werden von ZFS unterstützt?

Was ist RAIDZ?

Welches RAIDZ ist schneller? Welches RAIDZ ist am sichersten?

Welchen RAIDZ-Level soll ich wählen?

Kann ich RAIDZ1 verwenden, wenn ich ein Backup meiner Daten habe?

Was ist Hot-Spare?

Welchen Cache brauche ich?

Wozu brauche ich ZIL? Und was ist ein SLOG-Gerät?

Wenn ich kein NVMe verwende, habe ich dann auch kein ZIL?

Wofür brauche ich also ein SLOG?

Beispiele für strukturierte ZPools und VDEVs

TL;DR

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
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?

  1. Sie können die Kapazität eines ZPools erhöhen, indem Sie VDEVs hinzufügen oder ein oder mehrere VDEVs vergrößern.
  2. 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.

Kann ich einen JBOD verwenden, um einen ZPool zu erstellen?

Sie können einen ZPool auf einem VDEV erstellen, der aus Festplatten mit unterschiedlichen Kapazitäten besteht. In diesem Fall wird die Gesamtkapazität jedoch anhand der Kapazität der kleinsten Festplatte in Ihrem VDEV berechnet. Beispiel: Wenn Sie einen ZPool auf einem einzelnen VDEV mit 8 Festplatten von 7x 4 TB + 1x 500 GB erstellen, ist dies genauso gut wie die Erstellung eines Pools mit 8x 500 GB. Mit einer einzigen 500-GB-Festplatte würden Sie mehr als 24 TB an Speicherplatz verschwenden. In diesem Fall wäre es klüger, den Pool mit 7 x 4 TB-Platten aufzubauen oder einfach eine weitere identische 4 TB-Platte hinzuzufügen.

Sie können auch einen ZPool aus mehreren VDEVs mit nicht übereinstimmenden Rohkapazitäten erstellen. Sie können zum Beispiel die folgenden VDEV-Zusammensetzungen in einem einzigen ZPool haben:

VDEV0 = 4x 4 TB Festplatten = Rohkapazität von 16 TB
VDEV1 = 4x 6 TB Festplatten = Rohkapazität von 24 TB
VDEV2 = 8x 2 TB Festplatten = Rohkapazität von 16 TB

Die Struktur Ihres Pools würde dann so aussehen:

Ein ZPool bestehend aus nicht übereinstimmenden VDEVs
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 PlatteDas kann eine HDD, SDD, PCIe NVME, etc. sein.
DateiEin absoluter Pfad zu einer zuvor zugewiesenen Datei oder einem Image
SpiegelEine Standard-Software-RAID1-Spiegelung
ZFS-Software-RAIDZ1/2/3Nichtstandardisiertes verteiltes und Paritäts-basiertes Software-RAID
Hot SpareFestplatten, die als Hot Spare für das ZFS-Software-RAID markiert wurden
CacheEin Gerät für den adaptiven ZFS-Level-2-Lesecache – bekannt als L2ARC
LogEin 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 zuParitäts-DisksToleranz bei FestplattenverlustenGeschwindigkeit
RAIDZ1RAID5Eine-1schnellste
RAIDZ2RAID6Zwei-2Langsamer
RAIDZ3RAID7Drei-3langsamste

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.

Welchen RAIDZ-Level soll ich wählen?

Nur Sie können diese Frage beantworten. Und um sie zu beantworten, müssen Sie drei Voraussetzungen beachten:

  • Das Niveau des Datenschutzes
  • Die nutzbare Kapazität*
  • Das Niveau der Systemleistung

Sie müssen einen Mittelweg finden, bei dem Sie einen guten Datenschutz, eine zufriedenstellende Leistung und eine angemessene Kapazität haben. Was auch immer Sie tun, gehen Sie keine Kompromisse ein, wenn es um die Datenintegrität geht.

Ein Diagramm der Kapazität

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:

  1. Hot-Spares belegen Server-Slots, was die nutzbare Kapazität Ihres Servers beeinträchtigt.
  2. 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.

Wenn ich kein NVMe verwende, habe ich dann auch kein ZIL?

Ihr TrueNAS Core-Server hat einen ZIL, unabhängig davon, ob Sie dafür dedizierte NVMe-Laufwerke haben oder nicht. Standardmäßig befindet sich ZIL auf demselben Festplattensatz, auf dem auch die Daten gespeichert sind. Es handelt sich um einen winzigen, versteckten Teil auf jeder Platte in Ihrem Pool.

Ein Diagramm eines ZPools mit dem in die Festplatten des Pools integrierten ZIL
Ein Diagramm eines ZPools mit dem in die Festplatten des Pools integrierten ZIL

Was also ist SLOG?

Unabhängige NVMe/SSD-Platten können als Host für die ZIL-Schreibvorgänge verwendet werden und verbessern dadurch die Leistung eines ZPools. Wenn Sie sich für die Verwendung schnellerer Flash-Laufwerke entscheiden, um die ZIL-Vorgänge zu beschleunigen, trennen Sie im Grunde die ZIL von den rotierenden Pool-Platten. SLOG ist also der separate NVMe-Datenträger, den Sie für das ZIL verwenden – daher auch der Begriff Separate Log, da es sich nicht mehr um dieselben Festplatten handelt, auf denen die Daten gespeichert werden.

Ein Diagramm eines ZPools mit separaten Flash-ZIL- und L2ARC-Platten
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

TrueNAS ZFS ZPool VDEV: ZPool mit einem einzigen VDEV auf einem einzigen Gerät
ZPool mit einem einzigen VDEV auf einem einzigen Gerät
TrueNAS ZFS ZPool VDEV: ZPool mit einem einzelnen VDEV auf 4 HDDs (striped)
ZPool mit einem einzelnen VDEV auf 4 HDDs (striped)
TrueNAS ZFS ZPool VDEV: ZPool mit 2x VDEVs in RAIDZ1
ZPool mit 2x VDEVs in RAIDZ1
TrueNAS ZFS ZPool VDEV: ZPool mit 2x VDEVs in RAIDZ2
ZPool mit 2x VDEVs in RAIDZ2
TrueNAS ZFS ZPool VDEV: ZPool mit 2x VDEVs im RAIDZ3
ZPool mit 2x VDEVs im RAIDZ3
TrueNAS ZFS ZPool VDEV: ZPool mit separaten NVMe-Geräten für L2ARC und ZIL
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.

Individuelle Lösung

Wie sind Ihre Anforderungen?

Starline Kontakt

Noch Fragen? Kontaktieren Sie uns.

Der ausgewiesene Experte für alle Linux- und Ceph-Plattformen kam 2018 zu Starline. Seine Vorliebe gilt raffinierten Open-Source-Lösungen und kniffligen Produktentwicklungen. Deshalb steht er auch für Anfragen bezüglich PetaSAN und FreeNAS bereit. Aber auch ARM-Server von Ambedded oder Mac-Betriebssysteme haben es ihm angetan. Privat befasst sich der Ingenieur gern mit 3D-Druckern und Robotern.

Mohammad Ammar
Technik