세 파일 시스템에서 ~ 40TB의 데이터로 연구 클러스터를 상속했습니다. 데이터는 거의 15 년으로 늘어 났으며, 연구원들이 서로 다른 이유로 서로 데이터를 복사 한 다음 사본에 매달리면서 상당한 양의 복제물이있을 가능성이 높습니다.
fdupes 및 rmlint와 같은 중복 제거 도구에 대해 알고 있습니다. 그런 큰 데이터 세트에서 작동하는 것을 찾으려고합니다. 모든 데이터를 크롤링하는 데 몇 주 또는 몇 달이 걸리더라도 상관 없습니다. 어쨌든 파일 시스템에서 쉽게 사용할 수 있도록 조절할 것입니다. 그러나 어떻게 든 RAM을 사용하여 매우 효율적이거나 필요한 모든 중간 데이터를 RAM이 아닌 파일에 저장할 수있는 도구를 찾아야합니다. 이 모든 데이터를 하나의 세트로 크롤링하면 RAM (64GB)이 소진 될 것이라고 가정합니다.
900GB 트리에서 fdupes를 실험하고 있습니다. 전체 길이의 25 %이며 RAM 사용량이 전체 시간에 서서히 증가하고 있으며 이제 700MB입니다.
또는 프로세스가 디스크 매핑 RAM을 사용하도록 지시하여 더 많은 가용성을 제공하고 시스템 RAM을 사용하지 않는 방법이 있습니까?
CentOS 6을 실행하고 있습니다.
답변
또는 프로세스가 디스크 매핑 RAM을 사용하도록 지시하여 더 많은 가용성을 제공하고 시스템 RAM을 사용하지 않는 방법이 있습니까?
예, 스왑 드라이브라고합니다. 아마 이미 가지고있을 것입니다. RAM이 부족 할까봐 걱정된다면 이것을 늘리는 것이 좋습니다. 자동으로 작동하므로 특별한 작업이 필요하지 않습니다.
나는 fdupes에 대해 걱정하지 않을 것입니다. 사용해보십시오. 문제없이 작동합니다.
답변
해시 키를 기반으로 중복을 찾는 것은 잘 작동하며 매우 빠릅니다.
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
답변
(해시, mtime) => 파일 경로를 사전에 넣거나 항목이 이미 존재하는 경우 파일을 삭제하도록 표시하여 트리를 걷는 빠른 앱을 작성하십시오. 해시는 첫 N 바이트에 대해 계산 된 MD5 일뿐입니다. 작은 N에 대한 해시와 큰 N에 대한 해시로 다른 패스를 수행 할 수 있습니다.
아마도 30 줄 또는 30 줄 미만의 파이썬 (os.walk () 사용)에서이 작업을 수행 할 수 있습니다.