2013-03-03 63 views
0

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

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

你知道在rw挂载分区上是否有其他的选择吗?像文件系统安装选项或其他解决方案?

谢谢

回答

0

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

首先:您需要一个支持TRIM块设备命令(在2.6.28中添加)的Linux内核以及支持它的文件系统(XFS,ext4 ,Linux 3.7或更高版本中的btrfs)。该命令最初旨在通知SSD设备可以回收的块,该命令告诉块设备文件系统不再需要使用该块。一些(但不是全部)文件系统在删除文件时会通过TRIM通知块设备。

在链中的下一个链路是this kernel patch,其在环回安装的情况下,使用关于环回文件FALLOC_FL_PUNCH_HOLE选项TRIM块装置命令转换成fallocate()。显然这在3.2版本中进入了Linux。

在链中的下一个链路是用于使在熔断器fallocate()系统调用用户代码,这是在FUSE版本2.9.2增加支撑。

链中的最后一个链接是对s3backer中FUSE的fallocate()的支持。我已经开始关注这个,但它还没有完成。

所以汇总所有的要求(在分层顺序):

  • “上” 文件系统支持TRIM(例如,EXT4,或BTRFS在Linux中> = 3.7)
  • Linux内核> =上回送挂载3.2 TRIM
  • FUSE版本> = 2.9.2支撑fallocate()
  • glibc的版本> = 2.18包含定义FALLOC_FL_PUNCH_HOLE恒定
  • 更新s3backer支持fallocate()

的版本时,这已经实施和测试,我会送东西给s3backer mailing list

+0

嗯,我无法得到这个在Linux 3.4.11的工作。出于某种原因,在s3backer的'file'之上使用'-o loop,discard'的ext4挂载,删除一个大文件不会导致任何'falllocate()'通知被发送到s3backer进程。 – Archie 2013-03-04 19:42:29

+0

是啊!它适用于Linux 3.8。显然,Linux 3.4中的FUSE文件系统不支持'FALLOC_FL_PUNCH_HOLE',但是3.8中的FUSE文件系统不支持。 – Archie 2013-03-04 20:32:31

+0

我发现你需要的Linux版本是3.5或更高版本。 [此网页](https://code.google.com/p/s3backer/wiki/UnsedBlockDeletion)具有血腥的细节。 – Archie 2013-03-08 01:18:20