![ext3 中一个目录下可以直接存放多少个文件?](https://linux22.com/image/558953/ext3%20%E4%B8%AD%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95%E4%B8%8B%E5%8F%AF%E4%BB%A5%E7%9B%B4%E6%8E%A5%E5%AD%98%E6%94%BE%E5%A4%9A%E5%B0%91%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有一个根目录“data_0”。此目录下有大约 15,000 个目录(“a”、“b”、“c”……“aa”、“ab”……)。每个目录下都有数千个非常小的文件(4~10kB),每个文件大约有 1,000 到 2,000 个文件。
所有这些会产生 3000 万个文件。我需要将这些文件从“data_0”移动到“data_1”文件夹,但不包含“2 级”文件夹(a、b、c 等),因此:
/data_0/a/1.txt --> /data_1/a_1.txt
/data_0/a/2.txt --> /data_1/a_2.txt
...
/data_0/ccc/989.txt --> /data_1/ccc_989.txt
...
我可以走多远?性能在这里并不重要。是否存在逻辑限制或仅仅是性能限制?
答案1
如果要信任互联网上的陌生人,那么 ext3 文件夹可以包含的文件数量是没有限制的。ext3-users RedHat 邮件列表上是这么说的2.6 内核理论上允许一个目录中有“数十亿”个文件。你可能需要dir_index
稍微调整一下让它顺利运行,如果你要搜索文件的话。在一个目录中有大量文件还会产生一些其他副作用,你可能想阅读一下此 StackOverflow 线程。
因此答案很可能是:“是的,但是……”
答案2
单个目录中的文件数量没有逻辑限制,但随着单个目录中文件数量的增加,性能会受到很大限制(我的经验法则是将其保持在 1000 以下,尽管在某些情况下我曾做过 10000 个)。文件系统上的文件总数是有限制的,由文件系统创建参数(inode 总数)决定。每个目录的子目录数量也有硬编码限制,为 32000 个(其中两个条目始终由.
和占用..
)。