FreeBSD 6 ufs目录中的最大文件总数?

FreeBSD 6中存储在一个子目录中的文件总数是否有上限?

文件系统是ufs

这在2008年11月的freebsd-questions列表中已经讨论过了。引用Erik Trulsson的话 :

磁盘上的每个i-node都包含一个字段,告诉有多less硬链接指向这个inode。 该字段是一个(带符号的)16位值,表示所允许的最大硬链接数为32767.每个创build的子目录包含一个到其父目录的硬链接('..'),因此将一个目录的子目录数量限制为较less比32767。

请注意,这不会限制单个目录中的文件数量,因为普通文件不包含到父目录的硬链接,但是当然可以限制单个文件和目录的总数文件系统是基于当文件系统第一次创build时创build了多less个inode。

( 完整的消息 , 线程的开始 )

这些是理论上的限制; 如上所述,在达到任何限制之前,您将开始遇到性能问题。

我做了一些与freebsd 6.x有关的事情,涉及大量的文件(50,000+),不记得任何具体的限制。 对7.2系统进行快速检查显示限制超过10万。 这个过程仍然在运行,当它失败的时候,我会让你知道7.2的硬限制,这很可能类似于6.x。

这就是说,创build新文件/目录时,您会看到大约30,000个目录条目的巨大性能。 此时,人们开始创build名为HashOfName / name的文件,而不仅仅是名称,以便查找更容易。

我希望这个数字也会根据所涉及的文件系统的types而有所不同。

你的问题已经被回答了,所以只有一点点的性能提示:如果你有很多的小文件,你应该增加vfs.ufs.dirhash_maxmem,对于数千个文件,默认的2MB是太小了。

我在/etc/sysctl.conf中有这样的行

vfs.ufs.dirhash_maxmem=67108864 

你可以在这里阅读有关dirhash( UFS改进@ BSDCON )和这里( Wiki )

总的inode是可以放在目录中的文件总数的限制。 当您格式化您的硬盘驱动器时创build总索引节点。 你可以通过使用小尺寸的段来创build更多的inode。 详见man newfs。

vfs.ufs.dirhash_maxmem是用于保存目录中的目录名称的内存。 这只影响性能,没有什么限制。 如果你有更多的记忆,把它做大,否则不要打扰它。