Ian Asked: 2009-08-13 12:12:31 +0800 CST2009-08-13 12:12:31 +0800 CST 2009-08-13 12:12:31 +0800 CST FreeBSD 6 ufs 目录中的最大文件总数? 772 FreeBSD 6 的单个子目录中存储的文件总数是否有上限? 文件系统是ufs freebsd 5 个回答 Voted Best Answer Zanchey 2009-08-13T22:53:53+08:002009-08-13T22:53:53+08:00 这在 2008 年 11 月的 freebsd-questions 列表中进行了讨论。引用Erik Trulsson的话: 磁盘上的每个 i 节点都包含一个字段,告诉有多少硬链接指向该 i 节点。该字段是(有符号的)16 位值,意味着允许的最大硬链接数为 32767。创建的每个子目录都包含指向其父目录的硬链接 ('..'),因此将单个目录的子目录数限制为更少超过 32767。 请注意,这并不限制您可以在单个目录中拥有的文件数量,因为普通文件不包含指向父目录的硬链接,但是您可以在单个目录中拥有的文件和目录的总数当然是有限制的文件系统基于首次创建文件系统时创建的 inode 数量。 (完整消息,线程开始) 这些是理论上的限制;如上所述,您将在达到任何限制之前就开始遇到性能问题。 chris 2009-08-13T12:21:17+08:002009-08-13T12:21:17+08:00 我用 freebsd 6.x 做了一些涉及大量文件(50,000+)并且不记得任何具体限制的事情。对 7.2 系统的快速检查显示该限制远远超过 100,000。该进程目前仍在运行,当它失败时,我会告诉你 7.2 的硬限制是什么,这可能类似于 6.x。 也就是说,在创建新文件/目录时,您会看到超过 30,000 个目录条目的巨大性能。那时人们开始创建名为 HashOfName/name 的文件,而不仅仅是名称,这样您就可以更轻松地进行查找。 retracile 2009-08-13T12:30:30+08:002009-08-13T12:30:30+08:00 我希望这个数字也会根据所涉及的文件系统的类型而有所不同。 SaveTheRbtz 2009-08-18T04:35:08+08:002009-08-18T04:35:08+08:00 你的问题已经得到解答,所以只是一点性能提示:如果你有很多小文件,你应该增加 vfs.ufs.dirhash_maxmem,默认 2MB 对于数千个文件来说太小了。 我的 /etc/sysctl.conf 中有这样一行 vfs.ufs.dirhash_maxmem=67108864 您可以在此处(UFS 改进@BSDCON)和此处(Wiki)阅读有关 dirhash 的信息 fulanpeng 2010-01-01T21:54:56+08:002010-01-01T21:54:56+08:00 总 inode 是您可以放入目录中的总文件的限制。格式化硬盘时会创建总 inode。您可以通过使用较小的段来制作更多的 inode。有关详细信息,请参阅 man newfs。 vfs.ufs.dirhash_maxmem 用于在目录中保存目录名称的内存。这只影响性能,没有限制。如果你有更多的内存,让它更大,否则不要打扰它。
这在 2008 年 11 月的 freebsd-questions 列表中进行了讨论。引用Erik Trulsson的话:
(完整消息,线程开始)
这些是理论上的限制;如上所述,您将在达到任何限制之前就开始遇到性能问题。
我用 freebsd 6.x 做了一些涉及大量文件(50,000+)并且不记得任何具体限制的事情。对 7.2 系统的快速检查显示该限制远远超过 100,000。该进程目前仍在运行,当它失败时,我会告诉你 7.2 的硬限制是什么,这可能类似于 6.x。
也就是说,在创建新文件/目录时,您会看到超过 30,000 个目录条目的巨大性能。那时人们开始创建名为 HashOfName/name 的文件,而不仅仅是名称,这样您就可以更轻松地进行查找。
我希望这个数字也会根据所涉及的文件系统的类型而有所不同。
你的问题已经得到解答,所以只是一点性能提示:如果你有很多小文件,你应该增加 vfs.ufs.dirhash_maxmem,默认 2MB 对于数千个文件来说太小了。
我的 /etc/sysctl.conf 中有这样一行
您可以在此处(UFS 改进@BSDCON)和此处(Wiki)阅读有关 dirhash 的信息
总 inode 是您可以放入目录中的总文件的限制。格式化硬盘时会创建总 inode。您可以通过使用较小的段来制作更多的 inode。有关详细信息,请参阅 man newfs。
vfs.ufs.dirhash_maxmem 用于在目录中保存目录名称的内存。这只影响性能,没有限制。如果你有更多的内存,让它更大,否则不要打扰它。