我有一个大约有100000个小文件的目录(每个文件有1-3行,每个文件是一个文本文件)。该目录的大小不是很大(< 2GB)。该数据位于专业管理的 NFS 服务器中。服务器运行Linux。我认为文件系统是 ext3,但我不确定。另外,我没有服务器的根访问权限。
这些文件是大规模科学实验的输出,我无法控制。但是,我必须分析结果。
该目录中的任何 I/O 操作/处理都非常非常慢。打开文件(Python 中的 fopen)、读取打开的文件、关闭文件都非常慢。在 bash 中 ls、du 等不起作用。
问题是:
Linux 中一个目录中的最大文件数是多少,这样才可以进行处理、fopen、读取等操作?我知道答案取决于很多因素:文件系统类型、内核版本、服务器版本、硬件等。如果可能的话,我只想要一个经验法则。
答案1
正如您所猜测的,它确实取决于很多因素,主要是文件系统类型和选项,在某种程度上还取决于内核版本。在 ext2/ext3/ext4 系列中,当该dir_index
选项出现时(ext3 最初发布后的一段时间)有一个重大改进:它使目录存储为搜索树(对数时间访问)而不是线性列表(线性时间访问) )。这不是您可以通过 NFS 看到的内容,但如果您与管理员有一些联系,您可以要求他们运行tune2fs -l /dev/something |grep features
(甚至可能说服他们升级?)。只有文件的数量很重要,而不是文件的大小。
即使有dir_index
,100000 也感觉很大。理想情况下,让创建文件的程序的作者添加一级子目录。为了不降低性能,我建议不使用 reiserfs 的 ext2 或 ext3 每个目录限制大约 1000 个文件,使用reiserfs时限制dir_index
为 20000 个文件。dir_index
如果您无法控制文件的创建方式,请在执行其他操作之前将它们移动到单独的目录中。