为了运行一些testing,我需要运行一个将删除文件的应用程序
由于每次我需要运行另一个testing时重新创build这个文件(> 40 GB)是很昂贵的,所以我想模拟删除这个文件。
但是,对于删除应用程序,这必须是完全透明的。 这意味着创build一个符号链接不是一个好的解决scheme([-L符号链接]返回0,而[-L文件]返回1,所以这不会完全透明的应用程序)。
有几个解决scheme。 dd
喜欢解决scheme可能需要一些时间,但使用寻求
dd of=mybigfile bs=1 count=0 seek=40G
是即时的。 然而命令采取的40g空间不是在df
看到的…
所以最好的可能是
fallocate -l 40g mybigfile
立即创buildmybigfile ,并且空间实际上是从FS保留的(在df
可以看到)
– 评论后编辑 –
怎么样一个硬链接
cd data make 40g file "myfile"
然后进行每个testing
cd ../test ln ../data/myfile testfile command to unlink testfile
数据和testing目标在相同的FS(不同的目标,以防止错误等)。
硬链接状态非常透明,不太可能被应用程序testing。 取消链接操作将删除与inode相关联的名称,然后递减inode中的链接计数器,并且应该非常快(只有当inode计数器下降到零时文件和数据才会真正释放 – 这不会发生除非你解除链接data/myfile
)。
使用支持快照的文件系统。 想起ZFS和btrfs。 只需对现有文件进行快照,然后在每次testing之后恢复该快照。
这两个文件系统都以快速恢复的方式进行快照。
对于这样的事情,我更喜欢使用LD_PRELOAD
技巧。 写一个小的C库,嘲笑unlink
(也许stat64
如果testing也检查文件的存在),并预加载它。 testing一个不太重要的文件:)
简单:创build一个硬链接到要删除的文件,如ln original /some/where/safe
。 继续,吹走文件,它不会消失(只是链接,你可以重新创build任何时间)。