是否可以完全禁用 ext4 文件系统中的稀疏文件支持?
目的是避免磁盘碎片。
如果解决方案允许文件系统快速分配文件,而不用零(或其他)填充文件,则奖励“无分”。
我想要的是能够告诉应用程序创建 X 字节的文件,并且无论它们使用什么方法预分配文件,都会在磁盘上创建 X 字节的文件。我没有使用 X 字节的“表观大小”,也无法控制这些应用程序的源代码。
为了节省您的时间,让我已经解决了一些评论,每当有人提到稀疏文件和快速分配时,这些评论似乎总是出现
- 我不关心文件系统分配启发式应该有多好。
- 我知道不将新分配的块归零的安全隐患。
答案1
没有选项可以禁用 ext4 中的稀疏文件支持,但 ext4(以及一般的 Linux 内核)支持的功能允许您实现解决方法,而无需编写新的文件系统驱动程序(或调整 ext4 驱动程序)。
我认为可行的方法是实现一个共享库垫片,您可以使用加载它LD_PRELOAD
,并且您将覆盖所有可能导致创建稀疏文件的调用,以它们不这样做的方式处理它们。在文件中分配块的快速方法是使用posix_fallocate
,这确保了磁盘空间是返回时分配,不必将所有零写入块(但文件系统保证阅读从分配的块将返回零)。你的垫片也必须拦截posix_fallocate
,因为它也可以用于创建稀疏文件......
填充程序有一些限制LD_PRELOAD
(特别是 setuid 二进制文件),但它们可能不适用于您的情况。