0

我已经安装了一个 s3backer 分区,以通过 amazon s3 服务将数据保存在云上。作为标准的文件系统行为,删除的文件只是与 fs 断开链接,而底层块保持不变。这会导致亚马逊上的块不会被删除,因此如果被擦除,使用的空间也会被计费。为了防止这种情况,我可以使用 zerofree 实用程序强制在文件系统中未使用的块上写入零。这会导致 s3backer 删除云中未使用的块。

问题是 zerofree 实用程序需要安装一个只读分区,以防止我在使用分区时节省空间。

您知道在 rw 挂载分区上是否还有其他选项可以执行此操作?像文件系统安装选项或其他解决方案?

谢谢

4

1 回答 1

1

以前没有好的答案,但现在可能有。但是,链条中有几个环节必须满足……

首先:您需要一个支持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 TRIMon loopback mounts
  • FUSE 版本 >= 2.9.2 支持fallocate()
  • glibc 版本 >= 2.18 包含定义FALLOC_FL_PUNCH_HOLE常量的标头
  • 更新版本的 s3backer 支持fallocate()

实施和测试后,我将向s3backer 邮件列表发送一些内容。

于 2013-03-04T17:47:06.640 回答