CentOS 5.x
Mq的问题似乎与这一个类似,但我不知道…
我有两个服务器(完全隔离),每个都有一个目录和子目录应该有相同的确切内容。
例如,目录布局可能是这样的:
服务器A –
/opt/foo/foob/1092380298309128301283/123.txt /opt/foo/foob/5094380298309128301283/456.txt /opt/foo/foob/5092380298309128301283/789.txt /opt/foo/foob/1592380298309128301283/abc.txt
服务器B –
/opt/foo/foob/1092380298309128301283/123.txt /opt/foo/foob/5094380298309128301283/456.txt /opt/foo/foob/5092380298309128301283/789.txt /opt/foo/foob/1592380298309128301283/abc.txt
理想情况下,我想要一个方法来做recursion检查,并确认一切都匹配。
我也想避免使用任何第三方工具。
有任何想法吗?
一个好方法是在树中的每个文件上使用md5sums:
在server1上运行这个:
find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum > report_from_server1.tx
在server2上运行这个
find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum > report_from_server2.tx
然后只是比较两个文件(使用差异)或任何你喜欢的。
那就是你要找的东西吗?
当然,如果你愿意,你可以使用SSH远程执行命令。
如果你不一定关心什么改变了,只是改变了一些东西,rsync还是非常好的。 尝试运行这个命令,并在输出端采取一个偏差,假设这是从“servera”运行的。
rsync -avcn /opt/foo/ serverb:/opt/foo
结果列表将是那些如果你真的运行同步过程将被修改的文件。 请记住,即使只更改时间戳,文件也会显示在列表中,但内容保持不变。 由于我们添加了-n标志,因此不会执行任何操作,只会报告。
虽然可以将一个快速脚本一起使用,该脚本将为目录中的单个文件计算各个MD5散列值,但更好的方法是使用名为md5deep的工具,该工具将以recursion方式计算目录中所有文件的散列值,然后输出到一个文件。 然后可以在另一个目录上使用它,将第一个散列文件作为input,并为您提供两个目录之间不同的文件列表。
所以,举个例子,你可以按照这个过程:
计算服务器A上所需目录的散列值:
md5deep -r /opt/foo/ > file_hashes.txt
将文件file_hashes.txt文件复制到服务器B上进行比较。
计算服务器B上所需目录的散列值,但是将服务器A的文件散列值作为input文件,使用-x标志只显示不同的文件:
md5deep -x file_hashes.txt -r /opt/foo/
md5deep工具集构成了大部分发行版的包pipe理系统的一部分,最重要的是它支持多种不同的哈希algorithm,而不仅仅是MD5。 所以如果你对于碰撞有偏见,你可以select一些替代品。 以下工具构成了md5deep的一部分,每个工具都提供了一种替代哈希algorithm:
md5deep - Compute and compare MD5 message digests sha1deep - Compute and compare SHA-1 message digests sha256deep - Compute and compare SHA-256 message digests tigerdeep - Compute and compare Tiger message digests whirlpooldeep - Compute and compare Whirlpool message digests
我使用了类似于@斯科特包的技术这将告诉你双向差异。 所有以“删除”开头的文件都是远程服务器上的文件,而不是本地服务器上的文件。 没有任何文件内容的每个目录都是没有变化的。 列出的每个文件都是远程服务器上不存在的文件,或者是本地版本为“较新”的文件。
rsync -rvnac --delete /local/directory/ user@remote:/remote/directory/