如何对40TB的数据进行重复数据删除?

如何对40TB的数据进行重复数据删除?

我继承了一个研究集群,其中包含三个文件系统中约 40TB 的数据。这些数据可以追溯到近 15 年前,而且很可能有大量重复数据,因为研究人员出于不同原因互相复制数据,然后保留这些副本。

我知道 fdupes 和 rmlint 之类的重复数据删除工具。我正在尝试寻找一个可以处理如此庞大的数据集的工具。我不在乎是否需要数周(甚至数月)才能抓取所有数据 - 无论如何我可能会限制它以减轻文件系统的负担。但我需要找到一个工具,它要么以某种方式超级高效地利用 RAM,要么可以将其所需的所有中间数据存储在文件中而不是 RAM 中。我假设如果我将所有这些数据作为一个集合抓取,我的 RAM(64GB)将被耗尽。

我现在正在 900GB 的树上试验 fdupes。目前已完成 25%,RAM 使用量一直在缓慢上升,现在已达到 700MB。

或者,有没有办法指示某个进程使用磁盘映射 RAM,以便提供更多可用内存,并且不占用系统 RAM?

我正在运行 CentOS 6。

答案1

或者,有没有办法指示某个进程使用磁盘映射 RAM,以便提供更多可用内存,并且不占用系统 RAM?

是的,它被称为交换驱动器。您可能已经有一个了。如果您担心内存不足,那么增加它是一个很好的开始。不过它会自动运行,所以不需要做任何特别的事情。

我不会担心 fdupes。试试看,它应该可以正常工作。

答案2

根据 hashkey 查找重复项效果很好,而且速度非常快。

find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate

答案3

编写一个快速应用程序来遍历树,要么将 (hash, mtime)=>filepath 推送到字典中,要么如果条目已经存在则标记文件以进行删除。哈希值只是对前 N 个字节计算的 MD5。您可以进行几次不同的传递,先对较小的 N 进行哈希,然后再对较大的 N 进行哈希。

您可能只需要不到二十或三十行 Python 代码就可以完成此操作(使用 os.walk())。

相关内容