为了运行一些测试,我需要运行一个将删除文件的应用程序
由于每次我需要运行另一个测试时重新创建这个文件(> 40 GB)对我来说很昂贵,我想模拟这个文件的删除。
但这必须对删除它的应用程序完全透明。这意味着创建符号链接不是一个好的解决方案([ -L symlink ] 返回 0 而 [ -L file ] 返回 1,所以这对应用程序来说不是完全透明的)。
有几种解决方案。dd像解决方案可能需要一些时间,但是使用搜索
dd of=mybigfile bs=1 count=0 seek=40G
Run Code Online (Sandbox Code Playgroud)
是即时的。然而,通过命令采取40G的空间没有看到df...
所以最好的可能是
fallocate -l 40g mybigfile
Run Code Online (Sandbox Code Playgroud)
立即创建mybigfile并且空间实际上是从 FS 中保留的(并在 中看到df)
--评论后编辑--
硬链接怎么样
cd data
make 40g file "myfile"
Run Code Online (Sandbox Code Playgroud)
然后对于每个测试
cd ../test
ln ../data/myfile testfile
command to unlink testfile
Run Code Online (Sandbox Code Playgroud)
数据和测试目录位于同一个 FS(不同的目录以防止错误等)。
硬链接状态非常透明,不太可能由应用程序测试。在取消链接操作将删除与inode相关的名称,然后计数器递减链接在inode中,只有当inode的计数器下降到零应该是非常快的(文件,其数据将被真正释放-这不会发生除非你也取消链接data/myfile)。