2009-03-18 11 views

Antwort

6

ARG_MAX wird damit umgehen ... zum Beispiel, rm -rf * (während im Verzeichnis) wird sagen "zu viele Argumente". Dienstprogramme, die eine Art Globbing (oder eine Shell) durchführen wollen, werden einige Funktionalitätspausen haben.

Wenn dieses Verzeichnis für die Öffentlichkeit verfügbar ist (sagen wir via FTP oder Webserver), können zusätzliche Probleme auftreten.

Die Auswirkung auf ein beliebiges Dateisystem hängt vollständig von diesem Dateisystem ab. Wie häufig wird auf diese Dateien zugegriffen? Was ist das Dateisystem? Denken Sie daran, dass Linux (standardmäßig) es vorzieht, zuletzt aufgerufene Dateien im Speicher zu belassen, während Prozesse abhängig von Ihren Einstellungen in Swap versetzt werden. Wird dieses Verzeichnis über http bedient? Wird Google es sehen und crawlen? Wenn dies der Fall ist, müssen Sie möglicherweise den VFS-Cachedruck und das Swappiness anpassen.

Edit:

ARG_MAX ist eine systemweite Limit, wie viele Argumente können zu einer Programmeinstiegspunkt präsentiert. Nehmen wir also 'rm' und das Beispiel 'rm -rf *' - die Shell wird '*' in eine durch Leerzeichen getrennte Liste von Dateien verwandeln, die wiederum zu den Argumenten für 'rm' werden.

Das gleiche wird mit ls und mehreren anderen Tools passieren. Zum Beispiel kann ls foo * brechen, wenn zu viele Dateien mit 'foo' beginnen.

Ich rate (egal was fs verwendet wird), um es in kleinere Verzeichnisstücke aufzuteilen, nur aus diesem Grund allein.

+0

Vielen Dank Herr :) Dieser Beitrag von mir hat mir wirklich sehr geholfen! –

3

Wenn Sie versehentlich "ls" in diesem Verzeichnis ausführen oder die Tabulatorvervollständigung verwenden oder "rm *" ausführen möchten, sind Sie in großen Schwierigkeiten. Je nach Dateisystem treten möglicherweise Leistungsprobleme auf.

Es ist gute Praxis, Ihre Dateien in Verzeichnisse zu gruppieren, die nach den ersten zwei oder drei Zeichen der Dateinamen benannt sind, z.

 
aaa/ 
    aaavnj78t93ufjw4390 
    aaavoj78trewrwrwrwenjk983 
    aaaz84390842092njk423 
    ... 
abc/ 
    abckhr89032423 
    abcnjjkth29085242nw 
    ... 
... 
3

Die meisten Distributionen verwenden Ext3 standardmäßig, die b-Baum Indizierung für große Verzeichnisse verwenden können. Einige der Distributionen haben diese dir_index-Funktion standardmäßig aktiviert, in anderen müssen Sie sie selbst aktivieren. Wenn Sie es aktivieren, gibt es auch bei Millionen von Dateien keine Verlangsamung.

Um zu sehen, ob dir_index Funktion do aktiviert wird (als root):

tune2fs -O dir_index /dev/sdaX 
e2fsck -D /dev/sdaX 

/dev/sdaX mit Partition, für die Sie aktivieren möchten, ersetzen zu:

tune2fs -l /dev/sdaX | grep features 

dir_index Funktion (als root) aktivieren es.

+1

Es gibt * eine Strafe, der Unterschied liegt zwischen einer exponentiellen, linearen oder logarithmischen Strafe – dsm

+0

Machen Sie Ihre Zahlen. Sie haben 1mln Dateien. Mit dem Index dauert es N Sekunden, um auf die Datei nach Namen zuzugreifen. Jetzt würden Sie es in 1000 Verzeichnisse mit je 1000 Dateien aufteilen. Es dauert N/2 Sekunden, um auf das Verzeichnis zuzugreifen, ein weiteres N/2, um auf die Datei zuzugreifen. Summe N Sekunden, die den Overhead für das Wechseln der Verzeichnisse nicht berücksichtigt. – vartec

0

Die offensichtliche Antwort ist der Ordner wird extrem schwierig für Menschen, lange vor jeder technischen Grenze zu verwenden, (Zeit genommen, um die Ausgabe von ls für einen zu lesen, sind sie Dutzende von anderen Gründen) Gibt es einen guten Grund, warum Sie kann nicht in Unterordner aufgeteilt werden?

3

Meine Erfahrung mit großen Verzeichnissen auf ext3 und dir_index aktiviert:

  • Wenn Sie den Namen der Datei, die Sie zugreifen möchten wissen, gibt es fast keine Strafe
  • Wenn Sie Operationen, dass die Notwendigkeit zu tun, wollen Um den gesamten Verzeichniseintrag einzulesen (wie eine einfache ls in diesem Verzeichnis), wird es zum ersten Mal einige Minuten dauern. Dann bleibt das Verzeichnis im Kernel-Cache und es gibt keine Strafe mehr
  • Wenn die Anzahl der Dateien zu hoch wird, treten Sie in ARG_MAX et al Probleme. Das bedeutet, dass Wildcarding (*) nicht immer wie erwartet funktioniert. Dies ist nur, wenn Sie wirklich eine Operation auf alle Dateien auf einmal

Ohne dir_index jedoch durchführen möchten, sind Sie wirklich geschraubt :-D

0

Nicht jedes Dateisystem unterstützt, dass viele Dateien.

Bei einigen von ihnen (ext2, ext3, ext4) ist es sehr einfach, das Inode-Limit zu erreichen.

Verwandte Themen