禁用 ext4 上的稀疏文件支持

禁用 ext4 上的稀疏文件支持

是否可以完全禁用 ext4 文件系统中的稀疏文件支持?

目的是避免磁盘碎片。

如果解决方案允许文件系统快速分配文件,而不用零(或其他)填充文件,则奖励“无分”。

我想要的是能够告诉应用程序创建 X 字节的文件,并且无论它们使用什么方法预分配文件,都会在磁盘上创建 X 字节的文件。我没有使用 X 字节的“表观大小”,也无法控制这些应用程序的源代码。

为了节省您的时间,让我已经解决了一些评论,每当有人提到稀疏文件和快速分配时,这些评论似乎总是出现

  • 我不关心文件系统分配启发式应该有多好。
  • 我知道不将新分配的块归零的安全隐患。

答案1

没有选项可以禁用 ext4 中的稀疏文件支持,但 ext4(以及一般的 Linux 内核)支持的功能允许您实现解决方法,而无需编写新的文件系统驱动程序(或调整 ext4 驱动程序)。

我认为可行的方法是实现一个共享库垫片,您可以使用加载它LD_PRELOAD,并且您将覆盖所有可能导致创建稀疏文件的调用,以它们不这样做的方式处理它们。在文件中分配块的快速方法是使用posix_fallocate,这确保了磁盘空间返回时分配,不必将所有零写入块(但文件系统保证阅读从分配的块将返回零)。你的垫片也必须拦截posix_fallocate,因为它也可以用于创建稀疏文件......

填充程序有一些限制LD_PRELOAD(特别是 setuid 二进制文件),但它们可能不适用于您的情况。

相关内容