![数百万个小文件的块大小](https://linux22.com/image/624288/%E6%95%B0%E7%99%BE%E4%B8%87%E4%B8%AA%E5%B0%8F%E6%96%87%E4%BB%B6%E7%9A%84%E5%9D%97%E5%A4%A7%E5%B0%8F.png)
我在 Debian Wheezy 上的硬件 RAID1(可能是 LSI MegaRaid)中有 2 个 4TB 磁盘。物理块大小为 4kB。我要存储 1.5 亿到 2 亿个小文件(3 到 10kB 之间)。我并不是要求性能,而是要求最佳文件系统和块大小以节省存储空间。我已将一个 8200 字节的文件复制到块大小为 4kB 的 ext4 上。这占用了 32kB 的磁盘空间!?日志记录是造成这种情况的原因吗?那么,有哪些选项可以为如此小的文件节省大部分存储空间?
答案1
如果我处于这种情况,我会寻找一个数据库,它可以将所有数据存储在一个带有紧凑的基于偏移量的索引的文件中,而不是作为单独的文件。也许一个数据库有一个 FUSE 驱动程序,可以在必要时将其作为文件进行交互,而实际上它们并不是单独的文件。
或者,您可以查看文件大小的第 60-70 个百分点,并尝试将该文件大小直接放入文件系统树节点中,而不是作为磁盘上的单独块。在每个节点中存储 10k 可能是一个很大的要求,但如果您可以将 60%-70% 的文件放入其中,这可能是一个巨大的胜利。
只有某些文件系统可以做到这一点(reiserfs 就是其中之一),我想这完全取决于百分位数的大小,以及它是否适合树。你也许可以对其进行调整。我想尝试将其余部分放入一个块中。
并且不要担心期刊;无论如何它们都有大小上限。