是否有一个通用的Linux文件系统校验和工具?

编辑:澄清上下文

我在不同的机器上有几个松散同步的文件系统。 (有些内容是多余的,有些不是,用户手动的东西)。 这些是大型的科学数据集(数十TB)。 它们依赖于我们在其上执行的工作types而跨越群集。 他们没有标准的命名约定(文件有时会被重新命名为各种实验,或当文件的子集被选中或合并)。

我想find一个工具,使我能够有效地find远程文件系统的冗余,以便我们可以删除冗余数据,并复制非冗余的数据,当存储砖倒下。 (注意:像Ceph这样的分布式文件系统承诺处理这些情况,这将是未来的路线,但现在我们必须按原样处理现有的系统)

由于许多对象已被手动移动和重命名,所以我不能依靠它们的文件名来与diff或rsync 进行比较 。 我宁愿使用encryption校验和,如sha256来识别我的数据文件。

每次运行比较时,我都不想校验整个数据集。 这些文件一旦创build,不可能经常改变,所以校验和应该被caching。

有没有现成的工具来做到这一点? 也许是在Posix Extended Attribute中存储校验和的东西(使用时间戳检查校验和的新鲜度),还有一种工具可以提取信息来高效地分析文件系统的内容,而不用关心文件名?

我不知道文件系统级校验和; 您可以使用md5sum编写脚本(或手工编写),并将其存储在文本文件中进行比较,并且有多个平台的md5sum端口。

如果这些文件很大,可以考虑设置一个让用户使用bittorrent复制数据的系统; 它具有校验数据的内置方式,如果您有多个存储文件的地方,您可以通过不传输一个或两个系统来获得额外的好处。

如果您正在pipe理系统或数据,您可能需要考虑更改数据如何被复制或移动的策略; 如果出现问题,这可能会导致你丢失较less的头发,如果发生了什么事情,那么你的用户可能会感谢你,并且“这次”数据没有被Bob在大厅里支持。 如果您在现有的基础架构中工作,则不需要做太精细的工作; 即使是在networking上运行周期性rsync的几台服务器(这也是相对较快的,因为它只在networking上传输时传输大文件的变化,而不是如果它认为它是本地文件)将创build同步文件。

我会提醒的是,复制这样的文件和使用校验和不是技术上的备份; 这是重复的。 备份意味着,当你的主文件损坏时,你可以“回滚”到以前的版本(想要设置类似于CVS来检查你的大型数据文件?),即使有校验和,也意味着如果你的原始文件被破坏(意外删除,驱动器中的坏扇区等),腐败将被复制出来,校验和全部复制到您的副本中,使其无用。 你会想要计划这种情况。

由于我没有find一个我想要的工具,我开始自己动手:

http://bitbucket.org/maugier/shatag

– 编辑 –

在开发了这个工具之后,我学习了一个与我所瞄准的git-annex不同的东西,但是仍然是一个理想的解决scheme。

也许你可以使用rsync选项–dry-run(-n)。 它会尝试复制(但没有做任何事情),你会看到不同之处。 有很多关于过滤(时间戳,所有者和更多)的选项来准确定义你想要的。

有人已经提到“rsync”。

如果你可以在第一台机器上安装第二个文件系统,你可以试试运行“diff -r / localfs / remotefs”并查看其差异。

你也可以尝试像tripwire或AIDE这样的东西来快照一棵树,并与另一棵进行比较。

根据相关数据集的大小,您可能会考虑使用git或其他有效的版本控制程序来定期“快照”(自动,无人值守的添加和提交)来跟踪更改。 如果设置正确,您甚至可以使用此方法将特定更改从一台机器同步到另一台机器。

对于重复数据删除,“fdupes”程序运行良好。