{"id":83582,"date":"2020-06-01T19:42:21","date_gmt":"2020-06-01T17:42:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost"},"modified":"2020-06-01T19:42:21","modified_gmt":"2020-06-01T17:42:21","slug":"osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","title":{"rendered":"Grundlagen von ZFS: Speichersystem und Leistung","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/70d75786f36a92a0407107fb79bee721.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn diesem Fr\u00fchling haben wir bereits einige Einf\u00fchrungsthemen besprochen, wie zum Beispiel <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2020\/02\/how-fast-are-your-disks-find-out-the-open-source-way-with-fio\/\">wie Sie die Geschwindigkeit Ihrer Laufwerke \u00fcberpr\u00fcfen k\u00f6nnen<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">was RAID ist<\/a><\/noindex>. In dem zweiten Artikel haben wir sogar versprochen, die Leistung verschiedener Multi-Disk-Topologien in ZFS weiter zu untersuchen. Dies ist ein Next-Generation-Dateisystem, das derzeit \u00fcberall implementiert wird: von <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/gadgets\/2016\/06\/a-zfs-developers-analysis-of-the-good-and-bad-in-apples-new-apfs-file-system\/\">Apple<\/a><\/noindex> bis zu <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/05\/ubuntu-20-04-welcome-to-the-future-linux-lts-disciples\/\">Ubuntu<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nNun, heute ist der perfekte Tag, um ZFS kennenzulernen, neugierige Leser. Seien Sie sich nur bewusst, dass, laut Sch\u00e4tzung des Entwicklers von OpenZFS, Matt Arens, \u201ees wirklich komplex ist\u201c.<\/p>\n<p>Aber bevor wir zu den Zahlen kommen \u2013 und die werden kommen, das verspreche ich \u2013 m\u00fcssen wir \u00fcber das sprechen, <i>als<\/i> wie ZFS Daten auf dem Laufwerk speichert.<\/p>\n<h1>Zpool, vdev und device<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/d881cb44e935480a6f2c30795d6afaf1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Dieses vollst\u00e4ndige Pool-Diagramm umfasst drei unterst\u00fctzende vdevs, jeweils einen aus jeder Klasse, und vier f\u00fcr RAIDz2.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/fa52fcf700cc72105a90e4ddc4724d9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Normalerweise gibt es keinen Grund, einen Pool aus unterschiedlichen Typen und Gr\u00f6\u00dfen von vdev zu erstellen \u2013 aber wenn Sie m\u00f6chten, steht Ihnen nichts im Wege.<\/i><\/p>\n<p>Um das Dateisystem ZFS wirklich zu verstehen, ist es wichtig, seine tats\u00e4chliche Struktur genauer zu betrachten. Zun\u00e4chst einmal vereint ZFS traditionelle Ebenen der Volumenverwaltung und des Dateisystems. Au\u00dferdem verwendet es einen transaktionalen Mechanismus zum Copy-on-Write. Diese Merkmale bedeuten, dass sich das System strukturell erheblich von herk\u00f6mmlichen Dateisystemen und RAID-Arrays unterscheidet. Die ersten grundlegenden Bausteine f\u00fcr das Verst\u00e4ndnis sind: der Storage-Pool (zpool), das virtuelle Ger\u00e4t (vdev) und das physische Ger\u00e4t (device).<\/p>\n<h3>zpool<\/h3>\n<p>\nDer Storage-Pool zpool ist die oberste Struktur von ZFS. Jeder Pool enth\u00e4lt ein oder mehrere virtuelle Ger\u00e4te. Diese wiederum enthalten ein oder mehrere physische Ger\u00e4te (device). Virtuelle Pools sind eigenst\u00e4ndige Einheiten. Ein physischer Computer kann zwei oder mehr separate Pools enthalten, die jedoch vollst\u00e4ndig unabh\u00e4ngig voneinander sind. Pools k\u00f6nnen keine virtuellen Ger\u00e4te gemeinsam nutzen.<\/p>\n<p>Die Redundanz von ZFS erfolgt auf der Ebene der virtuellen Ger\u00e4te und nicht auf der Ebene der Pools. Auf der Pool-Ebene gibt es keinerlei Redundanz \u2013 wenn ein vdev-Speicherger\u00e4t oder ein spezielles vdev verloren geht, geht der gesamte Pool ebenfalls verloren.<\/p>\n<p>Moderne Storage-Pools k\u00f6nnen den Verlust des Caches oder des Journals eines virtuellen Ger\u00e4ts \u00fcberstehen \u2013 sie k\u00f6nnen jedoch eine kleine Menge an nicht gespeicherten Daten verlieren, wenn sie das vdev-Journal w\u00e4hrend eines Stromausfalls oder Systemausfalls verlieren.<\/p>\n<p>Ein weit verbreitetes Missverst\u00e4ndnis ist, dass die 'Datenstreifen' (Striping) von ZFS \u00fcber den gesamten Pool verteilt werden. Das ist falsch. Zpool ist keineswegs ein unterhaltsamer RAID0, es ist eher ein unterhaltsames <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Non-RAID_drive_architectures#JBOD\">JBOD<\/a><\/noindex> mit einem komplexen, variablen Verteilungsmechanismus.<\/p>\n<p>Im Wesentlichen werden die Schreibvorg\u00e4nge gleichm\u00e4\u00dfig auf die verf\u00fcgbaren virtuellen Ger\u00e4te verteilt, basierend auf dem verf\u00fcgbaren Speicherplatz. Theoretisch werden alle gleichzeitig belegt. In neueren Versionen von ZFS wird die aktuelle Auslastung (Utilisation) der vdev ber\u00fccksichtigt \u2013 falls ein virtuelles Ger\u00e4t wesentlich st\u00e4rker belastet ist als ein anderes (z. B. aufgrund von Lesevorg\u00e4ngen), wird es vor\u00fcbergehend f\u00fcr Schreibvorg\u00e4nge \u00fcbersprungen, selbst wenn es den h\u00f6chsten freien Speicherplatz aufweist.<\/p>\n<p>Der in moderne ZFS-Schreibstrategien integrierte Mechanismus zur Ermittlung der Auslastung kann die Latenz verringern und die Durchsatzrate w\u00e4hrend Zeiten ungew\u00f6hnlich hoher Belastung erh\u00f6hen \u2013 jedoch ist das nicht. <i>Blankoscheck<\/i> f\u00fcr das unbeabsichtigte Mischen von langsamen HDDs und schnellen SSDs in einem Pool. Ein solch unausgewogener Pool wird stets mit der Geschwindigkeit des langsamsten Ger\u00e4ts arbeiten, als ob er vollst\u00e4ndig aus diesen Ger\u00e4ten zusammengesetzt w\u00e4re.<\/p>\n<h3>vdev<\/h3>\n<p>\nJeder Speicherpool besteht aus einem oder mehreren virtuellen Ger\u00e4ten (virtual device, vdev). Jedes vdev umfasst wiederum eines oder mehrere physische Ger\u00e4te. Die meisten virtuellen Ger\u00e4te dienen der einfachen Datenspeicherung, aber es gibt mehrere unterst\u00fctzende vdev-Klassen, einschlie\u00dflich CACHE, LOG und SPECIAL. Jeder dieser vdev-Typen kann eine von f\u00fcnf Topologien aufweisen: Einzelger\u00e4t (single-device), RAIDz1, RAIDz2, RAIDz3 oder Spiegelung (mirror).<\/p>\n<p>RAIDz1, RAIDz2 und RAIDz3 sind spezielle Varianten dessen, was man fr\u00fcher als RAID mit doppelter (diagonaler) Parit\u00e4t bezeichnete. 1, 2 und 3 beziehen sich darauf, wie viele Parit\u00e4tsbl\u00f6cke f\u00fcr jedes Datenband bereitgestellt werden. Anstelle von einzelnen Festplatten zur Bereitstellung der Parit\u00e4t verteilen die virtuellen RAIDz-Ger\u00e4te diese Parit\u00e4t gleichm\u00e4\u00dfig \u00fcber die Festplatten. Ein RAIDz-Array kann so viele Festplatten verlieren, wie es Parit\u00e4tsbl\u00f6cke gibt; wenn eine weitere ausf\u00e4llt, wird es inkompatibel und nimmt den Speicherpool mit sich.<\/p>\n<p>In spiegelnden virtuellen Ger\u00e4ten (mirror vdev) wird jeder Block auf jedem Ger\u00e4t im vdev gespeichert. W\u00e4hrend die am h\u00e4ufigsten verwendeten Doppelspiegel (two-wide) sind, kann in einem Spiegel eine beliebige Anzahl von Ger\u00e4ten vorhanden sein \u2013 in gr\u00f6\u00dferen Installationen werden h\u00e4ufig dreifache Spiegel verwendet, um die Leseleistung und die Ausfallsicherheit zu erh\u00f6hen. Ein vdev-Spiegel kann jeden Ausfall \u00fcberstehen, solange mindestens ein Ger\u00e4t im vdev weiter funktioniert.<\/p>\n<p>Einzelne vdevs sind von Natur aus gef\u00e4hrlich. Ein solches virtuelles Ger\u00e4t \u00fcbersteht keinen einzigen Ausfall \u2013 und wenn es als Speicher oder als spezieller vdev verwendet wird, f\u00fchrt sein Ausfall zur Zerst\u00f6rung des gesamten Pools. Seien Sie hier \u00e4u\u00dferst vorsichtig.<\/p>\n<p>Virtuelle Ger\u00e4te wie CACHE, LOG und SPECIAL k\u00f6nnen in jeder der oben genannten Topologien erstellt werden \u2013 aber bedenken Sie, dass der Verlust eines virtuellen Ger\u00e4ts SPECIAL den Verlust des gesamten Pools bedeutet, daher wird eine redundante Topologie dringend empfohlen.<\/p>\n<h3>device<\/h3>\n<p>\nWahrscheinlich ist dies der einfachste Begriff in ZFS \u2013 es ist buchst\u00e4blich ein Blockger\u00e4tespeicher. Denken Sie daran, dass virtuelle Ger\u00e4te aus einzelnen Ger\u00e4ten bestehen und ein Pool aus virtuellen Ger\u00e4ten besteht.<\/p>\n<p>Festplatten \u2013 egal ob magnetisch oder flashbasierend \u2013 sind die am h\u00e4ufigsten verwendeten Blockger\u00e4te, die als Bausteine f\u00fcr vdev dienen. Aber jedes Ger\u00e4t mit einem Deskriptor in \/dev passt \u2013 sodass auch ganze hardwarebasierte RAID-Systeme als einzelne Ger\u00e4te verwendet werden k\u00f6nnen.<\/p>\n<p>Eine einfache Raw-Datei ist eines der wichtigsten alternativen Blockger\u00e4te, aus denen ein vdev aufgebaut werden kann. Testpools aus <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_file\">Sparse-Dateien<\/a><\/noindex>\u00a0sind eine sehr praktische M\u00f6glichkeit, um Befehle des Pools zu testen und zu sehen, wie viel Speicher im Pool oder im virtuellen Ger\u00e4t dieser Topologie verf\u00fcgbar ist.<\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/d9bea0e4a6842742a7dbac2f9b1ba394.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Sie k\u00f6nnen innerhalb von Sekunden einen Testpool aus Sparse-Dateien erstellen \u2013 aber vergessen Sie nicht, den gesamten Pool und seine Komponenten anschlie\u00dfend zu l\u00f6schen.<\/i> <\/p>\n<p>Angenommen, Sie m\u00f6chten einen Server mit acht Festplatten einrichten und planen, 10\u00a0TB (~9300 GiB) gro\u00dfe Festplatten zu verwenden, sind sich jedoch nicht sicher, welche Topologie am besten zu Ihren Anforderungen passt. In dem obigen Beispiel erstellen wir in nur wenigen Sekunden einen Testpool aus d\u00fcnn provisionierten Dateien \u2013 und jetzt wissen wir, dass ein RAIDz2 vdev aus acht Festplatten mit 10\u00a0TB eine nutzbare Kapazit\u00e4t von 50\u00a0TiB bietet.<\/p>\n<p>Eine weitere spezielle Ger\u00e4teklasse sind SPARE (Ersatzger\u00e4te). Hot-Swap-Ger\u00e4te geh\u00f6ren, im Gegensatz zu normalen Ger\u00e4ten, dem gesamten Pool an und nicht einem einzelnen virtuellen Ger\u00e4t. Wenn ein vdev im Pool ausf\u00e4llt und ein Ersatzger\u00e4t mit dem Pool verbunden und verf\u00fcgbar ist, wird es automatisch mit dem betroffenen vdev verbunden.<\/p>\n<p>Nachdem das Ersatzger\u00e4t mit dem betroffenen vdev verbunden ist, beginnt es, Kopien oder Rekonstruktionen der Daten zu empfangen, die auf dem fehlenden Ger\u00e4t sein sollten. Dies wird in traditionellem RAID als Wiederherstellung (rebuilding) bezeichnet, w\u00e4hrend es in ZFS als \u201eWiederherstellung von Redundanz\u201c (resilvering) bekannt ist.<\/p>\n<p>Es ist wichtig zu beachten, dass Ersatzger\u00e4te nicht dauerhaft defekte Ger\u00e4te ersetzen. Sie dienen nur als vor\u00fcbergehende L\u00f6sung, um die Zeit zu verk\u00fcrzen, in der eine vdev-Abwertung stattfindet. Nachdem der Administrator das defekte vdev-Ger\u00e4t ersetzt hat, wird die Redundanz wieder auf das permanente Ger\u00e4t hergestellt, w\u00e4hrend das SPARE von der vdev getrennt und wieder als Reserve im gesamten Pool verwendet wird.<\/p>\n<h1>Datens\u00e4tze, Bl\u00f6cke und Sektoren<\/h1>\n<p>\nDer n\u00e4chste Block in unserer Erkundung von ZFS betrifft nicht so sehr die Hardware, sondern wie die Daten selbst organisiert und gespeichert werden. Hier \u00fcberspringen wir einige Ebenen \u2013 wie den Metaslab \u2013 um \u00dcberladungen zu vermeiden und den \u00dcberblick \u00fcber die Gesamtstruktur zu behalten.<\/p>\n<h3>Datensatz (dataset)<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/6a4dc218bd1c57989739d5072f13804c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wenn wir einen Datensatz erstellen, zeigt dieser den gesamten verf\u00fcgbaren Speicherplatz im Pool an. Dann setzen wir ein Quota und \u00e4ndern den Einh\u00e4ngepunkt. Voil\u00e0!<\/i> <\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/aeb6763d6e78e3cc7ee8b1d39ee98b46.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Zvol ist im Wesentlichen ein Datensatz ohne seine Dateisystemschicht, die wir hier durch ein ganz normales Dateisystem wie ext4 ersetzen.<\/i> <\/p>\n<p>Ein ZFS-Datensatz ist in etwa mit einem standardm\u00e4\u00dfigen gemounteten Dateisystem vergleichbar. Wie bei einem gew\u00f6hnlichen Dateisystem scheint er auf den ersten Blick \u201eeinfach nur ein weiterer Ordner\u201c zu sein. Aber auch wie bei herk\u00f6mmlichen gemounteten Dateisystemen hat jeder ZFS-Datensatz seine eigenen grundlegenden Eigenschaften.<\/p>\n<p>Zun\u00e4chst kann einem Datensatz ein festgelegtes Kontingent zugewiesen werden. Wenn Sie <code>zfs set quota=100G poolname\/datasetname<\/code>festlegen, k\u00f6nnen Sie nicht mehr als <code>\/poolname\/datasetname<\/code> 100 GiB in den gemounteten Ordner schreiben.<\/p>\n<p>Haben Sie die Pr\u00e4senz \u2013 und Abwesenheit \u2013 von Schr\u00e4gstrichen am Anfang jeder Zeile bemerkt? Jeder Datensatz hat seinen eigenen Platz sowohl in der ZFS-Hierarchie als auch in der Hierarchie des System-Managements. In der ZFS-Hierarchie gibt es keinen f\u00fchrenden Schr\u00e4gstrich \u2013 Sie beginnen mit dem Poolnamen und dann dem Pfad von einem Datensatz zum n\u00e4chsten. Zum Beispiel: <code>pool\/parent\/child<\/code> f\u00fcr einen Datensatz mit dem Namen <code>child<\/code> unter dem \u00fcbergeordneten Datensatz <code>parent<\/code> in einem Pool mit dem kreativen Namen <code>pool<\/code>.<\/p>\n<p>Standardm\u00e4\u00dfig entspricht der Mount-Punkt eines Datensatzes seinem Namen in der ZFS-Hierarchie, beginnend mit einem Schr\u00e4gstrich \u2013 der Pool mit dem Namen <code>pool<\/code> wird als <code>\/pool<\/code>gemountet, der Datensatz <code>parent<\/code> wird in <code>\/pool\/parent<\/code>gemountet und der untergeordnete Datensatz <code>child<\/code> wird in <code>\/pool\/parent\/child<\/code>. Aber der System-Mountpunkt des Datensatzes kann ge\u00e4ndert werden.<\/p>\n<p>Wenn wir angeben, <code>zfs set mountpoint=\/lol pool\/parent\/child<\/code>, dann wird der Datensatz <code>pool\/parent\/child<\/code> im System als <code>\/lol<\/code>.<\/p>\n<p>Zus\u00e4tzlich zu Datens\u00e4tzen sollten wir Volumes (zvols) erw\u00e4hnen. Ein Volume ist ungef\u00e4hr vergleichbar mit einem Datensatz, wobei es jedoch tats\u00e4chlich kein Dateisystem hat \u2013 es handelt sich einfach um ein Blockger\u00e4t. Sie k\u00f6nnen beispielsweise ein <code>zvol<\/code> mit dem Namen <code>mypool\/myzvol<\/code>, erstellen, es dann mit einem ext4-Dateisystem formatieren und dieses Dateisystem dann einh\u00e4ngen \u2013 jetzt haben Sie ein ext4-Dateisystem, jedoch mit Unterst\u00fctzung f\u00fcr alle Sicherheitsfunktionen von ZFS! Das mag auf einem Computer seltsam erscheinen, macht jedoch viel mehr Sinn als Backend bei der Exportierung eines iSCSI-Ger\u00e4ts.<\/p>\n<h3>Bl\u00f6cke<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/ce96416cd2fa08ff615f13ccec72e838.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Eine Datei wird durch einen oder mehrere Bl\u00f6cke dargestellt. Jeder Block wird auf einem virtuellen Ger\u00e4t gespeichert. Die Blockgr\u00f6\u00dfe entspricht normalerweise dem Parameter <b>recordsize<\/b>, kann jedoch auf <b>2^ashift<\/b>verringert werden, wenn er Metadaten oder eine kleine Datei enth\u00e4lt.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/f31c25e34af12a9a96b60a46c2924053.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wir meinen es wirklich ernst, <b>gibt es wirklich<\/b> wenn wir vom enormen Leistungsdefizit sprechen, das entsteht, wenn der ashift zu klein eingestellt wird.<\/i><\/p>\n<p>Im ZFS-Pool werden alle Daten, einschlie\u00dflich Metadaten, in Bl\u00f6cken gespeichert. Die maximale Blockgr\u00f6\u00dfe f\u00fcr jedes Dataset wird im Property festgelegt. <code>recordsize<\/code> (Recordgr\u00f6\u00dfe). Die Recordgr\u00f6\u00dfe kann sich \u00e4ndern, jedoch beeinflusst dies nicht die Gr\u00f6\u00dfe oder Position von bereits in das Dataset geschriebenen Bl\u00f6cken \u2013 sie gilt nur f\u00fcr neue Bl\u00f6cke, die beim Schreiben erstellt werden.<\/p>\n<p>Sofern nicht anders festgelegt, betr\u00e4gt die aktuelle Standard-Recordgr\u00f6\u00dfe 128 KiB. Dies stellt einen gewissen Kompromiss dar, bei dem die Leistung in den meisten F\u00e4llen weder ideal noch katastrophal sein wird. <code>Recordsize<\/code> kann auf jeden Wert von 4K bis 1M eingestellt werden (mit zus\u00e4tzlichen Anpassungen <code>recordsize<\/code> kann sogar noch h\u00f6her eingestellt werden, was jedoch selten eine gute Idee ist).<\/p>\n<p>Jeder Block verweist nur auf die Daten einer einzigen Datei \u2013 Sie k\u00f6nnen nicht zwei verschiedene Dateien in einen Block quetschen. Jede Datei besteht aus einem oder mehreren Bl\u00f6cken, abh\u00e4ngig von der Gr\u00f6\u00dfe. Wenn die Gr\u00f6\u00dfe der Datei kleiner als die Recordgr\u00f6\u00dfe ist, wird sie in einem kleineren Block gespeichert \u2013 beispielsweise belegt eine 2 KiB Datei im Block nur einen Sektor von 4 KiB auf der Festplatte.<\/p>\n<p>Wenn die Datei gro\u00df genug ist und mehrere Bl\u00f6cke ben\u00f6tigt, haben alle Eintr\u00e4ge mit dieser Datei die Gr\u00f6\u00dfe <code>recordsize<\/code>\u00a0\u2014 einschlie\u00dflich des letzten Eintrags, dessen Hauptteil ungenutzter Speicherplatz sein kann. <noindex><a rel=\"nofollow\" href=\"https:\/\/whatis.techtarget.com\/definition\/slack-space-file-slack-space\">unbenutzter Speicher<\/a><\/noindex>.<\/p>\n<p>Zvols haben keine Eigenschaft <code>recordsize<\/code>\u00a0\u2014 stattdessen besitzen sie eine \u00e4quivalente Eigenschaft <code>volblocksize<\/code>.<\/p>\n<h3>Sektoren<\/h3>\n<p>\nDer letzte, grundlegende Baustein ist der Sektor. Dies ist die kleinste physische Einheit, die von einem Speicherger\u00e4t geschrieben oder gelesen werden kann. Jahrzehntelang wurden in den meisten Festplatten 512-Byte-Sektoren verwendet. In letzter Zeit sind die meisten Festplatten auf 4 KiB-Sektoren konfiguriert, und in einigen \u2013 insbesondere SSDs \u2013 sind sogar 8 KiB oder noch gr\u00f6\u00dfere Sektoren zu finden.<\/p>\n<p>Im ZFS-System gibt es eine Eigenschaft, die es erm\u00f6glicht, die Sektorgr\u00f6\u00dfe manuell festzulegen. Diese Eigenschaft <code>ashift<\/code>. Es ist etwas verwirrend, dass ashift eine Potenz von zwei ist. Zum Beispiel, <code>ashift=9<\/code> bedeutet eine Sektorgr\u00f6\u00dfe von 2^9 oder 512 Byte.<\/p>\n<p>ZFS fordert vom Betriebssystem detaillierte Informationen zu jedem Blockger\u00e4t an, wenn es einem neuen vdev hinzugef\u00fcgt wird, und stellt theoretisch ashift automatisch korrekt auf Basis dieser Informationen ein. Leider l\u00fcgen viele Festplatten \u00fcber ihre Sektorgr\u00f6\u00dfe, um die Kompatibilit\u00e4t mit Windows XP zu wahren, das nicht in der Lage war, Festplatten mit anderen Sektorgr\u00f6\u00dfen zu verstehen.<\/p>\n<p>Das bedeutet, dass ZFS-Administratoren dringend den tats\u00e4chlichen Sektorgr\u00f6\u00dfen ihrer Ger\u00e4te bekannt sein sollten und diese manuell einstellen m\u00fcssen. <code>ashift<\/code>. Wenn ein zu kleiner ashift eingestellt wird, erh\u00f6ht sich astronomisch die Anzahl der Lese- und Schreibvorg\u00e4nge. Das bedeutet, dass die Schreiboperation f\u00fcr 512-Byte-'Sektoren' in einen echten 4 KiB-Sektor erfordert, zuerst den ersten 'Sektor' zu schreiben, dann den 4 KiB-Sektor zu lesen, ihn mit dem zweiten 512-Byte-'Sektor' zu ver\u00e4ndern, zur\u00fcck in den neuen 4 KiB-Sektor zu schreiben und so weiter f\u00fcr jede Aufzeichnung.<\/p>\n<p>In der realen Welt betrifft dieser Strafe insbesondere SSDs von Samsung EVO, bei denen <code>ashift=13<\/code>gilt, jedoch l\u00fcgen diese SSDs \u00fcber ihre Sektorgr\u00f6\u00dfe, weshalb standardm\u00e4\u00dfig eingestellt wird. <code>ashift=9<\/code>. Wenn ein erfahrener Systemadministrator diese Einstellung nicht \u00e4ndert, funktioniert dieses SSD <i>langsamer<\/i> als ein herk\u00f6mmliches magnetisches HDD.<\/p>\n<p>Im Vergleich dazu gibt es f\u00fcr zu gro\u00dfe Gr\u00f6\u00dfen <code>ashift<\/code> praktisch keine Strafe. Es gibt keine sp\u00fcrbare Leistungsminderung, und der Anstieg des ungenutzten Speicherplatzes ist unendlich gering (oder null, wenn die Kompression aktiviert ist). Daher empfehlen wir dringend, selbst f\u00fcr solche Festplatten, die tats\u00e4chlich 512-Byte-Sektoren nutzen, die Einstellung <code>ashift=12<\/code> oder sogar <code>ashift=13<\/code>, um mit Zuversicht in die Zukunft zu blicken.<\/p>\n<p>Die Eigenschaft <code>ashift<\/code> wird f\u00fcr jedes virtuelle vdev-Ger\u00e4t festgelegt, und <i>nicht f\u00fcr den Pool<\/i>, wie viele f\u00e4lschlicherweise denken \u2013 und kann nach der Festlegung nicht mehr ge\u00e4ndert werden. Wenn Sie versehentlich <code>ashift<\/code> bei der Hinzuf\u00fcgung eines neuen vdev zum Pool verwirrt wurden, haben Sie diesen Pool unwiderruflich mit einem Ger\u00e4t mit niedriger Leistung kontaminiert, und in der Regel gibt es keinen anderen Ausweg, als den Pool zu l\u00f6schen und von vorne zu beginnen. Selbst das Entfernen des vdev wird nicht von einer fehlerhaften Einstellung befreien. <code>ashift<\/code>!<\/p>\n<h3>Der Schreibmechanismus<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/eb222dbcc3de428ff2b1c2c72b145db0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wenn ein herk\u00f6mmliches Dateisystem Daten \u00fcberschreiben muss \u2013 \u00e4ndert es jeden Block dort, wo er sich befindet.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/ba2474808b32667902966e4c9e69081a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Das Copy-on-Write-Dateisystem speichert eine neue Version des Blocks und entsperrt dann die alte Version.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/3b00dad44eb588ed793d2d5df7852892.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Im abstrakten Sinne, wenn man die tats\u00e4chliche physische Anordnung der Bl\u00f6cke ignoriert, vereinfacht sich unser \u201aDatenkomet\u2018 zu einem \u201aDatenwurm\u2018, der von links nach rechts \u00fcber die Karte des verf\u00fcgbaren Raums bewegt.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/8c2c38dbc8a5e633c466d5c7f230951f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Jetzt haben wir ein gutes Verst\u00e4ndnis daf\u00fcr, wie Copy-on-Write-Snapshots funktionieren \u2013 jeder Block kann mehreren Snapshots zugeordnet werden und bleibt bestehen, bis alle zugeh\u00f6rigen Snapshots gel\u00f6scht werden.<\/i><\/p>\n<p>Der Copy-on-Write-Mechanismus (CoW) ist das Fundament dessen, was ZFS zu einem so beeindruckenden System macht. Das Grundkonzept ist einfach \u2013 wenn Sie ein traditionelles Dateisystem bitten, eine Datei zu \u00e4ndern, wird es genau das tun, was Sie verlangen. Wenn Sie jedoch ein Copy-on-Write-Dateisystem bitten, dasselbe zu tun, wird es \u201aOkay\u2018 sagen \u2013 aber Sie anl\u00fcgen.<\/p>\n<p>Stattdessen speichert das Copy-on-Write-Dateisystem eine neue Version des ge\u00e4nderten Blocks und aktualisiert dann die Metadaten der Datei, um die Verbindung zum alten Block zu trennen und den gerade geschriebenen neuen Block zu verkn\u00fcpfen.<\/p>\n<p>Das Trennen des alten Blocks und das Verkn\u00fcpfen des neuen Blocks erfolgt in einem einzigen Vorgang, weshalb dieser nicht unterbrochen werden kann \u2013 wenn Sie die Stromversorgung nach Abschluss dieser Operation unterbrechen, haben Sie eine neue Version der Datei; wenn Sie vorher die Stromversorgung abstellen, haben Sie die alte Version. In jedem Fall entstehen in der Dateisystemstruktur keine Konflikte.<\/p>\n<p>Das Copy-on-Write in ZFS erfolgt nicht nur auf der Ebene des Dateisystems, sondern auch auf der Ebene der Festplattenverwaltung. Das bedeutet, dass ZFS nicht unter einem Schreibfehler leidet (<noindex><a rel=\"nofollow\" href=\"http:\/\/www.raid-recovery-guide.com\/raid5-write-hole.aspx\">RAID-L\u00fccke<\/a><\/noindex>) \u2013 einem Ph\u00e4nomen, bei dem der Stripe nur teilweise vor dem Systemausfall geschrieben werden konnte, was zu Besch\u00e4digungen des Arrays nach dem Neustart f\u00fchrt. Hier wird der Stripe atomar geschrieben, das vdev ist immer konsistent, und <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bob%27s_your_uncle\">Bob ist dein Onkel<\/a><\/noindex>.<\/p>\n<h3>ZIL: ZFS Intent Log<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/8d08b7bce60a1e3698fd0ec02494e6fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Das ZFS-System behandelt synchronisierte Schreibvorg\u00e4nge auf spezielle Weise \u2013 es speichert sie vor\u00fcbergehend, jedoch sofort im ZIL, bevor sie zusammen mit asynchronen Schreibvorg\u00e4ngen sp\u00e4ter dauerhaft geschrieben werden.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/2119ef409a7d8c9599ee63292452d80d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Normalerweise werden die im ZIL gespeicherten Daten nach der Speicherung nie wieder abgerufen. Dies ist jedoch nach einem Systemausfall m\u00f6glich.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/88a62163b0fb9f14a41102821dfabb5f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>SLOG, oder sekund\u00e4res LOG-Ger\u00e4t, ist einfach ein spezielles \u2013 und idealerweise sehr schnelles \u2013 vdev, wo das ZIL separat vom Hauptspeicher gespeichert werden kann.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/819f7c21714adafe226028e95990f1df.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nach einem Ausfall werden alle verschmutzten Daten im ZIL wiederhergestellt \u2013 in diesem Fall befindet sich das ZIL auf dem SLOG, sodass sie genau von dort wiederhergestellt werden.<\/i><\/p>\n<p>Es gibt zwei Hauptkategorien von Schreiboperationen \u2013 synchron (sync) und asynchron (async). F\u00fcr die meisten Workloads sind \u00fcberwiegend asynchrone Schreibvorg\u00e4nge \u2013 das Dateisystem erlaubt es, diese zu aggregieren und gepackt auszugeben, was die Fragmentierung reduziert und die Bandbreite signifikant erh\u00f6ht.<\/p>\n<p>Synchronisierte Schreibvorg\u00e4nge sind eine ganz andere Angelegenheit. Wenn eine Anwendung eine synchronisierte Schreiboperation anfordert, sagt sie dem Dateisystem: 'Du musst dies im nichtfl\u00fcchtigen Speicher festhalten.' <i>jetzt sofort<\/i>, und bis dahin kann ich nichts weiter tun.\u201d Daher m\u00fcssen die synchronen Schreibvorg\u00e4nge sofort auf der Festplatte festgehalten werden \u2013 und wenn das die Fragmentierung erh\u00f6ht oder die Bandbreite verringert, sei es so.<\/p>\n<p>ZFS behandelt synchrone Schreibvorg\u00e4nge anders als herk\u00f6mmliche Dateisysteme \u2013 anstatt sie sofort in den regul\u00e4ren Speicher zu schreiben, speichert ZFS sie in einem speziellen Speicherbereich, der als ZFS Intent Log (ZIL) bekannt ist. Der Trick dabei ist, dass diese Eintr\u00e4ge <i>auch<\/i> im Speicher bleiben, w\u00e4hrend sie zusammen mit den regul\u00e4ren asynchronen Schreibanforderungen aggregiert werden, um sp\u00e4ter als v\u00f6llig normale TXG (Transaction Groups) in den Speicher geschrieben zu werden.<\/p>\n<p>Im normalen Betriebsmodus wird das ZIL geschrieben und nie wieder gelesen. Wenn nach wenigen Augenblicken die Eintr\u00e4ge aus dem ZIL im regul\u00e4ren TXG aus dem RAM in den Hauptspeicher geschrieben werden, werden sie vom ZIL getrennt. Das einzige Mal, dass etwas aus dem ZIL gelesen wird, ist beim Import eines Pools.<\/p>\n<p>Wenn ein ZFS-Fehler auftritt \u2013 sei es ein Betriebssystemausfall oder ein Stromausfall \u2013 und es sich im ZIL Daten befinden, werden diese Daten beim n\u00e4chsten Import des Pools (z.B. beim Neustart des fehlerhaften Systems) gelesen. Alles, was sich im ZIL befindet, wird gelesen, in TXG-Gruppen zusammengefasst, im Hauptspeicher gespeichert und dann im Importprozess vom ZIL abgetrennt.<\/p>\n<p>Eine der Hilfsklassen von vdev wird als LOG oder SLOG bezeichnet, ein sekund\u00e4res LOG-Ger\u00e4t. Es hat die Aufgabe, dem Pool ein separates und idealerweise viel schnelleres vdev-Ger\u00e4t mit einer sehr hohen Schreibbest\u00e4ndigkeit f\u00fcr die Speicherung des ZIL zur Verf\u00fcgung zu stellen, anstatt das ZIL im Hauptspeicher des vdev zu speichern. Das ZIL verh\u00e4lt sich unabh\u00e4ngig vom Speicherort gleich, aber wenn das vdev mit LOG eine sehr hohe Schreibgeschwindigkeit hat, werden die synchronen Schreibvorg\u00e4nge schneller erfolgen.<\/p>\n<p>Das Hinzuf\u00fcgen eines vdev mit LOG zu einem Pool <b>kann<\/b> die Leistung von asynchronen Schreibvorg\u00e4ngen nicht <code>verbessern \u2013 selbst wenn Sie alle Schreibvorg\u00e4nge im ZIL mit Hilfe von<\/code>, sie werden dennoch ebenso wie ohne Protokoll an den Hauptspeicher in TXG gebunden sein und im selben Tempo arbeiten. Die einzige direkte Leistungsverbesserung ist die Verz\u00f6gerung der synchronen Schreibvorg\u00e4nge (da eine h\u00f6here Protokollgeschwindigkeit die Ausf\u00fchrung von Vorg\u00e4ngen beschleunigt) <code>sync<\/code>).<\/p>\n<p>In einer Umgebung, die bereits eine gro\u00dfe Anzahl synchroner Schreibvorg\u00e4nge erfordert, kann vdev LOG indirekt die asynchrone Schreibgeschwindigkeit und nicht zwischengespeicherte Lesegeschwindigkeit erh\u00f6hen. Das Auslagern von ZIL-Eintr\u00e4gen in einen separaten vdev LOG bedeutet weniger Konkurrenz um IOPS im prim\u00e4ren Speicher, was die Leistung aller Lese- und Schreibvorg\u00e4nge in gewissem Ma\u00dfe steigert.<\/p>\n<h3>Snapshots<\/h3>\n<p>\nDer Schreibvorgangsspeichermechanismus ist auch eine notwendige Grundlage f\u00fcr atomare ZFS-Snapshots und inkrementelle asynchrone Replikation. In einem aktiven Dateisystem gibt es einen Zeigerbaum, der alle Eintr\u00e4ge mit aktuellen Daten markiert \u2013 wenn Sie einen Snapshot erstellen, machen Sie einfach eine Kopie dieses Zeigerbaums.<\/p>\n<p>Wenn in einem aktiven Dateisystem ein Eintrag \u00fcberschrieben wird, schreibt ZFS zuerst eine neue Version des Blocks in ungenutzten Speicherplatz. Danach trennt es die alte Version des Blocks vom aktuellen Dateisystem. Sollte jedoch ein Snapshot auf den alten Block verweisen, bleibt dieser unver\u00e4ndert. Der alte Block wird tats\u00e4chlich nicht als freier Speicher wiederhergestellt, bis alle Snapshots, die auf diesen Block verweisen, gel\u00f6scht sind!<\/p>\n<h3>Replikation<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/647fe6cc348861b653b004640244cf88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Meine Steam-Bibliothek nahm 2015 158 GiB ein und umfasste 126.927 Dateien. Das ist ziemlich nah an der optimalen Situation f\u00fcr rsync \u2013 die ZFS-Replikation \u00fcber das Netzwerk war \u201enur\u201c 750 % schneller.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/2849be8d2dc5c9f30f23c3bbc20e9022.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>In demselben Netzwerk ist die Replikation einer 40-Gib-bytes gro\u00dfen Abbilddatei einer Windows 7-VM eine ganz andere Geschichte. Die ZFS-Replikation erfolgt 289 Mal schneller als rsync \u2013 oder 'nur' 161 Mal schneller, wenn Sie wissen, wie Sie rsync mit dem Schalter --inplace aufrufen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Grundlagen von ZFS: Speichersystem und Leistung\" src=\"\/wp-content\/uploads\/2020\/06\/9a57e4faa0eaf0f687ae24b965a1bf81.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wenn ein VM-Abbild skaliert wird, skalieren auch die Probleme von rsync mit. Eine Gr\u00f6\u00dfe von 1,9 TiB ist f\u00fcr ein modernes VM-Abbild nicht sehr gro\u00df \u2013 aber sie ist gro\u00df genug, damit die ZFS-Replikation 1148 Mal schneller als rsync ist, selbst mit dem rsync-Argument --inplace.<\/i><\/p>\n<p>Sobald Sie verstanden haben, wie Snapshots funktionieren, ist es nicht schwierig, die Grundz\u00fcge der Replikation zu erfassen. Da ein Snapshot lediglich ein Zeigerbaum auf die Datenbl\u00e4tter ist, folgt daraus, dass wir, wenn wir einen <code>zfs send<\/code> Snapshot erstellen, sowohl diesen Baum als auch alle damit verbundenen Datenbl\u00e4tter versenden. Wenn wir dies an den <code>zfs send<\/code> in <code>zfs receive<\/code> des Zielobjekts \u00fcbergeben, werden sowohl der tats\u00e4chliche Inhalt des Blocks als auch der Zeigerbaum, der auf die Bl\u00f6cke verweist, in den Ziel-Datensatz geschrieben.<\/p>\n<p>Es wird noch interessanter bei der zweiten <code>zfs send<\/code>. Jetzt haben wir zwei Systeme, von denen jedes enth\u00e4lt <code>poolname\/datasetname@1<\/code>, und Sie erstellen einen neuen Snapshot <code>poolname\/datasetname@2<\/code>. Daher haben Sie im Quellpool <code>datasetname@1<\/code> und <code>datasetname@2<\/code>, w\u00e4hrend im Zielpool bisher nur der erste Snapshot vorhanden ist. <code>datasetname@1<\/code>.<\/p>\n<p>Da wir zwischen Quelle und Ziel einen gemeinsamen Snapshot haben <code>datasetname@1<\/code>, k\u00f6nnen wir einen <i>inkrementellen<\/i> <code>zfs send<\/code> dar\u00fcber erstellen. Wenn wir dem System sagen <code>zfs send -i poolname\/datasetname@1 poolname\/datasetname@2<\/code>, es vergleicht zwei Zeigerb\u00e4ume. Alle Zeiger, die nur in <code>@2<\/code>, verweisen offensichtlich auf neue Bl\u00f6cke \u2013 daher ben\u00f6tigen wir den Inhalt dieser Bl\u00f6cke.<\/p>\n<p>In einem Remote-System ist die Verarbeitung der inkrementellen <code>send<\/code> genauso einfach. Zun\u00e4chst schreiben wir alle neuen Eintr\u00e4ge, die im Stream enthalten sind, <code>send<\/code>, und f\u00fcgen dann Verweise auf diese Bl\u00f6cke hinzu. Voil\u00e0, wir haben <code>@2<\/code> im neuen System!<\/p>\n<p>Die asynchrone inkrementelle ZFS-Replikation stellt eine enorme Verbesserung im Vergleich zu fr\u00fcheren, nicht snapshotbasierten Methoden wie rsync dar. In beiden F\u00e4llen werden nur die ge\u00e4nderten Daten \u00fcbertragen \u2013 aber rsync muss zun\u00e4chst <i>hier lesen<\/i> alle Daten von beiden Seiten von der Festplatte lesen, um die Pr\u00fcfziffer zu \u00fcberpr\u00fcfen und zu vergleichen. Im Gegensatz dazu liest die ZFS-Replikation nichts au\u00dfer den Zeigerb\u00e4umen \u2013 und gegebenenfalls die Bl\u00f6cke, die im gemeinsamen Snapshot nicht vorhanden sind.<\/p>\n<h3>Integrierte Kompression<\/h3>\n<p>\nDer Mechanismus f\u00fcr Copy-on-Write vereinfacht auch das System der integrierten Kompression. In traditionellen Dateisystemen ist die Kompression problematisch \u2013 sowohl die alte als auch die neue Version der ge\u00e4nderten Daten befinden sich im selben Raum.<\/p>\n<p>Wenn man einen Datenblock in der Mitte einer Datei betrachtet, der als Megabyte von Nullen bei 0x00000000 beginnt und so weiter, l\u00e4sst er sich sehr leicht auf einen Sektor auf der Festplatte komprimieren. Aber was passiert, wenn wir dieses Megabyte an Nullen durch ein Megabyte unkomprimierbarer Daten, wie JPEG oder pseudorandom Rauschen, ersetzen? Unerwartet ben\u00f6tigt dieses Megabyte an Daten nicht einen, sondern 256 Sektoren mit 4 KiB, und an dieser Stelle auf der Festplatte ist nur ein Sektor reserviert.<\/p>\n<p>ZFS hat dieses Problem nicht, da \u00c4nderungen immer in ungenutztem Speicher geschrieben werden \u2013 der urspr\u00fcngliche Block nimmt nur einen Sektor von 4 KiB ein, und der neue Eintrag ben\u00f6tigt 256, aber das ist kein Problem \u2013 der zuletzt ge\u00e4nderte Block aus der \u201eMitte\u201c der Datei w\u00fcrde unabh\u00e4ngig davon, ob seine Gr\u00f6\u00dfe sich \u00e4ndert oder nicht, in ungenutztem Speicher geschrieben werden, daher ist dies f\u00fcr ZFS eine ganz normale Situation.<\/p>\n<p>Die integrierte Kompression von ZFS ist standardm\u00e4\u00dfig deaktiviert und das System bietet optionale Algorithmen an \u2013 aktuell geh\u00f6ren dazu LZ4, gzip (1-9), LZJB und ZLE.<\/p>\n<ul>\n<li><b>LZ4<\/b> \u2014 ist ein Streaming-Algorithmus, der extrem schnelles Komprimieren und Dekomprimieren sowie Leistungsgewinne f\u00fcr die meisten Anwendungsf\u00e4lle bietet \u2014 sogar auf relativ langsamen CPUs.\n<\/li>\n<li><b>GZIP<\/b> \u2014 ein angesehener Algorithmus, der von allen Nutzern von Unix-Systemen gesch\u00e4tzt wird. Er kann mit Komprimierungsstufen von 1 bis 9 implementiert werden, wobei die Komprimierungsrate zunimmt und der CPU-Verbrauch ansteigt, je n\u00e4her man Stufe 9 kommt. Der Algorithmus eignet sich gut f\u00fcr alle textbasierten (oder anderen stark komprimierbaren) Anwendungsf\u00e4lle, kann jedoch zu Problemen mit der CPU f\u00fchren \u2014 verwenden Sie ihn mit Vorsicht, insbesondere auf h\u00f6heren Stufen.\n<\/li>\n<li><b>LZJB<\/b> \u2014 der urspr\u00fcngliche Algorithmus in ZFS. Er ist veraltet und sollte nicht mehr verwendet werden; LZ4 \u00fcbertrifft ihn in allen Aspekten.\n<\/li>\n<li><b>ZLE<\/b> \u2014 Null-Level-Encoding. Es ber\u00fchrt normale Daten \u00fcberhaupt nicht, komprimiert jedoch gro\u00dfe Nullfolgen. N\u00fctzlich f\u00fcr vollst\u00e4ndig nicht komprimierbare Datens\u00e4tze (z. B. JPEG, MP4 oder andere bereits komprimierte Formate), da es nicht komprimierbare Daten ignoriert, aber ungenutzten Platz in den endg\u00fcltigen Aufzeichnungen komprimiert.<\/li>\n<\/ul>\n<p>\nWir empfehlen die LZ4-Kompression praktisch f\u00fcr alle Einsatzszenarien; die Leistungseinbu\u00dfen bei der Verarbeitung nicht komprimierbarer Daten sind minimal, w\u00e4hrend <i>der Leistungszuwachs<\/i> f\u00fcr typische Daten erheblich ist. Das Kopieren eines Abbildes einer virtuellen Maschine f\u00fcr eine neue Windows-Betriebssysteminstallation (frisch installiert, keine Daten sind noch vorhanden) mit <code>compression=lz4<\/code> geschah 27% schneller als mit <code>compression=none<\/code>, in <noindex><a rel=\"nofollow\" href=\"https:\/\/jrs-s.net\/2015\/02\/24\/zfs-compression-yes-you-want-this\/\">in diesem Test aus dem Jahr 2015.<\/a><\/noindex>.<\/p>\n<h1>ARC \u2013 adaptiver Austauschcache<\/h1>\n<p>\nZFS ist das einzige moderne Dateisystem, das uns bekannt ist und das sein eigenes Lese-Cache-System verwendet, anstatt sich auf den Seiten-Cache des Betriebssystems zu verlassen, um Kopien von k\u00fcrzlich gelesenen Bl\u00f6cken im Arbeitsspeicher zu speichern.<\/p>\n<p>Obwohl der eigene Cache nicht ohne Probleme ist \u2013 ZFS kann nicht so schnell auf neue Anfragen zur Speicherzuweisung reagieren wie der Kernel, weshalb ein neuer Aufruf <code>malloc()<\/code> zur Speicheraus\u00adweisung fehlschlagen kann, wenn er RAM ben\u00f6tigt, der momentan vom ARC belegt ist. Aber es gibt gewichtige Gr\u00fcnde, den eigenen Cache zu verwenden, zumindest derzeit.<\/p>\n<p>Alle g\u00e4ngigen modernen Betriebssysteme wie MacOS, Windows, Linux und BSD verwenden f\u00fcr die Implementierung des Seiten-Caches den LRU-Algorithmus (Least Recently Used). Dies ist ein einfacher Algorithmus, der einen im Cache gespeicherten Block nach jedem Zugriff \u00abnach oben\u00bb in die Warteschlange verschiebt und Bl\u00f6cke \u00abnach unten\u00bb verdr\u00e4ngt, um Platz f\u00fcr neue Cache-Misshits (Bl\u00f6cke, die vom Laufwerk und nicht aus dem Cache gelesen werden m\u00fcssen) zu schaffen.<\/p>\n<p>Normalerweise funktioniert der Algorithmus ordnungsgem\u00e4\u00df, jedoch kann in Systemen mit gro\u00dfen Arbeitslasten LRU leicht zu thrashing f\u00fchren \u2013 dem Verdr\u00e4ngen h\u00e4ufig ben\u00f6tigter Bl\u00f6cke, um Platz f\u00fcr Bl\u00f6cke zu schaffen, die niemals wieder aus dem Cache gelesen werden.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Adaptive_replacement_cache\">ARC<\/a><\/noindex>\u00a0ist ein wesentlich weniger naiver Algorithmus, der als \u00abgewichteter\u00bb Cache betrachtet werden kann. Nach jedem Zugriff auf einen im Cache gespeicherten Block wird dieser etwas \u00abschwerer\u00bb und es wird schwieriger, ihn zu verdr\u00e4ngen \u2013 selbst nach der Verdr\u00e4ngung wird der Block <i>verfolgt<\/i> f\u00fcr einen bestimmten Zeitraum. Ein Block, der verdr\u00e4ngt wurde, aber dann wieder in den Cache gelesen werden muss, wird ebenfalls \u00abschwerer\u00bb.<\/p>\n<p>Das Endergebnis all dessen ist ein Cache mit einer deutlich h\u00f6heren Trefferquote \u2013 das Verh\u00e4ltnis zwischen Cache-Zugriffen (lesen aus dem Cache) und Fehlschl\u00e4gen (lesen von der Festplatte). Diese Statistik ist \u00e4u\u00dferst wichtig \u2013 nicht nur werden Cache-Hits um ein Vielfaches schneller bearbeitet, sondern auch die Fehlschl\u00e4ge k\u00f6nnen schneller bearbeitet werden, da mehr Cache-Hits weniger parallele Anfragen an die Festplatte zur Folge haben, was die Verz\u00f6gerung f\u00fcr die verbleibenden Fehlschl\u00e4ge, die von der Festplatte bearbeitet werden m\u00fcssen, verringert.<\/p>\n<h1>Fazit<\/h1>\n<p>\nNachdem wir die grundlegende Semantik von ZFS \u2013 wie das Copy-on-Write-Prinzip funktioniert sowie die Beziehungen zwischen Storage-Pools, virtuellen Ger\u00e4ten, Bl\u00f6cken, Sektoren und Dateien \u2013 untersucht haben, sind wir bereit, die tats\u00e4chliche Leistung anhand realer Zahlen zu besprechen.<\/p>\n<p>Im n\u00e4chsten Teil werden wir die tats\u00e4chliche Leistung von Pools mit Mirror vdev und RAIDz miteinander vergleichen sowie im Vergleich zu den traditionellen RAID-Topologien des Linux-Kernels, die wir untersucht haben. <noindex><a rel=\"nofollow\" href=\"https:\/\/arstechnica.com\/information-technology\/2020\/04\/understanding-raid-how-performance-scales-from-one-disk-to-eight\/\">zuvor<\/a><\/noindex>.<\/p>\n<p>Zun\u00e4chst wollten wir uns nur auf die Grundlagen konzentrieren \u2013 die ZFS-Topologien selbst \u2013 aber nach der <i>so vieler<\/i> Wir sind bereit, \u00fcber fortgeschrittene Konfigurationen und Tuning von ZFS zu sprechen, einschlie\u00dflich der Verwendung von unterst\u00fctzenden vdev-Typen wie L2ARC, SLOG und Special Allocation.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/504692\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0432\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0430\u0448\u0438\u0445 \u0434\u0438\u0441\u043a\u043e\u0432 \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RAID. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u0434\u0430\u0436\u0435 \u043f\u043e\u043e\u0431\u0435\u0449\u0430\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0439 \u0432 ZFS. \u042d\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u044e\u0434\u0443: \u043e\u0442 Apple \u0434\u043e Ubuntu. \u041d\u0443 \u0447\u0442\u043e \u0436, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u0434\u043b\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83583,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83582","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0432\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0430\u0448\u0438\u0445 \u0434\u0438\u0441\u043a\u043e\u0432 \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RAID. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u0434\u0430\u0436\u0435 \u043f\u043e\u043e\u0431\u0435\u0449\u0430\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0439 \u0432 ZFS. \u042d\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u044e\u0434\u0443: \u043e\u0442 Apple \u0434\u043e Ubuntu. \u041d\u0443 \u0447\u0442\u043e \u0436, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u0434\u043b\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b ZFS: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0432\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0430\u0448\u0438\u0445 \u0434\u0438\u0441\u043a\u043e\u0432 \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RAID. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u0434\u0430\u0436\u0435 \u043f\u043e\u043e\u0431\u0435\u0449\u0430\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0439 \u0432 ZFS. \u042d\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u044e\u0434\u0443: \u043e\u0442 Apple \u0434\u043e Ubuntu. \u041d\u0443 \u0447\u0442\u043e \u0436, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u0434\u043b\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-01T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-01T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Grundlagen von ZFS: Speicher- und Performance-System | ProHoster","description":"In diesem Fr\u00fchjahr haben wir bereits einige Einf\u00fchrungsthemen besprochen, wie man die Geschwindigkeit Ihrer Festplatten \u00fcberpr\u00fcft und was RAID ist. Im zweiten dieser Themen haben wir sogar versprochen, die Leistung verschiedener Multidisktopologien in ZFS weiter zu erforschen. Dies ist das n\u00e4chste Generation-Dateisystem, das derzeit \u00fcberall eingesetzt wird: von Apple bis Ubuntu. Nun, heute ist der geeignetste Tag, um damit vertraut zu werden.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b ZFS: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c | ProHoster","og:description":"\u042d\u0442\u043e\u0439 \u0432\u0435\u0441\u043d\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0432\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0430\u0448\u0438\u0445 \u0434\u0438\u0441\u043a\u043e\u0432 \u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 RAID. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u0434\u0430\u0436\u0435 \u043f\u043e\u043e\u0431\u0435\u0449\u0430\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0439 \u0432 ZFS. \u042d\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u044e\u0434\u0443: \u043e\u0442 Apple \u0434\u043e Ubuntu. \u041d\u0443 \u0447\u0442\u043e \u0436, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u0435\u043d\u044c \u0434\u043b\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/osnovy-zfs-sistema-hraneniya-i-proizvoditelnost","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-01T17:42:21+00:00","article:modified_time":"2020-06-01T17:42:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83582","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:14:37","updated":"2022-09-28 10:00:57"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/83582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=83582"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/83582\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/83583"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=83582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=83582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=83582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}