1

我有一个文件树,其中包含我生成的一堆数据。我已经决定在数据生成的几个阶段,我想在使用的程序中尝试一些不同的配置选项。

我的解决方案是复制数据树,并将符号链接到所有原始数据(乘以我正在运行的新测试的数量)。然后我会让程序根据需要破坏符号链接。结果将是未受我的新配置影响的数据的原始树的符号链接,以及任何新配置的真实数据。

问题是-clobber我使用的大多数程序的选项都遵循符号链接,所以它实际上破坏了我的原始数据。有什么我可以尝试的(可能是 bash 环境设置之类的?)可能会使所有这些程序破坏实际的符号链接,而不是它指向的数据?

4

2 回答 2

0

程序是否在编写之前检查新输出是否与旧输出相同?如果不是,那么符号链接似乎不会提供任何优势,因为数据存储在运行分析过程中始终是唯一的。

你能改变程序编写输出的方式吗?以下序列将避免遵循符号链接:

  1. 将新输出写入out.tmp
  2. 如果旧输出outout.tmp相同,则删除out.tmp
  3. 否则,移动out.tmp到顶部 out

数据有多大?它是否足够大以至于值得努力优化存储需求?您始终可以保存完整的输出,并在事后运行一些分析(在最简单的情况下,diff)以查看数据是否相同。

如果它是许多 GB 的数据,您可能需要查看一个文件系统,该文件系统将为您优化重复数据(该功能称为“重复数据删除”)。或者,您可以使用LVM 的快照支持,它允许廉价的文件系统写入时复制快照。

作为穷人的去重文件系统,你可以在 bash 中做这样的事情:

for file in $output_files; do
    md5=`md5sum $file | awk '{print $1}'`
    if [ ! -f "db/$md5" ]; then
        mv $file db/$md5
    fi
    ln -sf db/$md5 $file
done
于 2011-04-13T18:40:13.763 回答
0

这可能是不可能的 - 该选项可能通过简单地以“截断”模式打开文件来工作 - 要替换​​符号链接,它实际上必须事先使用单独的函数删除文件 [符号链接]。您可以尝试将chmod -w原始数据文件的权限 ( ) 设置为不允许写入,但这可能只会阻止它工作

于 2011-04-13T15:52:46.373 回答