我已经安装了一个s3backer分区,通过amazon s3服务在云端保存数据。 作为标准文件系统行为,删除的文件只是与fs断开连接,使底层块保持不变。 这导致没有删除亚马逊上的块,因此如果被删除,所使用的空间也被计费。 为了防止这种情况,我可以使用zerofree实用程序强制在文件系统中的未使用块上写入零。这会导致s3backer删除云中未使用的块。
问题是zerofree实用程序需要安装只读分区,以防止在使用分区时节省空间。
您是否知道在rw挂载分区上是否还有其他选项可以执行此操作?像文件系统安装选项或其他解决方案?
谢谢
答案 0 :(得分:0)
以前没有好的答案,但现在可能有。但是,链中有几个必须满足的链接......
首先:您需要一个支持TRIM
块设备命令(在2.6.28中添加)的Linux内核以及支持它的文件系统(Linux 3.7或更高版本中的XFS,ext4,btrfs)。最初旨在向SSD设备通知它们可以回收的块,该命令告诉块设备使用它的文件系统不再需要块。删除文件时,某些(但不是全部)文件系统将通过TRIM
通知块设备。
链中的下一个链接是this kernel patch,在环回安装的情况下,使用TRIM
选项将fallocate()
块设备命令转换为FALLOC_FL_PUNCH_HOLE
在循环文件上。显然,这是3.2版本的Linux。
链中的下一个链接是支持将fallocate()
系统调用传递给FUSE中的用户代码,该代码已在FUSE版本2.9.2中添加。
链中的最后一个链接是对s3backer中FUSE的fallocate()
的支持。我已经开始关注这个问题,但还没有完成。
总结所有要求(按分层顺序):
TRIM
的“上层”文件系统(例如,Linux中的ext4或btrfs> = 3.7)TRIM
on loopback mounts fallocate()
FALLOC_FL_PUNCH_HOLE
常量fallocate()
在实施和测试后,我会向s3backer mailing list发送内容。