对150台Linux机器上的映像目录进行重复数据删除和索引

我有一个150台Linux服务器的客户端,分布在各种云服务和物理数据中心。 这些基础设施大部分是被收购的项目/团队和预先存在的服务器/安装。

客户端很大程度上是关于image processing的,许多服务器都有大的SAN或本地磁盘arrays,上百万的JPEG / PNG文件。

每个盒子上都有一个configurationpipe理代理,可以看出很多磁盘都是100%的,有些非常空,而且有很多重复的数据。

客户端现在可以访问CDN。 但是现在只是列举一下可能是一项艰巨的任务。

有没有什么工具可以创build所有这些数据的有用索引?

我看到了像GlusterFS这样的工具来pipe理这些分布式文件系统和Hadoop HDFS

我想知道是否可以使用这些系统的索引工具,而无需实际实施底层的卷pipe理工具。

生成潜在的重复数据删除候选索引的起点是什么?

我发现在一堆系统中find重复文件的最简单方法是创build一个文件列表,其中包含每个系统的MD5总和,将它们合并成一个文件,然后使用sort + AWK脚本查找重复项,如下所示:

首先,在每个系统上运行它,根据需要replacepath:

#!/bin/sh find /path/to/files -type f -exec md5sum {} \; |\ while read md5 filename do echo -e "${HOSTNAME}\t${md5}\t${filename}" done >/var/tmp/${HOSTNAME}.filelist 

这将在每个主机上生成一个文件/var/tmp/HOSTNAME.filelist,您将不得不复制到一个中央位置。 一旦你收集了所有这些文件列表,你可以运行以下命令:

 #!/bin/sh export LANG=C cat *.filelist |sort -t$'\t' +1 -2 |\ awk ' BEGIN { FS = "\t" dup_count = 0 old_md5 = "" } { if ($2 == old_md5) { if (dup_count == 0 ) { printf("\n%s\n", old_inline) } printf("%s\n", $0) dup_count++ } else { dup_count = 0 } old_md5 = $2 old_inline = $0 }' 

这应该产生一个输出文件,该文件将块中的文件分组,这些文件的内容在同一主机内或主机之间重复。

噢,作为第一个脚本(在每个主机上运行)的替代scheme,请检查正在使用的备份系统,看看是否可以从备份报告(至less包含md5和文件名)获取类似内容。