GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Maximale Anzahl von Dateien/Verzeichnissen unter Linux?

60000 ist nichts, 20000 auch. Aber Sie sollten diese 20000 auf jeden Fall gruppieren, um den Zugriff darauf zu beschleunigen. Vielleicht in Gruppen von 100 oder 1000, indem man die Nummer des Verzeichnisses nimmt und sie durch 100, 500, 1000, was auch immer, teilt.

Ich habe z. B. ein Projekt, bei dem die Dateien Nummern haben. Ich gruppiere sie in 1000er, also habe ich

id/1/1332
id/3/3256
id/12/12334
id/350/350934

Möglicherweise haben Sie tatsächlich eine feste Grenze - einige Systeme haben 32-Bit-Inodes, sodass Sie auf eine Anzahl von 2^32 pro Dateisystem beschränkt sind.


Wenn das Dateisystem Ihres Servers den dir_index hat Funktion eingeschaltet (siehe tune2fs(8) Einzelheiten zum Überprüfen und Aktivieren der Funktion), dann können Sie vernünftigerweise mehr als 100.000 Dateien in einem Verzeichnis speichern, bevor die Leistung abnimmt. (dir_index ist für die meisten Distributionen seit einigen Jahren der Standard für neue Dateisysteme, also wäre es nur ein altes Dateisystem, das die Funktion standardmäßig nicht aktiviert hat.)

Das Hinzufügen einer weiteren Verzeichnisebene, um die Anzahl der Dateien in einem Verzeichnis um den Faktor 16 oder 256 zu reduzieren, würde die Chancen für Dinge wie ls * drastisch verbessern funktioniert, ohne das Kernel-Maximum argv zu überschreiten Größe.

Typischerweise geschieht dies durch etwas wie:

/a/a1111
/a/a1112
...
/b/b1111
...
/c/c6565
...

Das heißt, dem Pfad einen Buchstaben oder eine Ziffer voranstellen, basierend auf einer Funktion, die Sie aus dem Namen berechnen können. (Die ersten beiden Zeichen von md5sum oder sha1sum des Dateinamens ist ein gängiger Ansatz, aber wenn Sie eindeutige Objekt-IDs haben, dann 'a'+ id % 16 ist ein einfacher Mechanismus, um zu bestimmen, welches Verzeichnis verwendet werden soll.)


ext[234]-Dateisysteme haben eine feste maximale Anzahl von Inodes; jede Datei oder jedes Verzeichnis benötigt einen Inode. Sie können die aktuelle Anzahl und Limits mit df -i sehen . Zum Beispiel auf einem 15-GB-ext3-Dateisystem, das mit den Standardeinstellungen erstellt wurde:

Filesystem           Inodes  IUsed   IFree IUse% Mounted on
/dev/xvda           1933312 134815 1798497    7% /

Darüber hinaus gibt es insbesondere für Verzeichnisse keine Beschränkung; Denken Sie jedoch daran, dass jede Datei oder jedes Verzeichnis mindestens einen Dateisystemblock (normalerweise 4 KB) benötigt, selbst wenn es sich um ein Verzeichnis mit nur einem einzigen Element handelt.

Wie Sie sehen können, sind 80.000 Inodes jedoch wahrscheinlich kein Problem. Und mit der dir_index Option (aktivierbar mit tune2fs ), Suchen in großen Verzeichnissen sind keine allzu große Sache. Beachten Sie jedoch, dass viele Verwaltungstools (wie ls oder rm ) kann es schwer haben, mit Verzeichnissen umzugehen, die zu viele Dateien enthalten. Daher wird empfohlen, Ihre Dateien so aufzuteilen, dass Sie nicht mehr als ein paar hundert bis tausend Elemente in einem bestimmten Verzeichnis haben. Eine einfache Möglichkeit, dies zu tun, besteht darin, die von Ihnen verwendete ID zu hashen und die ersten paar Hexadezimalziffern als Zwischenverzeichnisse zu verwenden.

Angenommen, Sie haben die Artikel-ID 12345 und sie wird zu 'DEADBEEF02842.......' gehasht . Sie können Ihre Dateien unter /storage/root/d/e/12345 speichern . Sie haben jetzt die Anzahl der Dateien in jedem Verzeichnis um 1/256 reduziert.


Linux
  1. Kopieren Sie Dateien und Verzeichnisse unter Linux

  2. So benennen Sie ein Verzeichnis unter Linux um

  3. Linux Dateien und Verzeichnisse löschen

  4. Erstellen und Entfernen von Dateien und Verzeichnissen unter Linux

  5. Größte zulässige maximale Anzahl geöffneter Dateien in Linux

So kopieren Sie Dateien und Verzeichnisse unter Linux

So entfernen (löschen) Sie das Verzeichnis in Linux

So entfernen Sie Dateien und Verzeichnisse auf einem Linux-Terminal

Zählen Sie die Anzahl der Dateien in einem Verzeichnis in Linux

So zählen Sie die Anzahl der Dateien in einem Verzeichnis in Linux

Linux:Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen finden