Wie viele Dateien kann ein Unix-Ordner maximal aufnehmen?

20

Wie viele Dateien kann ein Unix-Ordner maximal aufnehmen?

Ich denke, es wird die gleiche Anzahl von Dateien sein.

Peter Mortensen
quelle
3
Eine viel bessere Frage könnte sein: Wie viele sollte ich verwenden? stackoverflow.com/questions/466521/…
Joachim Sauer
1
Ich würde es begrüßen, wenn meine Website-URL so aussieht wie site.com/username/ und so weiter, aber wenn ich Glück habe, bekomme ich mehr als 2 Millionen Benutzer, das wären mehr als 2 Millionen Ordner, da ich das nicht tue Um ein Skript wie PHP mit einem Modrewrite zu verwenden, habe ich mir die anderen Möglichkeiten von Ordnern in einem Ordner angesehen
1
Tun Sie sich selbst einen Gefallen und erstellen Sie Unterverzeichnisse mit einem Umschreibungsschema.
Peter Eisentraut

Antworten:

14

Auf allen aktuellen Unix-Dateisystemen kann ein Verzeichnis eine praktisch unbegrenzte Anzahl von Dateien enthalten. Während "unbegrenzt" durch Speicherplatz und Inodes begrenzt ist - was zuerst ausgeht.

Bei älteren Dateisystem-Designs ( ext2 , UFS , HFS + ) wird es langsam, wenn sich viele Dateien in einem Verzeichnis befinden. Normalerweise wird es bei 10.000 Dateien schmerzhaft. Mit neueren Dateisystemen ( ReiserFS , XFS , ZFS , UFS2 ) können Sie Millionen von Dateien in einem Verzeichnis haben, ohne allgemeine Leistungsengpässe zu bemerken.

Aber so viele Dateien in einem Verzeichnis zu haben, ist nicht gut getestet und es gibt viele Tools, die das nicht können. Beispielsweise können periodische Systemwartungsskripten darauf fehlen.

Ich benutzte glücklich ein Verzeichnis mit mehreren Millionen Dateien auf UFS2 und hatte keine Probleme gesehen, bis ich das Verzeichnis löschen wollte - das dauerte mehrere TAGE.

max
quelle
12

Es hängt davon ab, mit wie vielen Inodes das Dateisystem erstellt wurde. Ausführen

df -i 

gibt Ihnen die Anzahl der freien Inodes. Dies ist die praktische Grenze dafür, wie viele Dateien ein Dateisystem und damit ein Verzeichnis enthalten kann.

Peter Mortensen
quelle
1
Bei vielen Dateisystemen ist die Anzahl der Dateien pro Verzeichnis jedoch begrenzt, unabhängig von der Anzahl der freien Inodes.
1
Ja, aber die Frage bezog sich auf UNIX-Dateisysteme. Soweit mir bekannt ist, wird die Anzahl der Dateien in einem Verzeichnis von allen modernen UNIX-Dateisystemen nicht begrenzt.
6

Ich nehme an, Sie denken darüber nach, viele Dateien an einem Ort zu speichern, nicht wahr?

Die meisten modernen Unix-Dateisysteme können viele Dateien in einem Verzeichnis ablegen. Vorgänge wie das Folgen von Pfaden, Auflisten von Dateien usw. erfordern jedoch eine lineare Suche in der Dateiliste und werden langsam, wenn die Liste zu groß wird.

Ich erinnere mich an die Tatsache, dass ein paar Tausend für die meisten praktischen Zwecke zu viel sind. Die typische Lösung besteht darin, die Gruppierung aufzulösen. Das ist,

/some/path/to/dir/a/
/some/path/to/dir/b/
...
/some/path/to/dir/z/

und speichern Sie Ihre Dateien in dem entsprechenden Unterverzeichnis entsprechend einem Hash von ihnen basename. Wählen Sie einen geeigneten Hash, der erste Buchstabe kann für einfache Fälle verwendet werden.


Cristian Ciupitu schreibt in den Kommentaren, dass XFS und möglicherweise andere sehr neue Dateisysteme log(N)durchsuchbare Strukturen zum Speichern von Verzeichnisinhalten verwenden, sodass diese Einschränkung erheblich verbessert wird .

dmckee
quelle
5
Einige moderne Dateisysteme, z. B. XFS, enthalten keine lineare Suche. Die B-Tree-Technologie von XFS ermöglicht es, mithilfe komplexer Indizes (von uoks.uj.edu.pl/resources/flugor/IRIX/xfs-whitepaper.html ) direkt zu den Blöcken und / oder Bereichen zu wechseln, die den Speicherort einer Datei enthalten .
Cristian Ciupitu
Ah! Ich wusste das nicht. Vielen Dank. Fügt dem Text hinzu.
dmckee
1
Für ext3 müssen Sie die Funktion "dir_index" aktivieren, vgl. tune2fs (8).
0

ext3Eines der gängigsten Linux-Dateisystemformate wird sehr langsam, wenn sich in einem Verzeichnis mehr als 20.000 Dateien befinden. Unabhängig davon, wie viele Dateien gespeichert werden können, sollten Sie möglichst vermeiden, dass sich so viele Dateien in einem Verzeichnis befinden.

Rory
quelle
0

Nach dem Kommentar, den Sie abgegeben haben, ist es mir egal, wie viele Dateien / Ordner Ihr FS hosten kann.

Sie sollten wahrscheinlich erwägen, ModRewrite zu verwenden und site.com/username in site.com/?user= oder etwas Ähnliches umzuschreiben und alle Ihre Daten in einer Datenbank zu speichern. Das Erstellen eines Ordners pro Benutzer ist in der Regel nicht erforderlich (und keine gute Idee).

Das heißt, jedes Dateisystem hat Grenzen und dfkann Ihnen sagen, wie viele Inodes auf jeder Partition Ihres Systems verfügbar sind.

ℝaphink
quelle