Unix文件夹最多可以容纳多少个文件?


20

Unix文件夹最多可以容纳多少个文件?

我认为它将与文件数相同。


3
一个更好的问题可能是:我应该使用几个?stackoverflow.com/questions/466521/...
约阿希姆·绍尔

1
我希望我的网站网址看起来像site.com/username/,依此类推,但是我认为(如果算幸运的话)可以吸引超过200万用户,也就是超过200万文件夹,因为我没有想要使用带有modrewrite的PHP之类的脚本,我正在查看文件夹中文件夹的其他可能性

1
帮自己一个忙,并使用重写方案创建子目录。
Peter Eisentraut 2010年

Answers:



14

在当前所有的Unix文件系统上,目录可以容纳几乎无限数量的文件。而“无限”则受磁盘空间和inode限制-无论先用尽。

对于较旧的文件系统设计(ext2UFSHFS +),如果目录中有许多文件,则事情往往会变慢。通常情况下,大约10,000个文件开始变得痛苦。使用更新的文件系统(ReiserFSXFSZFSUFS2),您可以在目录中拥有数百万个文件,而不会遇到一般的性能瓶颈。

但是,目录中包含这么多文件的情况没有经过良好的测试,并且有很多工具无法通过该测试。例如,定期的系统维护脚本可能会拒绝。

我很高兴地在UFS2上使用了包含数百万个文件的目录,直到我想删除该目录为止才发现问题,这花了几天的时间。


12

这取决于创建文件系统的索引节点数。执行中

df -i 

将为您提供空闲索引节点的数量。这是一个文件系统以及一个目录可以容纳多少个文件的实际限制。


1
但是,许多文件系统每个目录都有文件限制,而与可用的inode数量无关。

1
是的,但是这个问题针对的是UNIX文件系统,据我所知,所有现代UNIX文件系统都不限制目录中文件的数量。

6

我假设您正在考虑将许多文件存储在一个地方,不是吗?

大多数现代的Unix文件系统都可以在一个目录中放置许多文件,但是遵循路径,列出文件等操作涉及对文件列表的线性搜索,如果列表太大,则会变得很慢。

我似乎回想起听到的话,对于大多数实际用途来说,成千上万的太多了。通常的解决方案是打破分组。那是,

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

并根据它们的哈希将文件存储在适当的子目录中basename。选择一个方便的哈希,第一个字符可能适用于简单情况。


克里斯蒂安·丘皮图(Cristian Ciupitu)在评论中写道,XFS以及其他可能非常新的文件系统都使用log(N)可搜索的结构来保存目录内容,因此可以大大改善此约束。


5
一些现代文件系统(例如XFS)不涉及线性搜索。XFS的B-Tree技术使它能够使用复杂的索引(来自uoks.uj.edu.pl/resources/flugor/IRIX/xfs-whitepaper.html)直接进入包含文件位置的块和/或扩展区。
Cristian Ciupitu 09年

啊! 我不知道 谢谢。将添加到文本中。
dmckee

1
对于ext3,您必须激活“ dir_index”功能,请参见。tune2fs(8)。

0

ext3如果目录中有大约20k +文件,最常见的linux文件系统格式之一就会变得非常缓慢。无论文件可以容纳多少,您都应尽量避免在一个目录中包含这么多文件。


0

从您留下的评论来看,我认为您并不在乎FS可以承载多少文件/文件夹。

您可能应该考虑使用ModRewrite并将site.com/username重写为site.com/?user=或类似的某种形式,并将所有数据存储在数据库中。通常没有必要为每个用户创建一个文件夹(也不是一个好主意)。

也就是说,每个文件系统都有限制,并且df可以告诉您系统的每个分区上有多少个可用的inode。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.