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


17

我继承了一个研究集群,该集群在三个文件系统中拥有约40TB的数据。数据可以追溯到将近15年,而且由于研究人员出于不同的原因互相复制数据,然后挂在副本上,因此很可能存在大量重复数据。

我知道有关fdupes和rmlint的重复数据删除工具。我正在尝试找到一个适用于如此大的数据集的数据库。我不在乎是否需要数周(甚至数月)来爬网所有数据-无论如何,我可能都会限制它以方便在文件系统上使用。但是我需要找到一种在某种程度上对RAM超高效的工具,或者可以将所需的所有中间数据存储在文件中,而不是RAM中。我假设如果我将所有这些数据作为一组爬网,我的RAM(64GB)将用光。

我现在正在900GB树上试验fdupes。这是整个过程的25%,RAM使用率一直在缓慢增长,现在达到700MB。

或者,是否有一种方法可以指导进程使用磁盘映射的RAM,以便有更多可用空间,并且不使用系统RAM?

我正在运行CentOS 6。


如果相关的话,文件系统是XFS。也就是说,我知道它不是具有像XFS这样的重复数据删除功能的fs。
Michael Stauffer 2014年

您为什么首先担心RAM?操作系统具有自己的内存管理算法,并且RAM使用率正在“上升”这一事实并不意味着它最终会耗尽所有RAM。我很确定不会发生。
Art Gertner

1
我不知道专用工具的工作方式,但是您可以计算每个文件的哈希值并将其与文件路径一起记录,然后按哈希排序和重复数据删除进行排序。它应该可以通过简单的Python脚本甚至在Bash中实现。除排序步骤外,RAM的使用应该最少,但是我想您可以使用某种修改的mergesort使其保持合理的低水平。
gronostaj

1
是的,专用工具可以计算哈希值,但是首先要做的事情是查看文件大小,然后仅哈希文件的开头以限制需要计算的完整哈希值。
Michael Stauffer 2014年

至于RAM,我担心降低文件服务器的速度-请参阅下面对“答案”的评论。
Michael Stauffer 2014年

Answers:


4

或者,是否有一种方法可以指导进程使用磁盘映射的RAM,以便有更多可用空间,并且不使用系统RAM?

是的,它称为交换驱动器。您可能已经有一个。如果您担心RAM不足,那么增加它是一个不错的起点。它会自动运行,因此无需执行任何特殊操作。

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


我当时认为依靠交换会降低整个系统的速度-这是一个繁忙的文件服务器。但是也许不足以担心吗?我想,在任何情况下,我都可以使用ulimit来防止进程使用超过系统ram的故障保护。但是似乎krowe和smc认为fdupes无论如何都不会使用那么多的ram,所以我应该尝试一下。
Michael Stauffer

1

根据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

0

编写一个快速的应用程序来遍历树木,或者将(hash,mtime)=> filepath推入字典中,或者如果该条目已经存在,则将该文件标记为要删除。哈希将只是在前N个字节中计算出的MD5。您可能会执行几次不同的遍历,对小N进行哈希处理,然后对大N进行哈希处理。

您可能可以在不到二十或三十行的Python中执行此操作(使用os.walk())。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.