Qual è il numero massimo di file che può contenere una cartella Unix?


20

Qual è il numero massimo di file che può contenere una cartella Unix?

Penso che sarà lo stesso del numero di file.


3
Una domanda molto migliore potrebbe essere: quanti dovrei usare? stackoverflow.com/questions/466521/…
Joachim Sauer,

1
Mi piacerebbe che l'URL del mio sito assomigliasse a site.com/username/ e così via, ma pensando che (se sono fortunato) ottenere più di 2 milioni di utenti che sarebbero più di 2 milioni di cartelle, dal momento che non voglio usare uno script come PHP con un modrewrite stavo guardando le altre possibilità di cartelle in una cartella

1
Fatti un favore e crea sottodirectory con uno schema di riscrittura.
Peter Eisentraut,

Risposte:



14

Su tutti gli attuali filesystem Unix una directory può contenere un numero praticamente illimitato di file. Considerando che "illimitato" è limitato da spazio su disco e inode - qualunque cosa si esaurisca per prima.

Con i vecchi progetti di file system ( ext2 , UFS , HFS + ) le cose tendono a rallentare se si hanno molti file in una directory. Di solito le cose iniziano a diventare dolorose intorno a 10.000 file. Con i filesystem più recenti ( ReiserFS , XFS , ZFS , UFS2 ) puoi avere milioni di file in una directory senza vedere colli di bottiglia delle prestazioni generali.

Ma avere così tanti file in una directory non è ben testato e ci sono molti strumenti che falliscono. Ad esempio, gli script di manutenzione periodica del sistema potrebbero non funzionare.

Ho usato felicemente una directory con diversi milioni di file su UFS2 e non avevo riscontrato alcun problema fino a quando non volevo eliminare la directory, il che ha richiesto diversi GIORNI.


12

Dipende da quanti inode è stato creato il filesystem. Esecuzione

df -i 

ti darà il numero di inode gratuiti. Questo è il limite pratico di quanti file può contenere un filesystem e quindi una directory.


1
Tuttavia, molti filesystem hanno un limite di file per directory, indipendentemente dal numero di inode liberi.

1
sì, ma la domanda riguardava i filesystem UNIX e per quanto ne so tutti i moderni filesystem UNIX non limitano il numero di file in una directory.

6

Suppongo che stai pensando di archiviare molti file in un unico posto, no?

La maggior parte dei moderni file system Unix può mettere molti file in una directory, ma operazioni come seguire percorsi, elencare file, ecc. Implicano una ricerca lineare attraverso l'elenco dei file e rallentare se l'elenco diventa troppo grande.

Mi sembra di ricordare di aver sentito che un paio di migliaia sono troppe per la maggior parte degli usi pratici. La soluzione tipica è quella di interrompere il raggruppamento. Questo è,

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

e archiviare i file nella sottodirectory appropriata secondo un loro hash basename. Scegli un hash conveniente, il primo personaggio potrebbe fare per casi semplici.


Cristian Ciupitu scrive nei commenti che XFS , e forse altri nuovissimi filesystem, usano log(N)strutture ricercabili per contenere i contenuti delle directory, quindi questo vincolo è notevolmente migliorato .


5
Alcuni filesystem moderni, ad esempio XFS, non prevedono una ricerca lineare. La tecnologia B-Tree di XFS consente di andare direttamente ai blocchi e / o alle estensioni contenenti la posizione di un file utilizzando indici sofisticati (da uoks.uj.edu.pl/resources/flugor/IRIX/xfs-whitepaper.html ).
Cristian Ciupitu,

Ah! Non lo sapevo. Grazie. Aggiungerà al testo.
Dmckee,

1
Per ext3, devi attivare la funzione "dir_index", cfr. tune2fs (8).

0

ext3uno dei formati di filesystem linux più comuni diventa davvero lento se si hanno circa 20k + file in una directory. Indipendentemente da quanti ne può contenere, dovresti cercare di evitare di avere tanti file in una directory.


0

Dal commento che hai lasciato, penso che non ti interessi davvero di quanti file / cartelle può ospitare il tuo FS.

Probabilmente dovresti considerare l'uso di ModRewrite e riscrivere site.com/username su site.com/?user= o qualcosa del genere e archiviare tutti i tuoi dati in un database. La creazione di una cartella per utente non è generalmente necessaria (e non è una buona idea).

Detto questo, ogni filesystem ha dei limiti e dfpuò dirti quanti inode sono disponibili su ogni partizione del tuo sistema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.