Quel est le nombre maximum de fichiers qu'un dossier Unix peut contenir?

20

Quel est le nombre maximum de fichiers qu'un dossier Unix peut contenir?

Je pense que ce sera le même que le nombre de fichiers.

Peter Mortensen
la source
3
Une bien meilleure question pourrait être: combien dois-je utiliser? stackoverflow.com/questions/466521/…
Joachim Sauer
1
J'aimerais que l'URL de mon site ressemble à site.com/username/ et ainsi de suite, mais en pensant que (si je suis chanceux) obtenir plus de 2 millions d'utilisateurs, ce serait plus de 2 millions de dossiers, car je ne le fais pas je veux utiliser un script tel que PHP avec un modrewrite je regardais les autres possibilités de dossiers dans un dossier
1
Faites-vous plaisir et créez des sous-répertoires avec un schéma de réécriture.
Peter Eisentraut

Réponses:

14

Sur tous les systèmes de fichiers Unix actuels, un répertoire peut contenir un nombre pratiquement illimité de fichiers. Alors que "illimité" est limité par l'espace disque et les inodes - tout ce qui arrive en premier.

Avec les conceptions de systèmes de fichiers plus anciennes ( ext2 , UFS , HFS + ), les choses ont tendance à ralentir si vous avez plusieurs fichiers dans un répertoire. Habituellement, les choses commencent à devenir douloureuses autour de 10 000 fichiers. Avec les nouveaux systèmes de fichiers ( ReiserFS , XFS , ZFS , UFS2 ), vous pouvez avoir des millions de fichiers dans un répertoire sans voir les goulots d'étranglement des performances générales.

Mais avoir autant de fichiers dans un répertoire n'est pas bien testé et il y a beaucoup d'outils qui échouent. Par exemple, des scripts de maintenance du système périodiques peuvent y éclater.

J'ai heureusement utilisé un répertoire avec plusieurs millions de fichiers sur UFS2 et n'avais vu aucun problème jusqu'à ce que je veuille supprimer le répertoire - cela a pris plusieurs JOURS.

max
la source
12

Cela dépend du nombre d' inodes avec lesquels le système de fichiers a été créé. Exécution

df -i 

vous donnera le nombre d'inodes libres. Il s'agit de la limite pratique du nombre de fichiers qu'un système de fichiers et donc un répertoire peuvent contenir.

Peter Mortensen
la source
1
Cependant, de nombreux systèmes de fichiers ont une limite de fichiers par répertoire, quel que soit le nombre d'inodes libres.
1
oui, mais la question visait les systèmes de fichiers UNIX et, à ma connaissance, tous les systèmes de fichiers UNIX modernes ne limitent pas le nombre de fichiers dans un répertoire.
6

Je suppose que vous envisagez de stocker beaucoup de fichiers au même endroit, non?

La plupart des systèmes de fichiers Unix modernes peuvent placer un grand nombre de fichiers dans un seul répertoire, mais les opérations telles que suivre les chemins, lister les fichiers, etc. impliquent une recherche linéaire dans la liste des fichiers et ralentissent si la liste devient trop grande.

Je me souviens avoir entendu dire que quelques milliers, c'est trop pour la plupart des utilisations pratiques. La solution typique consiste à rompre le regroupement. C'est,

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

et stockez vos fichiers dans le sous-répertoire approprié en fonction de leur hachage basename. Choisissez un hachage pratique, le premier caractère peut faire l'affaire simple.


Cristian Ciupitu écrit dans les commentaires que XFS , et éventuellement d'autres systèmes de fichiers très nouveaux, utilisent log(N)des structures consultables pour contenir le contenu des répertoires, donc cette contrainte est grandement améliorée .

dmckee
la source
5
Certains systèmes de fichiers modernes, par exemple XFS, n'impliquent pas de recherche linéaire. La technologie B-Tree de XFS lui permet d'accéder directement aux blocs et / ou aux extensions contenant l'emplacement d'un fichier à l'aide d'index sophistiqués (à partir de uoks.uj.edu.pl/resources/flugor/IRIX/xfs-whitepaper.html ).
Cristian Ciupitu
Ah! Je ne le savais pas. Merci. Ajoutera au texte.
dmckee le
1
Pour ext3, vous devez activer la fonction "dir_index", cf. tune2fs (8).
0

ext3l'un des formats de système de fichiers linux les plus courants devient vraiment lent si vous avez environ 20k + fichier dans un répertoire. Quel que soit le nombre qu'il peut contenir, vous devez éviter d'avoir autant de fichiers dans un même répertoire.

Rory
la source
0

D'après le commentaire que vous avez laissé, je pense que vous ne vous souciez pas vraiment du nombre de fichiers / dossiers que votre FS peut héberger.

Vous devriez probablement envisager d'utiliser ModRewrite et de réécrire site.com/username sur site.com/?user= ou quelque chose du genre et stocker toutes vos données dans une base de données. La création d'un dossier par utilisateur n'est généralement pas nécessaire (et ce n'est pas une bonne idée).

Cela dit, chaque système de fichiers a des limites et dfpeut vous dire combien d'inodes sont disponibles sur chaque partition de votre système.

ℝaphink
la source