以前没有好的答案,但现在可能有。但是,链条中有几个环节必须满足……
首先:您需要一个支持TRIM
块设备命令的 Linux 内核(在 2.6.28 中添加)和一个支持它的文件系统(Linux 3.7 或更高版本中的 XFS、ext4、btrfs)。该命令最初旨在通知 SSD 设备它们可以回收的块,该命令告诉块设备使用它的文件系统不再需要一个块。一些(但不是全部)文件系统,当一个文件被删除时,会通过TRIM
.
链中的下一个链接是这个内核补丁,在环回挂载的情况下,它使用环回文件上的选项将TRIM
块设备命令转换为一个。显然,这在 3.2 版中进入了 Linux。fallocate()
FALLOC_FL_PUNCH_HOLE
链中的下一个环节是支持将fallocate()
系统调用传递给 FUSE 中的用户代码,这是在 FUSE 版本 2.9.2 中添加的。
链中的最后一个环节是对fallocate()
s3backer 中的 FUSE 的支持。我已经开始看这个了,但它还没有完成。
因此,总结所有要求(按分层顺序):
- 支持“上层”文件系统
TRIM
(例如,ext4 或 Linux >= 3.7 中的 btrfs)
- Linux kernel >= 3.2
TRIM
on loopback mounts
- FUSE 版本 >= 2.9.2 支持
fallocate()
- glibc 版本 >= 2.18 包含定义
FALLOC_FL_PUNCH_HOLE
常量的标头
- 更新版本的 s3backer 支持
fallocate()
实施和测试后,我将向s3backer 邮件列表发送一些内容。