![对于许多小文件来说,什么是最好的文件系统?](https://linux22.com/image/195785/%E5%AF%B9%E4%BA%8E%E8%AE%B8%E5%A4%9A%E5%B0%8F%E6%96%87%E4%BB%B6%E6%9D%A5%E8%AF%B4%EF%BC%8C%E4%BB%80%E4%B9%88%E6%98%AF%E6%9C%80%E5%A5%BD%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%EF%BC%9F.png)
我有一台带有 2TB 驱动器的 Debian 10 服务器,我想在其中存储超过 1.2 亿个小文件。如果我使用 ext4,我就会用完 inode。
我应该使用什么文件系统?
我一直在阅读有关 reiserfs 和 reiser4 的内容,但我不确定它们是否仍然受支持。
是否有一个包含我可以使用的内置 Debian 软件包的文件系统?
主要用例是使用 Apache 向用户提供 256x256 栅格地图图块。我猜速度并不是那么重要,因为限制因素是 ping 时间。尽可能多地使用字节非常重要,但我也有大量的可用磁盘空间。
编辑:文件通常为 1kb 到 3kb。
答案1
您不规定“小”有多小,但如果文件足够小且可压缩,embedded_data
启用该功能的 ZFS 池可以将“小”文件存储在块指针本身中,从而无需分配块(或更多)文件存储空间,并且还消除了读取或写入文件的 I/O 调用,因为文件数据与文件元数据一起写入块指针本身。
另请注意,ZFS 永远不会用完 inode。
embedded_data This feature improves the performance and compression ratio of highly-compressible blocks. Blocks whose contents can compress to 112 bytes or smaller can take advantage of this feature. When this feature is enabled, the contents of highly- compressible blocks are stored in the block "pointer" itself (a misnomer in this case, as it contains the compressed data, rather than a pointer to its location on disk). Thus the space of the block (one sector, typically 512 bytes or 4KB) is saved, and no additional i/o is needed to read and write the data block.
答案2
假设您想要优化磁盘空间的使用(不仅是 inode 计数,也许还包括访问时间):
您可能需要一个文件系统块再分配/尾部合并以便将小数据合并到物理磁盘上的一个分配单元(“簇”)中。
此外,根据您的情况,控制文件系统的簇大小可能是明智的,以节省空间。最佳值可以通过测试来确定。
Linux 的一个稳定候选者是btrfs
.
当然,如果您乐意使用ext4
(并且可能不是空间最优),您可以重新创建您的文件系统(将数据复制到其他地方以首先备份!),并可以选择很多 inode。
从mke2fs(8)
:
-N number-of-inodes
Overrides the default calculation of the number of inodes that
should be reserved for the filesystem (which is based on the number
of blocks and the bytes-per-inode ratio). This allows the user to
specify the number of desired inodes directly.