在 Linux 中比较两个非常大的目录的最佳方法

在 Linux 中比较两个非常大的目录的最佳方法

我需要比较两台独立服务器上 Linux 文件系统上的两个目录,以确定 SERVER1 中的所有文件是否存在于 SERVER2 中。总数据集总共约有 4TB 的文件。

数据已使用 rsync 复制完成,但我不能冒险丢失任何内容,因为一旦迁移完成,源数据将被清除。

我尝试了多种方法来比较数据(递归目录列表的差异、空运行模式下的 rsync),但找不到任何能给我可管理的输出或不会花很长时间运行的东西。

我有兴趣听听不同的方法,因为到目前为止我还没有一个让我满意的方法。

答案1

您可以在两个服务器上运行以下命令:

find /starting/path -type f -exec sha1sum {} \; >>/tmp/sums

然后比较/tmp/sums来自服务器的文件。此命令将计算文件的哈希值,您可以确定(非常有可能)它们是相同的。您也可以使用sha256sha512以降低冲突的概率(两个不同的文件具有相同的哈希值)

答案2

nohup rsync -cr [--delete] --dry-run source/ target/ > output_file 2>&1 &

rsync > v3 将使用 md5,碰撞概率为 4.3 x 10^60。正如指出的那样,您必须花时间解决它,但这将为您完成工作。

如果没有 --dry-run,它将自动复制不同大小的文件,但如果大小相同,则对它们进行校验,如果不同则复制。不进行其他检查。如果源上不存在文件,则删除选项将从目标中删除文件。错误将转到 output_file。

如果有疑问,请先在两个较小的目录之间运行测试。

相关内容