2009-03-18 12 views

risposta

6

ARG_MAX sta per prendere problemi con questo ... per esempio, rm -rf * (mentre nella directory) sta per dire "troppi argomenti". Le utility che vogliono fare un qualche tipo di globbing (o una shell) avranno qualche interruzione di funzionalità.

Se tale directory è disponibile al pubblico (diciamo via ftp o server Web), potrebbero verificarsi ulteriori problemi.

L'effetto su qualsiasi dato file system dipende interamente da quel file system. Con che frequenza si accede a questi file, qual è il file system? Ricorda, Linux (per impostazione predefinita) preferisce mantenere i file a cui si accede recentemente in memoria mentre si inseriscono i processi in swap, a seconda delle impostazioni. Questa directory è servita tramite http? Google lo vedrà e lo analizzerà? In tal caso, potrebbe essere necessario regolare la pressione e lo swappiness della cache VFS.

Edit:

ARG_MAX è un limite a livello di sistema per quanti possano essere presentate argomentazioni al punto di ingresso di un programma. Quindi, prendiamo 'rm', e l'esempio "rm -rf *" - la shell girerà '*' in una lista delimitata da spazi di file che a loro volta diventano gli argomenti di 'rm'.

La stessa cosa succederà con ls e molti altri strumenti. Ad esempio, ls foo * potrebbe rompersi se troppi file iniziano con "pippo".

Suggerirei (non importa quale fs è in uso) per suddividerlo in blocchi di directory più piccoli, solo per questo motivo.

+0

Grazie molte Sir :) Questo tuo post mi ha davvero aiutato molto! –

3

Quando esegui accidentalmente "ls" in quella directory, o usi il completamento della tabulazione, o vuoi eseguire "rm *", sarai in grossi guai. Inoltre, potrebbero esserci problemi di prestazioni a seconda del tuo file system.

È consigliabile raggruppare i file in directory che sono denominate dai primi 2 o 3 caratteri dei nomi file, ad es.

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

maggior parte delle distribuzioni utilizzano Ext3 per impostazione predefinita, che può utilizzare B-tree indicizzazione per directory di grandi dimensioni. Alcune delle distro hanno questa funzione dir_index abilitata per impostazione predefinita in altre che dovresti abilitare tu stesso. Se lo abiliti, non ci sono rallentamenti nemmeno per milioni di file.

per vedere se dir_index funzione è attivata do (come root):

tune2fs -l /dev/sdaX | grep features 

Per attivare dir_index funzione (come root):

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

Sostituire /dev/sdaX con partizione per la quale si desidera attivare esso.

+1

Là * è * una penalità, la differenza è tra una penalità esponenziale, lineare o logaritmica – dsm

+0

Fai i tuoi numeri. Hai 1mln di file. Con l'indice occorrono N secondi per accedere al file per nome. Ora lo divideresti in 1000 directory con 1000 file ciascuna. Ti bastano N/2 secondi per accedere alla directory, un altro N/2 per accedere al file. Totale N secondi senza contare l'overhead per il cambio di directory. – vartec

0

La risposta ovvia è che la cartella sarà estremamente difficile da usare per gli umani molto prima di qualsiasi limite tecnico, (il tempo necessario per leggere l'output di ls per uno, sono dozzine di altri motivi) C'è una buona ragione per cui non posso dividere in sottocartelle?

3

La mia esperienza con grandi directory in ext3 e dir_index permesso:

  • Se si conosce il nome del file che si desidera accedere, non v'è quasi nessuna penalità
  • Se si vuole fare operazioni che necessità per leggere l'intera voce della directory (come un semplice ls in quella directory) ci vorranno diversi minuti per la prima volta. Quindi la directory rimarrà nella cache del kernel e non ci saranno più penalità
  • Se il numero di file diventa troppo alto, si incontrano problemi ARG_MAX e altri. Ciò significa in sostanza che il carattere jolly (*) non funziona sempre come previsto. Questo è solo se si vuole veramente per eseguire un'operazione su tutti i file in una volta

Senza dir_index tuttavia, si sta davvero fregato :-D

0

Non tutti i filesystem sostiene che molti file.

Su alcuni di essi (ext2, ext3, ext4) è molto facile raggiungere il limite di inode.

Problemi correlati