[英]Maximum number of files/directories on Linux?
我正在开发一个LAMP在线商店,它将允许管理员为每个项目上传多个图像。
我担心的是 - 马上就会有20000件商品,大概有60000张图片。
问题:
Linux上的最大文件和/或目录数是多少?
处理这种情况的常用方法是什么(最佳实践)?
我的想法是根据每个项目的唯一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
),在大型目录中查找并不是什么大问题。 但请注意,许多管理工具(例如ls
或rm
)可能很难处理包含太多文件的目录。 因此,建议将文件拆分,以便在任何给定目录中没有超过几百到一千个项目。 一种简单的方法是散列您正在使用的任何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
...
即,根据您可以根据名称计算的某些功能,在路径前面添加一个字母或数字。 (文件名的md5sum
或sha1sum
的前两个字符是一种常见的方法,但如果你有唯一的对象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的数量。
这一年是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.