Welchen Sinn haben die Grenzen von ZFS?


10

Laut Wikipedia hat ZFS folgende Grenzen:

  • Max. Volumengröße : 256 Billionen Yobibyte (2 128 Bytes)
  • Max. Dateigröße : 16 Exbibytes (2 64 Bytes)
  • Max. Anzahl der Dateien :
    • Pro Verzeichnis: 2 48
    • Pro Dateisystem: unbegrenzt
  • Max. Dateinamenlänge : 255 ASCII-Zeichen (weniger für Multibyte-Zeichencodierungen wie Unicode)

Warum hat es diese Grenzen? Was begrenzt diese Dinge intern? Warum konnte ZFS theoretisch keine unbegrenzte Volume-Größe oder Dateinamenlänge usw. haben?

Antworten:


27

Was begrenzt diese Dinge intern?

Lange Antwort

Die Grenzwerte von ZFS basieren auf Ganzzahlen mit fester Größe, da dies der schnellste Weg ist, um in einem Computer zu rechnen.

Die Alternative heißt Arithmetik mit beliebiger Genauigkeit , ist aber von Natur aus langsam . Aus diesem Grund ist Arithmetik mit beliebiger Genauigkeit in den meisten Programmiersprachen eine Zusatzbibliothek und nicht die Standardmethode für Arithmetik. Es gibt Ausnahmen, aber diese sind in der Regel Mathematik orientierte DSLs wie bcoder Wolfram Sprache .

Wenn Sie schnell rechnen möchten, verwenden Sie Wörter mit fester Größe, Punkt.

Die Geschwindigkeit, die durch Arithmetik mit beliebiger Genauigkeit erreicht wird, ist im RAM eines Computers schon schlimm genug. Wenn ein Dateisystem jedoch nicht weiß, wie viele Lesevorgänge es ausführen muss, um alle benötigten Zahlen in den RAM zu laden, wäre dies sehr kostspielig. Ein Dateisystem, das auf Ganzzahlen beliebiger Größe basiert, müsste jede Zahl aus mehreren Blöcken zusammensetzen, was eine Menge zusätzlicher E / A aus mehreren Festplattentreffern im Vergleich zu einem Dateisystem erfordert, das im Voraus weiß, wie groß seine Metadatenblöcke sind.

Lassen Sie uns nun die praktische Bedeutung jeder dieser Grenzen diskutieren:

Max. Volumengröße

2 128 Bytes sind praktisch schon unendlich. Wir können diese Zahl stattdessen als ungefähr 10 38 Bytes schreiben , was bedeutet, dass Sie, um diese Grenze zu erreichen, einen einzelnen erdgroßen ZFS-Pool haben müssen, in dem jedes seiner 10 50 Atome zum Speichern von Daten verwendet wird, und jedes Byte wird von einem Element gespeichert, das nicht größer als 10 12 Atome ist.

10 12 Atome klingen nach viel, aber es sind nur etwa 47 Pikogramm Silizium .

Die Datendichte in Gramm beträgt zum  jetzigen Zeitpunkt 2,5 × 10 -13 g / Byte für die Speicherung von microSD: Die größte verfügbare SD-Karte hat 1 TB und wiegt etwa 0,25 g.¹ Eine microSD-Karte besteht nicht aus reinem Material Silizium, aber Sie können die Verpackung nicht ignorieren, weil wir etwas davon auch in unserem Erdcomputer brauchen werden; Wir gehen davon aus, dass die niedrige Dichte des Kunststoffs und die höhere Dichte der Metallstifte im Durchschnitt ungefähr die gleiche Dichte wie Silizium aufweisen. Wir brauchen hier auch einen Slop, um Inter-Chip-Verbindungen usw. zu berücksichtigen.

A Piko- etwas 10 -12 , so dass unser 47 pg und 2,5 × 10 -13  g / B - Nummern von über etwa eine Größenordnung voneinander entfernt sind. Das bedeutet, dass Sie in erster Näherung, um einen einzelnen ZFS-Pool mit maximaler Größe aus den derzeit größten verfügbaren microSD-Karten zu erstellen, möglicherweise die Atome eines ganzen erdgroßen Planeten verwenden müssen, und zwar nur dann, wenn Sie damit beginnen etwas in der Nähe der richtigen Mischung aus Silizium, Kohlenstoff, Gold usw., so dass Sie nicht so viel Schlacke bekommen, dass Sie die Schätzung sprengen.

Wenn Sie der Meinung sind, dass es unfair ist, hier Flash-Speicher anstelle von etwas dichterem wie Band oder Festplatte zu verwenden, sollten Sie die damit verbundenen Datenraten sowie die Tatsache berücksichtigen, dass wir nicht einmal versucht haben, Redundanz oder Geräteaustausch in Betracht zu ziehen. Wir müssen davon ausgehen, dass dieser erdgroße ZFS-Pool aus vdevs besteht , die niemals ersetzt werden müssen, und dass sie Daten schnell genug übertragen können, damit Sie den Pool in angemessener Zeit füllen können. Hier macht nur Solid-State-Speicher Sinn.

Die obige Annäherung ist ziemlich grob, und die Speicherdichten steigen weiter an, aber behalten Sie die Perspektive: Um diesen Stunt des Aufbaus von ZFS-Pools mit maximaler Größe in Zukunft zu schaffen, müssen wir immer noch die gesamte Kruste verwenden Kernressourcen kleiner Planeten .

Max. Dateigröße

Wir haben jetzt ein Dateisystem von der Größe eines Planeten . Was können wir über die Größe der darin gespeicherten Dateien sagen?

Lassen Sie uns jedem Menschen auf dem Planeten ein gleich großes Stück dieses Pools geben:

10 38  ÷ 10 10  ≈ 10 28  ÷ 10 19  ≈ 10 9

Das ist die Größe des Pools geteilt durch die Bevölkerung von Earth² geteilt durch die maximale Dateigröße in runden Zahlen.

Mit anderen Worten, jede Person kann ungefähr eine Milliarde Dateien mit maximaler Größe in ihrem winzigen persönlichen Teil unseres erdgroßen ZFS-Speicherarrays speichern.

(Wenn es Sie stört, dass unser Speicherarray hier in diesem Beispiel immer noch die Größe eines Planeten hat, denken Sie daran, dass es so groß sein musste, um das erste Limit oben zu erreichen. Es ist also fair, es für dieses Beispiel weiter zu verwenden Hier.)

Diese maximale Dateigröße pro Datei beträgt 16  EiB unter ZFS, was 16 × größer ist als die maximale Volume-Größe von ext4 , die heute für sich genommen als lächerlich groß angesehen wird.

Stellen Sie sich vor, jemand verwendet sein Stück Planet ZFS (früher bekannt als Earth), um Backups von ext4-Disk-Images mit maximaler Größe zu speichern. Darüber hinaus hat dieser wahnsinnige Kunde (es gibt immer einen) beschlossen tar, 16 pro Datei zu erreichen, um die maximale Dateigrößenbeschränkung für ZFS zu erreichen. Danach hat dieser Kunde noch etwa eine Milliarde Mal mehr Platz, um dies erneut zu tun .

Wenn Sie sich über diese Grenze Sorgen machen, müssen Sie sich vorstellen, dass Sie dieses Problem lösen müssen. Und das , ohne auch nur in die erforderlichen Daten zu erhalten Bandbreite benötigt, um diese Datei in den Online - Backup - Service zu übertragen einmal .

Lassen Sie uns auch klarstellen, wie unwahrscheinlich dieser Erdcomputer ist. Zuerst müsste man herausfinden, wie man es konstruiert, ohne dass es unter der Schwerkraft in sich zusammenfällt und in der Mitte geschmolzen wird. Dann müssten Sie herausfinden, wie Sie es mit jedem einzelnen Atom auf der Erde ohne Schlackenreste herstellen können.

Nun, da Sie die Oberfläche des Erdcomputers in eine Höllenlandschaft verwandelt haben, müssten alle Menschen, die versuchen, diesen Computer zu nutzen, woanders wohnen, an einem Ort, an dem Sie häufig Menschen hören würden, die die Geschwindigkeit verfluchen. Leichte Verzögerungen, die die Latenz bei jeder Transaktion zwischen dem Erdcomputer und dem Ort, an dem sie sich gerade befinden, erhöhen. Wenn Sie glauben, dass Ihre Internet-Ping-Zeit von ~ 10 ms heute ein Problem ist, stellen Sie sich vor, Sie würden 2,6 Lichtsekunden zwischen Ihre Tastatur und den Computer legen, wenn wir die Bevölkerung der Erde zum Mond bewegen, damit wir diesen Erdcomputer herstellen können.

Die Volumen- und Dateigrößenbeschränkungen von ZFS sind Science-Fiction-groß.

Max. Anzahl der Dateien pro Verzeichnis

2 48 sind ungefähr 10 14 Dateien pro Verzeichnis, was nur für Anwendungen ein Problem darstellt, die versuchen, ZFS als flaches Dateisystem zu behandeln .

Stellen Sie sich einen Internetforscher vor, der Dateien zu jeder IP-Adresse im Internet speichert. Angenommen, es werden genau 2 32 IPs verfolgt, nachdem zuerst die Leerzeichen im alten IPv4-Bereich subtrahiert und dann die Hosts hinzugefügt wurden, die jetzt IPv6-Adressen verwenden, damit die Arithmetik gut herauskommt. Welches Problem versucht dieser Forscher anzugehen, weshalb er ein Ablagesystem aufbauen muss, in dem mehr als 2 16 - 65536 gespeichert werden können ! - Dateien pro IP?

Angenommen, dieser Forscher speichert auch Dateien pro TCP-Port, sodass wir mit nur einer Datei pro IP: Port-Kombination unseren 2 16- Multiplikator aufgebraucht haben .

Das Update ist einfach: Speichern Sie die Per-IP-Dateien in einem nach der IP benannten Unterverzeichnis und die Per-Port-Dateien in einem Unterverzeichnis des Verzeichnisses, in dem sich die Per-IP-Dateien befinden. Jetzt kann unser Forscher 10 14 Dateien pro IP: Port-Kombination speichern , was für ein langfristiges globales Internetüberwachungssystem ausreicht.

Die Verzeichnisgrößenbeschränkung von ZFS ist nicht das, was ich als "Science Fiction Big" bezeichnen würde, da wir heute von realen Anwendungen wissen, die diese Beschränkung erreichen können. Die Macht der Hierarchie bedeutet jedoch, dass Sie einfach eine weitere Verzeichnisebene hinzufügen können, wenn Sie auf die stoßen Grenze.

Diese Grenze wird wahrscheinlich so niedrig wie diese festgelegt, um zu vermeiden, dass die Datenstrukturen, die zum Auffinden von Dateien in einem bestimmten Verzeichnis erforderlich sind, zu groß sind, um in den Arbeitsspeicher zu passen. Es empfiehlt Ihnen, Ihre Daten hierarchisch zu organisieren, um dieses Problem zu vermeiden.

Max. Dateinamenlänge

Obwohl diese eine Grenze streng erscheint, macht sie tatsächlich Sinn.

Diese Begrenzung stammt nicht von ZFS. Ich glaube, es geht auf FFS in 4.2BSD zurück . Ich kann das Zitat nicht finden, aber als diese Grenze noch jung war, wies jemand darauf hin, dass dies genug Platz für "einen kurzen Brief an Oma" ist.

Das wirft also die Frage auf: Warum müssen Sie Ihre Dateien aussagekräftiger benennen? Jeder größere Bedarf erfordert wahrscheinlich eine Hierarchie. An diesem Punkt multiplizieren Sie das Limit mit der Anzahl der Ebenen in der Hierarchie plus eins. Das heißt, wenn die Datei 3 Ebenen tief in der Hierarchie vergraben ist, beträgt die Grenze für den Namen des vollständigen Pfads 4 × 255 = 1020 Zeichen.

Letztendlich ist diese Grenze eine menschliche Grenze, keine technologische Grenze. Dateinamen sind für den menschlichen Gebrauch bestimmt, und der Mensch benötigt wirklich nicht mehr als 255 Zeichen, um den Inhalt einer Datei sinnvoll zu beschreiben. Eine höhere Grenze wäre einfach nicht hilfreich. Die Einschränkung ist alt (1983), weil Menschen seitdem nicht mehr in der Lage sind, mit längeren Dateinamen umzugehen.

Wenn Sie fragen, woher der seltsam aussehende Wert "255" stammt, ist dies eine Einschränkung, die auf der Größe eines 8-Bit-Bytes basiert. 2 8 ist 256, und der hier verwendete N-1-Wert bedeutet wahrscheinlich, dass sie einen Nullterminator verwenden , um das Ende der Dateinamenzeichenfolge in einem 256-Byte-Feld in den Metadaten pro Datei zu markieren.

Kurze Antwort

Welche Grenzen haben praktisch ?


Fußnoten:

  1. Ich habe dies mit einer Skala gemessen, die mit einer Genauigkeit von 0,01 g angegeben wurde.

  2. 7,55 Milliarden , zum Zeitpunkt dieses Schreibens. Oben runden wir dies auf 10 10 ab , die wir Mitte des Jahrhunderts erreichen sollten .


3
Viel Spaß beim Lesen, danke! Die Mindestanzahl für PATH_MAXein POSIX-System beträgt 256. Diese kann aus Komponenten mit jeweils höchstens zwei NAME_MAXZeichen bestehen (dieser Wert beträgt mindestens 14).
Kusalananda

2
Sehr gute Antwort. Hinzufügen zum Dateinamen-Teil: Lange Dateinamen verringern tatsächlich die Benutzerfreundlichkeit für Menschen, insbesondere wenn sie mit kurzen Namen gemischt werden (mehr Bildschirmgröße erforderlich, um sie anzuzeigen, das Layout wird beeinflusst, der Shell-Verlauf wird schwerer zu lesen sein usw.), und sie sind immer noch vorhanden schlechter als ein flexibles und durchsuchbares Tagging-System (das ZFS leider fehlt).
user121391

Das ist erstaunlich, aber warum haben sie den Dateinamen auf 255 Zeichen verkrüppelt? Hierfür gibt es sehr praktische Anwendungsfälle, z. B. lange Kurs- oder Buch- oder Papiertitel sowie die Liste der Autorennamen. Und es gibt Software, die kaputt geht, wenn sie nicht den vollständigen Dateinamen schreiben kann, z. B. youtube-dlwenn sie das Video eines solchen Kurses herunterlädt.
Dan Dascalescu

@ DanDascalescu Ich habe das in der Antwort begründet und Abhilfe geschaffen.
Warren Young

@ WarrenYoung: Keine Notwendigkeit zu rechtfertigen, da Sie das Limit nicht auferlegt haben. Ich bin jedoch nicht der Meinung, dass der Abschnitt "Max. Dateinamenlänge" meinen Einwand anspricht (mit dem Titelbeispiel "Kurs / Buch / Papier"). Ich möchte, dass mein Buch- / Kurs- / Videodateiname nicht autark ist und nicht künstlich in ein Verzeichnis (z. B. den Autor) und einen Dateinamen aufgeteilt wird. Sehen Sie sich die Null-, Eins- , Unendlichkeitsregel an und führen Sie eine einfache Suche nach "Dateiname zu lang" -Fenstern durch - sie zeigt zig Millionen Ergebnisse.
Dan Dascalescu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.