我有一个拥有150台
Linux服务器的客户端,涉及各种云服务和物理数据中心.这些基础设施大部分是获得的项目/团队和预先存在的服务器/安装.
客户端主要是图像处理,许多服务器都有大型SAN或本地磁盘阵列,其中包含数百万个jpeg / png文件.
每个盒子上都有一个配置管理代理,我可以看到很多磁盘都是100%,有些是非常空的,并且有很多重复的数据.
客户现在可以访问CDN.但目前只列举可能是一项艰巨的任务.
是否有任何工具可以创建所有这些数据的有用索引?
我看到像GlusterFS这样的工具来管理这些分布式文件系统,以及Hadoop HDFS
我想知道是否可以使用这些系统的索引工具而无需实际实现底层卷管理工具.
解决方法
我发现在一堆系统中找到重复文件的最简单方法是创建一个文件列表,其中包含每个系统的MD5总和,将它们合并为一个文件,然后使用排序AWK脚本查找重复项,如下所示:
首先,在每个系统上运行此命令,并根据需要替换路径:
首先,在每个系统上运行此命令,并根据需要替换路径:
#!/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 }'
这应该产生一个输出文件,该文件在块文件中分组,这些文件的内容在同一主机内或主机上是重复的.
哦,作为第一个脚本(在每个主机上运行)的替代方案,请检查正在使用的备份系统,看看是否可以从备份报告中获得类似内容(至少包括md5和filename).