繁体   English   中英

Linux上的最大文件/目录数?

[英]Maximum number of files/directories on Linux?

我正在开发一个LAMP在线商店,它将允许管理员为每个项目上传多个图像。

我担心的是 - 马上就会有20000件商品,大概有60000张图片。

问题:

  1. Linux上的最大文件和/或目录数是多少?

  2. 处理这种情况的常用方法是什么(最佳实践)?

我的想法是根据每个项目的唯一ID为每个项目创建一个目录,但是在主上传目录中我仍然有20000个目录,并且它将无限增长,因为旧项目不会被删除。

谢谢你的帮助。

ext [234]文件系统具有固定的最大inode数; 每个文件或目录都需要一个inode。 您可以使用df -i查看当前计数和限制。 例如,在使用默认设置创建的15GB ext3文件系统上:

Filesystem           Inodes  IUsed   IFree IUse% Mounted on
/dev/xvda           1933312 134815 1798497    7% /

除此之外,对目录没有限制; 请记住,每个文件或目录至少需要一个文件系统块(通常为4KB),即使它是一个只有一个项目的目录。

但是,正如您所看到的,80,000个inode不太可能成为问题。 使用dir_index选项(可以使用tune2fs ),在大型目录中查找并不是什么大问题。 但请注意,许多管理工具(例如lsrm )可能很难处理包含太多文件的目录。 因此,建议将文件拆分,以便在任何给定目录中没有超过几百到一千个项目。 一种简单的方法是散列您正在使用的任何ID,并使用前几个十六进制数字作为中间目录。

例如,假设您有项目ID 12345,它哈希到'DEADBEEF02842.......' 您可以将文件/storage/root/d/e/12345/storage/root/d/e/12345 您现在已将每个目录中的文件数减少了1/256。

如果服务器的文件系统已打开dir_index功能(有关检查和打开该功能的详细信息,请参阅tune2fs(8) ),那么在性能下降之前,您可以合理地将超过100,000个文件存储在目录中。 dir_index一直是大多数发行版的新文件系统的默认设置,所以它只是一个默认情况下没有打开该功能的文件系统。)

也就是说,添加另一个目录级别可以将目录中的文件数量减少16或256倍,这将大大提高ls *工作的可能性,而不会超出内核的最大argv大小。

通常,这可以通过以下方式完成:

/a/a1111
/a/a1112
...
/b/b1111
...
/c/c6565
...

即,根据您可以根据名称计算的某些功能,在路径前面添加一个字母或数字。 (文件名的md5sumsha1sum的前两个字符是一种常见的方法,但如果你有唯一的对象id,那么'a'+ id % 16是足够简单的机制来确定使用哪个目录。)

60000也没什么,20000也是。 但是你应该以任何方式将这些20000分组,以加快对它们的访问。 也许在100或1000的组中,通过获取目录的数量并将其除以100,500,1000等等。

例如,我有一个文件有数字的项目。 我把它们分成1000个,所以我有

id/1/1332
id/3/3256
id/12/12334
id/350/350934

实际上你可能有一个硬限制 - 一些系统有32位inode,所以你被限制为每个文件系统2 ^ 32的数量。

除了一般的答案(基本上“不要打扰那么多”,“调整你的文件系统”,“和用每个包含几千个文件的子目录组织你的目录”):

如果单个图像很小(例如小于几千字节),而不是将它们放在文件夹中,您也可以将它们放在数据库中(例如,将MySQL作为BLOB )或者可能放在GDBM索引文件中。 然后每个小项不会消耗inode(在许多文件系统上,每个inode至少需要几千字节)。 您也可以为某个阈值执行此操作(例如,在单个文件中放置大于4千字节的图像,在数据库或GDBM文件中放置较小的图像)。 当然,不要忘记备份数据(并定义备份状态)。

这一年是2014年。我及时回来添加这个答案。 很多大/小文件? 您可以使用基于Ceph的Amazon S3和其他替代方案,如DreamObjects,其中没有目录限制需要担心。

我希望这有助于某人从所有选择中做出决定。

md5($id) ==> 0123456789ABCDEF

$file_path = items/012/345/678/9AB/CDE/F.jpg 

1 node = 4096 subnodes (fast)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM