【发布时间】:2017-02-06 15:04:07
【问题描述】:
在服务器上存储大量(扩展)小文件而不遇到 inode 限制的最佳做法是什么?
对于一个项目,我将大量小文件存储在具有 2TB HD 空间的服务器上,但我的限制是 2560000 个允许的 inode。最近服务器用完了所有的inode,无法写入新文件。我随后将一些文件移动到数据库中,但其他文件(图像和 json 文件保留在驱动器上)。我目前的 inode 使用率为 58%,因此迫切需要解决方案。
单独存储文件的原因是为了限制数据库调用的次数。基本上,脚本将检查文件是否存在,如果存在,则根据需要返回结果。性能方面,这对我的应用程序来说是有意义的,但如上所述,它有局限性。
据我了解,将文件移动到子目录并没有帮助,因为每个 inode 都指向一个文件(或目录文件),所以实际上我只会用掉更多的 inode。
或者,我可以将这些文件捆绑在一起形成一个存档类型的文件,但这需要某种索引。
也许我做错了,所以非常感谢任何反馈。
【问题讨论】:
-
您可以在不同的文件系统中分割您的存储区域。使用卷管理器应该不会太难。
-
或者您使用环回设备将一些顶级文件夹挂载为单独的卷。这还添加了一个“虚拟层”,并允许您将文件夹视为单独的文件系统。
-
并且可以提高某些文件系统类型可用的 inode 数量。不过,我希望必须为此创建一个新的文件系统。
-
非常感谢您的提示,这听起来是个好主意。但是,我对 unix 上的卷管理经验为零——它类似于对 HD 进行分区吗?你知道一个很好的教程来做到这一点吗?由于手忙脚乱,我不想关闭 prod 服务器。
-
对硬盘进行分区是独立于操作系统的事情。这只是一个硬件准备步骤,以便之后能够使用硬件在其上创建文件系统。除了您必须为此启动一个“程序”这一事实(无论“启动一个程序”实际上意味着什么......)之外,即使是 fil 系统创建步骤也不真正依赖于操作系统。只有当涉及到使用文件系统或卷时,它才会特定于操作系统,即所谓的“挂载”到本地文件系统层次结构中”。
标签: unix filesystems inode