如何嘲笑文件的删除? (Linux)的

为了运行一些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任何时间)。