40TB의 데이터를 중복 제거하는 방법은 무엇입니까?


17

세 파일 시스템에서 ~ 40TB의 데이터로 연구 클러스터를 상속했습니다. 데이터는 거의 15 년으로 늘어 났으며, 연구원들이 서로 다른 이유로 서로 데이터를 복사 한 다음 사본에 매달리면서 상당한 양의 복제물이있을 가능성이 높습니다.

fdupes 및 rmlint와 같은 중복 제거 도구에 대해 알고 있습니다. 그런 큰 데이터 세트에서 작동하는 것을 찾으려고합니다. 모든 데이터를 크롤링하는 데 몇 주 또는 몇 달이 걸리더라도 상관 없습니다. 어쨌든 파일 시스템에서 쉽게 사용할 수 있도록 조절할 것입니다. 그러나 어떻게 든 RAM을 사용하여 매우 효율적이거나 필요한 모든 중간 데이터를 RAM이 아닌 파일에 저장할 수있는 도구를 찾아야합니다. 이 모든 데이터를 하나의 세트로 크롤링하면 RAM (64GB)이 소진 될 것이라고 가정합니다.

900GB 트리에서 fdupes를 실험하고 있습니다. 전체 길이의 25 %이며 RAM 사용량이 전체 시간에 서서히 증가하고 있으며 이제 700MB입니다.

또는 프로세스가 디스크 매핑 RAM을 사용하도록 지시하여 더 많은 가용성을 제공하고 시스템 RAM을 사용하지 않는 방법이 있습니까?

CentOS 6을 실행하고 있습니다.


파일 시스템은 관련이있는 경우 XFS입니다. 즉, XFS와 같은 중복 제거 기능이있는 fs가 아니라는 것을 알고 있습니다.
Michael Stauffer

왜 처음부터 RAM이 걱정됩니까? OS에는 자체 메모리 관리 알고리즘이 있으며 RAM 사용량이 "크리핑"된다고해서 결국 모든 RAM을 차지한다는 의미는 아닙니다. 나는 그것이 일어나지 않을 것이라고 확신합니다.
Art Gertner

1
전용 도구의 작동 방식을 모르지만 각 파일의 해시를 계산하고 파일 경로와 함께 기록한 다음 해시별로 정렬하고 중복 제거 할 수 있습니다. 간단한 Python 스크립트 또는 심지어 Bash로도 가능합니다. 정렬 단계를 제외하고 RAM 사용량은 최소화해야하지만 합리적으로 낮게 유지하기 위해 일종의 수정 된 병합 정렬을 사용할 수 있다고 생각합니다.
gronostaj

1
예, 전용 도구는 해시를 계산하지만 먼저 파일 크기를 확인하는 것과 같은 작업을 수행하고 파일의 시작 부분 만 해시하여 계산해야하는 전체 해시의 양을 제한합니다.
Michael Stauffer

RAM에 관해서는 파일 서버 속도를 늦추는 것에 대해 걱정했습니다. 응답에 대한 아래의 내 의견을 참조하십시오.
Michael Stauffer

답변:


4

또는 프로세스가 디스크 매핑 RAM을 사용하도록 지시하여 더 많은 가용성을 제공하고 시스템 RAM을 사용하지 않는 방법이 있습니까?

예, 스왑 드라이브라고합니다. 아마 이미 가지고있을 것입니다. RAM이 부족 할까봐 걱정된다면 이것을 늘리는 것이 좋습니다. 자동으로 작동하므로 특별한 작업이 필요하지 않습니다.

나는 fdupes에 대해 걱정하지 않을 것입니다. 사용해보십시오. 문제없이 작동합니다.


스왑에 의존하면 전체 시스템이 느려질 것이라고 생각했습니다. 파일 서버가 바쁩니다. 그러나 걱정할만큼 충분하지 않습니까? 나는 ulimit를 사용하여 프로세스가 시스템 안전보다 더 많은 시스템 램을 사용하지 못하게 할 수 있다고 생각합니다. 그러나 krowe와 smc는 fdupe가 어쨌든 많은 양의 램을 사용할 것이라고 생각하지 않으므로 시도해보십시오.
Michael Stauffer

1

해시 키를 기반으로 중복을 찾는 것은 잘 작동하며 매우 빠릅니다.

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

(해시, mtime) => 파일 경로를 사전에 넣거나 항목이 이미 존재하는 경우 파일을 삭제하도록 표시하여 트리를 걷는 빠른 앱을 작성하십시오. 해시는 첫 N 바이트에 대해 계산 된 MD5 일뿐입니다. 작은 N에 대한 해시와 큰 N에 대한 해시로 다른 패스를 수행 할 수 있습니다.

아마도 30 줄 또는 30 줄 미만의 파이썬 (os.walk () 사용)에서이 작업을 수행 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.