每个目录的文件数


19

我有一个包含约100000个小文件的目录(每个文件是1-3行,每个文件是一个文本文件)。目录的大小不是很大(<2GB)。该数据位于专业管理的NFS服务器中。该服务器运行Linux。我认为文件系统是ext3,但我不确定。另外,我没有对该服务器的root访问权限。

这些文件是我无法控制的大规模科学实验的输出。但是,我必须分析结果。

此目录中的任何I / O操作/处理都非常非常慢。打开文件(在python中为fopen),读取打开的文件,关闭文件都非常缓慢。在bash ls,du等中不起作用。

问题是:

Linux中某个目录中可以进行处理,打开,读取等操作的最大文件数量是多少?我知道答案取决于许多因素:fs类型,内核版本,服务器版本,硬件等。如果可能的话,我只是想凭经验而定。


6
Giles很好地回答了您的直接问题,但是总而言之,当您使用文件名作为数据的一小部分密钥时,Linux文件系统不能很好地替代数据库。您不控制生成,但可以将数据后处理为更适合分析的形式;如果您不这样做,则将在每个步骤中支付文件系统的开销。您可以减少开销,但是如果消除了开销,则可能会最高兴。
msw

Answers:


22

如您所料,它确实取决于许多因素,主要取决于文件系统类型和选项,并且在某种程度上取决于内核版本。在ext2 / ext3 / ext4系列中,该dir_index选项出现时(在ext3的初始版本发布后的某个时间)有了一个重大改进:它使目录存储为搜索树(对数时间访问)而不是线性列表(线性时间访问) )。这不是您可以通过NFS看到的东西,但是如果您与管理员有联系,则可以要求他们运行tune2fs -l /dev/something |grep features(也许甚至说服他们进行升级?)。仅文件数量很重要,与文件大小无关。

即使使用dir_index,也有100000个感觉。理想情况下,请创建文件的程序作者来添加子目录级别。为了不降低性能,对于不带ext2或ext3的目录,我建议每个目录限制大约1000个文件,而dir_indexdir_index或reiserfs的目录建议限制为20000 个文件。如果您无法控制文件的创建方式,请先将其移动到单独的目录中,然后再执行其他操作。

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.