我有一个应用程序使用大量空间作为本质上的缓存数据。可用缓存越多,应用程序的性能就越好。我们谈论的是数百到数千 TB。如果块损坏,应用程序可以即时重新生成数据,因此我的主要目标是最大化文件系统上可用于缓存数据的大小,并最大限度地减少文件系统开销。
我愿意牺牲所有的可靠性和灵活性以及“通用性”要求。最重要的是,我确切地知道在任何给定卷上将有多少个缓存数据文件,因为应用程序以固定大小写入缓存文件。如果一个块偶尔坏了,我希望能够用新文件覆盖一个文件,所以最好有一个很少周围有备用索引节点,如果需要,也可以重新格式化整个卷。这些文件都存储在文件系统的 1 个目录深处。例如,目录名称可以限制为单个字母,而且我也不需要该目录(所有文件也可以存储在卷的根目录的顶层)。一旦写入缓存数据,文件将只能被读取,并且卷可以只读方式安装。缓存的有效期为长的时间(年)。
因此,鉴于我知道确切的固定文件大小,并且没有可靠性、校验和、日志记录等问题,我应该使用什么文件系统以及应该如何调整它以消除尽可能多的开销?
答案1
较旧的文件系统使用指针页中的指针来引用每个簇。然后,使用 32 位指针,每 4 kB 几乎“浪费”4 个字节:0.1%。很多人都买得起。
较新的文件系统使用扩展区,那么如果您分配具有连续块的文件,您将拥有单个扩展区(来自n到米)。那么你几乎没有任何开销。众所周知,Ext4、Reiserfs、XFS 都是基于范围的。但对于 100,000 TB 来说,ext4 就太有限了。 XFS 限制为 8 EB。然而,拥有一个超大的 RAID0 似乎不是一个好主意……也许您应该让您的应用程序处理多个文件系统。