以前没有好的答案,但现在可能有。但是,链中有几个链接必须满足...
首先:您需要一个支持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。
嗯,我无法得到这个在Linux 3.4.11的工作。出于某种原因,在s3backer的'file'之上使用'-o loop,discard'的ext4挂载,删除一个大文件不会导致任何'falllocate()'通知被发送到s3backer进程。 – Archie 2013-03-04 19:42:29
是啊!它适用于Linux 3.8。显然,Linux 3.4中的FUSE文件系统不支持'FALLOC_FL_PUNCH_HOLE',但是3.8中的FUSE文件系统不支持。 – Archie 2013-03-04 20:32:31
我发现你需要的Linux版本是3.5或更高版本。 [此网页](https://code.google.com/p/s3backer/wiki/UnsedBlockDeletion)具有血腥的细节。 – Archie 2013-03-08 01:18:20