car*_*sdc 17 filesystems large-files
我有一个包含大约 100000 个小文件的目录(每个文件有 1-3 行,每个文件都是一个文本文件)。目录的大小不是很大(< 2GB)。这些数据存在于专业管理的 NFS 服务器中。服务器运行Linux。我认为文件系统是 ext3,但我不确定。另外,我没有对服务器的 root 访问权限。
这些文件是大规模科学实验的输出,我无法控制。但是,我必须分析结果。
此目录中的任何 I/O 操作/处理都非常非常慢。打开一个文件(python 中的 fopen),读取一个打开的文件,关闭一个文件,都非常慢。在 bash 中 ls、du 等不起作用。
问题是:
Linux 中一个目录中的最大文件数是多少,以便可以进行处理、打开、读取等操作?我知道答案取决于很多事情:fs 类型、内核版本、服务器版本、硬件等。如果可能的话,我只想要一个经验法则。
Gil*_*il' 21
正如您猜测的那样,它确实取决于很多事情,主要是文件系统类型和选项,在某种程度上还取决于内核版本。In the ext2/ext3/ext4 series, there was a major improvement when the dir_indexoption appeared (some time after the initial release of ext3): it makes directories be stored as search trees (logarithmic time access) rather than linear lists (linear time access )。这不是您在 NFS 上可以看到的,但是如果您与管理员有一些联系,您可以要求他们运行tune2fs -l /dev/something |grep features(甚至可能说服他们升级?)。只有文件的数量很重要,而不是它们的大小。
即使有dir_index100000 也感觉很大。理想情况下,让创建文件的程序的作者添加一个子目录级别。为了不降低性能,我建议将 ext2 或 ext3 的每个目录限制为大约 1000 个文件,而 ext2 或 ext3dir_index和 20000 与dir_index或 reiserfs。如果您无法控制文件的创建方式,请在执行任何其他操作之前将它们移动到单独的目录中。