Das ZFS-Dateisystem ist die Grundlage für eine zuverlässige und kostengünstige Datenspeicherung. Dateisysteme der nahen Zukunft. ZFS Was ist zfs

Das ZFS-Dateisystem ist unglaublich beliebt. Infolgedessen schwören viele in Unternehmen darauf und verwenden es, um Billionen von Datenbytes zu speichern. Trotz seiner Popularität, Linux-Benutzer wird es nicht out of the box genießen können. Stattdessen müssen diejenigen, die es testen und als primäres Speicherdateisystem verwenden möchten, es installieren.

Die Installation von ZFS unterscheidet sich ein wenig von anderen Dateisystemen, und je nachdem, was Sie verwenden, ist möglicherweise ein wenig Know-how erforderlich. Wenn Sie neu in diesem Dateisystem sind, ist es am besten, die Ubuntu-Route zu gehen. Ab Ubuntu 16.04 erleichtert Canonical die Arbeit mit ZFS. Noch besser, Ubuntu ist bei weitem die sicherste Implementierung von ZFS unter Linux, mit einem einfachen Setup- und Build-Prozess, der als sehr zuverlässig bekannt ist (während andere Linux-Distributionen sind einem hohen Risiko ausgesetzt, ZFS zu brechen).

Um ein ZFS-Dateisystem zu installieren, befolgen Sie die Anweisungen und erfahren Sie, wie Sie es zum Laufen bringen, bevor Sie mit diesem Tutorial fortfahren.

Notiz. Es ist zwar möglich, ZFS für einen zu verwenden Festplatte, es ist keine gute Idee und Sie werden wahrscheinlich alle Funktionen vermissen, die dieses Dateisystem großartig machen. Der Sinn eines Dateisystems besteht darin, Redundanz zu schaffen, indem Daten über mehrere verteilt werden Festplatte. Bevor Sie fortfahren, vergewissern Sie sich, dass Sie mehr als 1 haben Festplatte für ZFS.

ZFS konfigurieren

Das ZFS-Dateisystem funktioniert durch die Kombination vieler verschiedener Festplatte zusammen, um ein großes Lagerzentrum zu schaffen. Klingt zu kompliziert, ist es auch. Das Ergebnis ist jedoch eine hervorragende Aufbewahrung mit viel Platz.

Das Erstellen eines neuen ZFS-Dateisystems ist etwas komplizierter, als nur den Gparted-Partitionseditor zu öffnen. Stattdessen müssen Sie auf einer Ebene mit ihm interagieren Befehlszeile. Führen Sie in einem Terminalfenster aus lsblk Mannschaft. Wenn Sie den Befehl „list block“ ausführen, werden alle Laufwerke auf Ihrem Linux-PC aufgelistet.

Geh hin und entscheide welche Festplatte Verwenden Sie für Ihren Z-Pool und merken Sie sich die Namen. In diesem Tutorial unsere drei Festplatten in einem ZFS-Pool /dev/sdb, /dev/sdc und /DEV/SDD.

Anschließend müssen Sie die für den Z-Pool ausgewählten Festplatten vollständig auf Null setzen, damit sie keine Daten mehr enthalten. Verwenden dd Befehl, überschreiben Sie jede der Discs. Es wird einige Zeit in Anspruch nehmen.

Hinweis: ändern /DEV/SDx mit der gefundenen Disk-ID lsblk Mannschaft ( SDB Usw.).

sudo dd if=/dev/zero of=/dev/sdX bs=8M

Wenn dd endet, beginnt FDISK Mannschaft. Wenn Sie fdisk ausführen, werden viele Informationen über Festplatten angezeigt, einschließlich Dateisysteminformationen für jede Festplatte. Überprüfen Sie die Messwerte und stellen Sie sicher, dass keines der Laufwerke, die Sie entfernt haben, ein Dateisystem hat. Dieser Schritt ist wichtig, da ZFS nicht das traditionelle Partitionierungsformat verwendet.

Versand FDISK-l

Wenn die Anzeigelinie FDISK Das Lesen sieht gut aus, es ist sicher, einen neuen ZFS-Z-Pool zu erstellen. Gehen Sie für eine grundlegende Z-Pool-Einrichtung wie folgt vor:

sudo zpool create -f newzpool /dev/sdb dev/sdc /dev/sdd

Die Basisinstallation ermöglicht es den meisten Benutzern, ihren Speicherbedarf zu decken. Wer jedoch Wert auf seine Daten legt und Schutz braucht, sollte sich nicht für eine solche Grundausstattung entscheiden. Erwägen Sie stattdessen, einen ZFS-Pool mit RaidZ zu erstellen.

Die Verwendung von RaidZ in Verbindung mit Ihrem ZFS-Pool stellt sicher, dass Ihre Daten bei vielen redundant sind Sicherungen. Um einen ZFS-Pool mit RaidZ zu erstellen, führen Sie Folgendes aus:

sudo zpool create -f newzpool raidz /dev/sdb dev/sdc /dev/sdd

Um Dateien zu einem neuen ZFS-Speicherpool hinzuzufügen, öffnen Sie den Dateimanager und navigieren Sie zum Stammverzeichnis des Dateisystems. Legen Sie die Dateien in einem Ordner namens ZFS Zpool ab.

Festplatten zu ZFS Zpool hinzufügen

ZFS wurde entwickelt, um viele Daten zu speichern, aber das bedeutet nicht, dass Ihre ursprünglichen Laufwerke nicht voll werden. Irgendwann wird mehr Stauraum benötigt. Da ZFS glücklicherweise keine Partitionen verwendet, ist es einfach, dem System mehr Speicherplatz hinzuzufügen.

In diesem Beispiel fügen wir dem Zpool zwei weitere Laufwerke hinzu (/dev/sde und /dev/sdf).

Hinweis: Wenn Ihre ZFS-Installation RaidZ nicht verwendet, entfernen Sie es aus dem Befehl.

sudo zpool add -f newzpool raidz /dev/sde /dev/sdf

Löschen Sie einen ZFS-Pool

Häufig gehen ZFS-Volumes kaputt und werden unbrauchbar. In diesem Fall müssen Sie möglicherweise den Speicherpool entfernen. Um einen Speicherpool zu entfernen, öffnen Sie ein Terminal und verwenden Sie zfs zerstören Mannschaft.

sudo zpool zerstört newzpool

Laufen zpool zerstören dauert eine ganze Weile, je nachdem, wie viele Daten sich in Ihrem Speicherpool befinden. Sie werden wissen, dass der Zpool vollständig zerstört ist, wenn das Terminal erneut verwendet wird.

Überprüfen Sie den ZFS-Status

Eine schnelle Möglichkeit, den Status Ihres Zpools zu überprüfen zpool-Status Mannschaft. Damit können Benutzer den grundlegenden Lesevorgang eines ZFS-Volumes sehen, wie es funktioniert und ob es Fehler gibt. Führen Sie den folgenden Befehl aus, um den Status zu überprüfen.

Die vorgeschlagenen Hinweise sollen wichtige Aspekte hervorheben und die Grundlage dafür schaffen, zu verstehen, welche Funktionen und Annehmlichkeiten ZFS dem Benutzer bietet.

zpool

Wenn traditionell Dateisysteme erstellt werden Abschnitte Speichermedien, dann fasst ZFS eine beliebige Menge physikalischer Laufwerke und deren logische Teile zu einem grenzenlosen Raum zusammen aufstellen(Englisch) Schwimmbad). Gleichzeitig kümmert sich ZFS um Low-Level-Probleme, sodass Sie mit einem Befehl ein Spiegelarray aus zwei Laufwerken erstellen können:

# zpool Poolspiegel sdb sdc erstellen

Wenn die Duplizierung von Benutzerinformationen nicht erforderlich ist, können Speichermedien kombiniert werden, indem ihre Kapazitäten hinzugefügt und die Zugriffsgeschwindigkeit erhöht werden:

# zpool erstellt pool sdb sdc

In den obigen Beispielen ist pool ein beliebiger Name für das zu erstellende Informationsfeld. sdb und sdc sind Abkürzungen für /dev/sdb und /dev/sdc . Beachten Sie, dass in diesem Fall GPT-Markup und Partitionen auf jedem Gerät erstellt werden:

Gerät Start Ende Größe Typ /dev/sdc1 2048 31487999 15G Solaris /usr & Apple ZFS /dev/sdc9 31488000 31504383 8M Solaris reserviert 1

Sie können dem Befehl zpool create die Namen bestehender Abschnitte (wie üblich) sowie Dateien (die Option wird für Experimente bereitgestellt) übergeben.

Wenn ein aufstellen auf einem tragbaren Laufwerk erstellt wurde, wird der folgende Befehl verwendet, um es sicher zu deaktivieren:

# zpool-Exportpool

und zum verbinden:

# zpool-Importpool

Wenn der Name nicht bekannt ist, wird der Importbefehl ohne den Namen ausgeführt und listet die möglichen auf.

Die Architektur von ZFS ist so aufgebaut, dass durch das Entfernen eines physischen Laufwerks ohne vorheriges Exportieren Schäden an Benutzerinformationen vermieden werden. Der Transaktionsmechanismus speichert Änderungen in freien Sektoren, ohne das Original zu überschreiben. Dadurch wird die Integrität des FS gewährleistet und der Verlust nur unvollständig aufgezeichneter Daten zugelassen. Beispielsweise wird bei einem Stromausfall die Vorgängerversion direkt beim Speichern des bearbeiteten Dokuments auf der Festplatte gespeichert. Um Daten zusätzlich vor Fehlern (einschließlich Hardware) zu schützen, verwendet ZFS Prüfsummen.

Die Aufgabe der Reinigung von Schäden wird durch den Befehl gestartet:

# zpool Scrub-Pool

und der Statuscheck:

# zpool-Status

Die durchgeführten Operationen werden in einem Protokoll gespeichert, das eingesehen werden kann über:

# zpoolgeschichte

zfs

Nachdem Sie den Pool auf die obige Weise erstellt haben, können Sie feststellen, dass ein Verzeichnis mit dem entsprechenden Namen im Stammbereich eingehängt ist. Tatsächlich entspricht es dem namensgebenden Dateisystem, was durch Ausgabe des folgenden Befehls überprüft werden kann:

# zfs-Liste

In dieser Form ist es bereits möglich, ZFS - wie ein normales Dateisystem - zu verwenden. Wenn traditionell gemountet werden soll, mit dem Befehl mount und /etc/fstab , dann ist die entsprechende Eigentum auf diese Weise:

# zfs set mountpoint=Legacy-Pool

Um Eigenschaften anzuzeigen, ist die get-Option vorgesehen, ihre Liste kann beispielsweise wie folgt abgerufen werden:

# zfs bekommt alles

Eine Reihe von Eigenschaften sollten denjenigen bekannt sein, die die Datei /etc/fstab bearbeitet haben. ZFS lagert sie näher an den gekennzeichneten Strukturen, damit die „Gebrauchsanweisung“ zur Hand ist. Dies hindert uns jedoch nicht daran, den üblichen Ansatz zu verwenden.

Warum brauchen Sie zfs, wenn Sie zpool haben?

Generell ist es vorzuziehen, Benutzerdaten in /home von Systemdaten zu trennen. Teilweise steigen die Anforderungen an die Flexibilität der Dateihierarchie und die Anzahl der Partitionen kann nicht vorhergesagt werden. ZFS erspart dem Benutzer die Frage „Was ist die beste Größe für Partitionen?“. und ermöglicht es Ihnen, einen beliebigen Satz von Dateisystemen in einem einzigen Feld zu organisieren, die Gesamtmenge an Speicher nach Bedarf zu verteilen und bei Bedarf neue physische Medien hinzuzufügen.

In solchen Szenarien wird das automatisch erstellte Dateisystem nicht direkt zur Datenspeicherung verwendet. Sie wird als übergeordnete Struktur behandelt: Es werden Eigenschaften festgelegt, die untergeordnete Strukturen erben müssen, zum Beispiel:

# zfs set compression=lz4 pool # zfs set acltype=posixacl pool # zfs set xattr=xa pool

Beachten Sie, dass bei Angabe eines falschen Eigenschaftswerts eine Liste mit möglichen Werten als Hinweis angezeigt wird.

# zfs create pool/ROOT # zfs create pool/ROOT/rosa-1 # zfs create -o mountpoint=/home pool/home

Wie Sie sehen, können Eigenschaften direkt beim Anlegen eines Dateisystems gesetzt und nicht erst nachträglich geändert werden. Ein Nicht-Legacy-/home-Einhängepunkt bewirkt, dass pool/home beim Importieren oder mit dem Befehl zfs mount -a unter dem entsprechenden Pfad verfügbar ist. Sie müssen jedoch die Subtilität berücksichtigen: Die Overlay-Eigenschaft ist standardmäßig deaktiviert - wenn etwas im angegebenen Pfad bereits gemountet ist, wird das Overlay nicht erstellt.

Zusätzlich zu pool/ROOT/rosa-1 können Sie pool/ROOT/rosa-2 erstellen und zwei Betriebssystemoptionen installieren. Eine Kopie kann nicht nur mit der üblichen Methode erstellt werden, sondern auch mit dem Instant-Mechanismus Schnappschüsse zfs-Schnappschuss und zfs-Klon . Angesichts solcher Szenarien sowie der Möglichkeit, chroot statt Einhängepunkt=/ es ist bequemer, Legacy zu wählen (und wenn der Leser dem Beispiel aus dem vorherigen Abschnitt gefolgt ist, dann wird es von pool geerbt)

Betriebssystem Rosa mit ZFS ausführen

Dies ist einfach, wenn auf der Festplatte eine separate /boot-Partition erstellt wird grub2 und OS-Kernel. In diesem Fall sollte grub.cfg den Pfad zur Root-Partition als Root-Kernel-Parameter angeben, verschiedene Optionen sind möglich:

Linux /vmlinuz-4.4.7-nrj-laptop-1rosa-x86_64 root=ZFS=pool/ROOT/rosa-1 ro linux /vmlinuz-4.4.7-nrj-laptop-1rosa-x86_64 root=zfs: ro zfs=pool /ROOT/rosa-1

Diese Aufgabe übernimmt update-grub2 aus den offiziellen Repositories, aber in einigen Fällen ist eine aktuelle Beta-Version erforderlich. Es ist auch wünschenswert, die entsprechende Eigenschaft festzulegen:

# zpool set bootfs=pool/ROOT/rosa-1

ZFS in Linux-Komprimierungs- und Deduplizierungsreihenfolge

In welcher Reihenfolge werden Daten unter Linux in das ZFS-Dateisystem geschrieben?

Das einzige spezifische Dokument, das ich unter http://docs.oracle.com/cd/E36784_01/html/E36835/gkknx.html gefunden habe, besagt: Wenn eine Datei geschrieben wird, werden die Daten komprimiert, verschlüsselt und die Prüfsumme wird überprüft. Anschließend werden die Daten nach Möglichkeit dedupliziert.

aber wenn wahr, wird die Deduplizierung keine Blöcke deduplizieren, die mit unterschiedlichen Komprimierungsalgorithmen komprimiert wurden.

Ich habe mit mysqlf getestet und ich glaube, die Reihenfolge ist: dedup, compress, encrypt .

mein testaufbau:

zpool create tank /dev/sdb zfs create tank/lz4 zfs create tank/gzip9 zfs set compression=lz4 tank/lz4 zfs set compression=gzip-9 tank/gzip9 zfs set dedup=on tank

zfs-Listenausgabe

NAME VERWENDET VERFÜGBAR REFER MOUNTPOINT tank 106K 19.3G 19K /tank tank/gzip9 19K 19.3G 19K /tank/gzip9 tank/lz4 19K 19.3G 19K /tank/lz4

erzeuge eine Zufallsdatei mit dd if=/dev/urandom of=random.txt count=128K bs=1024

131072+0 Datensätze ein 131072+0 Datensätze aus 134217728 Bytes (134 MB) wiedergegeben, 12.8786 s, 10.4 MB/s

Auflisten von zpool in einen leeren Pool:

NAME GRÖSSE ZUTEILUNG KOSTENLOS EXPANDSZ FRAG CAP DEDUP GESUNDHEIT ALTROOT tank 19.9G 134K 19.9G - 0% 0% 1.00x ONLINE -

Kopieren Sie dann die Dateien in Datensätze mit unterschiedlichen Komprimierungsalgorithmen:

cp random.txt /tank/lz4 cp random.txt /tank/gzip9

Ausgabe der zfs-Liste nach dem Kopieren:

NAME VERWENDET VERFÜGBAR REFER MOUNTPOINT tank 257M 19.1G 19K /tank tank/gzip9 128M 19.1G 128M /tank/gzip9 tank/lz4 128M 19.1G 128M /tank/lz4

Ausgabe der zpool-Liste nach dem Kopieren:

NAME GRÖSSE ZUTEILUNG KOSTENLOS EXPANDSZ FRAG CAP DEDUP GESUNDHEIT ALTROOT tank 19.9G 129M 19.7G - 0% 0% 2.00x ONLINE -

Deduplizierungsfaktor 2.0 nach dem Kopieren einer Datei in verschiedene Datensätze. Meiner Meinung nach bedeutet dies, dass eine Deduplizierung durchgeführt wird Daten-Blöcke vor Komprimierung und Verschlüsselung.

Kann das bitte jemand überprüfen, ob das so richtig ist?

1 antwortet

Wenn eine Datei geschrieben wird, werden die Daten komprimiert, verschlüsselt und Prüfsummeüberprüft. Die Daten werden dann, wenn möglich, dedupliziert.

meine Vermutung mit der zufälligen Datei war falsch. Es scheint, dass ZFS die Komprimierung unterbricht, wenn es ein bestimmtes Mindestkomprimierungsverhältnis nicht erreichen kann.

Eine weitere Besonderheit ist, dass die Leistung von LZ4 bei inkomprimierbaren Daten sehr hoch ist. Dies wird erreicht, indem ein „Early Break“-Mechanismus aktiviert wird, der ausgelöst wird, wenn LZ4 die erwartete Mindestkomprimierungsrate (12,5 % auf ZFS) nicht erreichen kann.

Zum Betriebssystem, dessen Übertragung auf andere Plattformen bei den Entwicklern eine Welle diametral unterschiedlicher Emotionen auslöste: von stürmischer Bewunderung und Freude bis zum genauen Gegenteil - Irritation und Wut.

Versuchen wir, uns mit dem Standpunkt der einzelnen Parteien sowie den Gründen für die Existenz solcher polaren Bewertungen dieses Dateisystems vertraut zu machen. Aber bevor wir das tun, wollen wir uns zumindest allgemein mit seinen Funktionen und Eigenschaften vertraut machen:

  • 128-Bit-Dateisystem, das es ermöglicht, nahezu unbegrenzte Mengen an Informationen zu speichern. In der Praxis bedeutet dies, dass ZFS theoretisch Mengen an Informationen speichern kann, die die heutigen technologischen Möglichkeiten übersteigen, vorausgesetzt, dass der aktuelle Ansatz zur Organisation der Datenspeicherung verwendet wird;
  • Der Integrität und Zuverlässigkeit der Speicherung, sowohl der Benutzerdaten als auch der FS-Metadaten, wird viel Aufmerksamkeit geschenkt, dafür werden fortschrittliche Hashing-Algorithmen verwendet;
  • Unterstützung für Snapshots und Speicherpools, dank derer ZFS die Fähigkeiten eines Dateisystems und eines Volume-Verwaltungssystems kombiniert (ein neues Konzept von Speicherpools);
  • Dank dieses Dateisystems ist fsck nicht erforderlich;
  • Traditionell gilt ZFS als ziemlich produktives Dateisystem. Diese Behauptung wird jedoch manchmal in Frage gestellt. Zumindest hängen die konkreten Zahlen sehr stark von der Art der Aufgabe ab, an der solche vergleichenden Leistungstests durchgeführt werden;
  • Fähigkeiten zur selektiven Komprimierung und/oder Verschlüsselung einzelner Dateien oder Dateisysteme;
  • Unterstützung für die automatische Erkennung und Zusammenführung (Ausschluss) doppelter Dateien;
  • ZFS unterstützt keine Kontingente. Vielmehr ist die Unterstützung für Kontingente etwas eigenartig: Das Konzept der "Kontingentzuweisung" bedeutet in der ZFS-Terminologie, dass Sie die Größe des erstellten Dateisystems begrenzen. Das System ist so konzipiert, dass jedem ZFS-Benutzer ein eigenes Dateisystem mit allen damit verbundenen Einschränkungen zugewiesen werden sollte;
  • Bestimmte Probleme werden nicht geschaffen technisches Merkmal FS – Nicht-GPL-konforme Codelizenz (CDDL);
  • Um die Innovation von ZFS nicht nur im Bereich der technischen Lösungen zu zeigen, werde ich als Beispiel die Möglichkeit nennen, die Hauptfunktionen des Dateisystems über eine Webschnittstelle zu verwalten;
  • Und da ich wiederhole, ZFS ist extrem umfangreich in seinen Fähigkeiten und Features, und es ist einfach nicht möglich, sie alle hier aufzulisten.

Wenn Sie sich diese Funktionen separat ansehen, sind sie natürlich in vielerlei Hinsicht nicht neu und in der einen oder anderen Form in anderen Dateisystemen zu finden, aber solch ein einziger Satz von Funktionen wird zum ersten Mal nur in ZFS präsentiert, was macht es so einzigartig und interessant auf dieser Moment.

Wenn wir hier ihr relativ reifes Alter und einen sehr guten Zustand in Bezug auf die Codestabilität hinzufügen, die Gefühlsstürme, die die Nachricht über die Veröffentlichung ihres Codes unter einer offenen Lizenz auslösten, sowie die Portierung dieses innovativen FS auf so beliebte Betriebssysteme wie FreeBSD, Linux, MacOS deutlich werden. x.

Was die scharf negativen Reaktionen auf dieses zweifellos bereits berühmte Dateisystem betrifft, so laufen sie hauptsächlich auf die folgenden Thesen hinaus. Übrigens, einer der führenden Linux-Entwickler, der für die Unterstützung seines Disk-Subsystems verantwortlich ist (Andrew Morton), brach in wütenden Verurteilungen von ZFS wegen „einer monströsen Verletzung der Implementierungsebenen“ aus.

Andreas Mortan, leitender Entwickler des Disk-Subsystems des Linux-Kernels

Mehrere andere Entwickler haben sich seinen Vorwürfen des "gruseligen Designs" von ZFS angeschlossen, und das kann im Moment festgestellt werden Andrej Mortan zu ZFS - " schreckliche Verletzung der Designebenen" und " unangemessenes Durcheinander von Code"- sind bereits zu einer Art Internet-Memes geworden, die Entwickler von Oracle, Linux, RedHat, FreeBSD und anderen namhaften Projekten bereits in Abwesenheit zu beantworten versucht haben.

Als Reaktion auf diese Angriffe sagte der leitende Entwickler von ZFS (Jeff Bonwick):

„All diese Vorwürfe, das Design von Dateisystem-Implementierungsebenen zu verletzen, weil ZFS die Funktionalität eines Dateisystems, eines Volume-Managers und eines Software-RAID-Controllers gleichzeitig kombiniert. Ich glaube, dass die Antwort auf diese Behauptung davon abhängen wird, was mit dem Vorwurf „verstößt gegen das Leveldesign“ gemeint ist.

Das haben wir bei der Entwicklung von ZFS festgestellt Standardausführung abstrahierte Ebenen des Plattenstapels provozieren eine überraschende Menge an unnötiger Komplexität und redundanter Logik. Während des Refactorings kamen wir zu dem Schluss, dass die einzige Lösung des Problems ein grundlegendes Überdenken der Ebenengrenzen und ihrer Beziehungen ist – was alles auf einmal viel einfacher macht.

Unabhängig davon, welche Position Sie persönlich bei ZFS einnehmen, sollte zumindest eines anerkannt werden: ZFS ist von grundlegender Bedeutung neue Technologie in der Dateisystembranche.