Da ich in letzter Zeit das Vergnügen hatte mich mit ZFS auseinander zu setzten gibt es jetzt hier auch mal einen Artikel dazu.
Mein erster Kontakt mit dem Zettabyte File System war bei der Installation und Konfiguration von FreeNAS. Diese OS basiert auf FreeBSD und hat dadurch einen ZFS Unterbau. Auch für die NAS Platten wird ZFS unterstützt.
Das Filesystem
ZFS ist ein 128 Bit File System, das von Sun Microsystems für das OS Open Solaris entwickelt wurde. Auch interessant ist, dass es sich bei ZFS um ein Filesystem nach der Copy on Write Methode handelt. Dadurch ist es möglich sogenannte Snapshot zu erstellen. Dabei merkt sich das System von welchen Blöcken der Snapshot gemacht wurde. Das System und der Snapshot teilen sich also die Blöcke. Erst beim schreiben neuer Daten werden weitere Blöcke hinzugefügt. Dies schon den Speicher im Gegensatz zu einer normalen Kopie.
Ausfallsicherheit
ZFS unterstützt verschiedene Funktionen zur Steigerung der Ausfallsicherheit. Ich möchte in diesem Artikel u.a. auf RaidZ, Ditto Blöcke, Resilvering, Selbstheilung der Daten und Spares eingehen.
RaidZ
Hier unterscheiden wir drei Arten. RaidZ1 entspricht im wesentlichen dem normalen Raid5 und RaidZ2 dem Raid6. Bei RaidZ1 wird mit Hilfe der Daten eine Parität erzeugt, welches den Ausfall einer Platte verkraftet. Bei RaidZ2 werden zwei Paritäten gebildet und auf zwei unterschiedlichen Platten gespeichert. Dadurch wird der Ausfall von zwei Platten kompensiert.
Die RaidZ haben aber noch einen kleinen Vorteil, welcher sie von einem normalen Raid unterscheidet. Es entstehen keine sogenannten write holes. Write holes treten bei herkömmlichen Raids auf, wenn während dem Schreiben der Daten ein kritischer Systemfehler entsteht. Dadurch kann es passieren, dass die Daten bereits auf die Platte geschrieben wurden, aber noch keine Parität errechnet wurde. Bleibt dieser Fehler unentdeckt, kann bei einem Plattenausfall die fehlende Parität dazu führen, dass Fehlerhafte Daten wieder hergestellt werden. Dadurch kommt ein partiellen Datenverlust zustande.
Ditto Blöcke
Ditto Blöcke bieten die Möglichkeit, dass jeder logische Block bis zu drei physische Abbildungen hat. Diese liegen dann auch auf drei physikalisch getrennten Platten. Leider habe ich hier bisher keine weiteren Informationen finden können.
Resilvering
So nennt man das befüllen von Platten mit Daten in einem Raid Verbund. Dies wird angewendet, wenn eine Platte ausgefallen ist. Bei einem herkömmlichen Raid würde hier der komplette Speicher, auch der freie, eins zu eins kopiert. Erst nach Beendigung des Kopiervorganges werden die Daten auf die Richtigkeit geprüft. Ist ein Fehler während des Kopiervorganges aufgetreten, wird dieser erst jetzt bemerkt. Zusätzlich existiert keine Checksumme zur Validierung der Daten.
Bei ZFS funktioniert dies etwas anders. Hier wird die Platte nach dem Top-Down Prinzip wieder hergestellt. Das heißt die Daten werden ausgehend vom Root Verzeichnis geschrieben. Zuerst die wichtigen Blöcke, anschließend die unwichtigen. Dadurch wird keine Zeit verschwendet und der leere Plattenplatz nicht mit kopiert.
Selbstheilung der Daten
Bei einem herkömmlichen Filesystem kann nicht erkannt werden, ob es sich um einen fehlerhaften Block handelt. Sollte dieser gelesen werden, wird dieser direkt an die Anwendung weitergegeben. Dies bringt nicht selten eine Anwendung zum Absturz.
Bei ZFS wird mit Hilfe einer Checksumme geprüft, ob ein Block fehlerhaft ist oder nicht. Sollte dadurch ein fehlerhafter Block entdeckt werden, wird dieser direkt vom Filesystem wieder hergestellt.
Spares
Wie auch bei jedem anderen Festplattenverbund, ist es auch bei ZFS möglich Hot Spare Platten zu verwenden. Dadurch kann nach einem Plattenausfall das Wiederherstellen der Daten begonnen werden.
Ich hoffe das ich hier erstmal einen guten Überblick über das Filesystem liefern konnte. Sollten ich noch fehlende Inhalte finden oder mitgeteilt bekommen, werde ich diese hier ergänzen =)
Schreibe einen Kommentar