중복 제거를 위해 btrfs CoW를 사용하는 중복 제거 스크립트가 있습니까?

중복 제거를 위해 btrfs CoW를 사용하는 중복 제거 스크립트가 있습니까?

Linux에는 중복 제거를 찾는 도구가 많이 있습니다.이 위키 페이지.

거의 모든 스크립트는 단순히 탐지, 중복 파일 이름 인쇄 또는 단일 복사본에 하드 링크하여 중복 파일 제거를 수행합니다.

btrfs가 등장하면서 또 다른 옵션이 등장했습니다. 즉, 파일의 CoW(기록 중 복사) 복사본을 생성하는 것입니다(예: btrfs cp reflink=always). 이 작업을 수행할 수 있는 도구를 찾지 못했습니다. 이 작업을 수행할 수 있는 도구를 아는 사람이 있습니까?

답변1

나는 썼다침대 라이닝이 목적을 위해. 증분 btree 검색과 CoW 중복 제거를 결합합니다. 다음을 실행할 수 있는 Linux 3.6과 함께 사용하는 것이 가장 좋습니다.

sudo bedup dedup

답변2

나는 침대에서 자려고 노력했다. 훌륭하지만(많은 사람들에게 최선의 선택이 될 수 있는 몇 가지 유용한 차별화 기능이 있음) 모든 대상 파일 전체에서 체크섬을 검색하는 것으로 보입니다.

너무 느립니다.

반면에 rdfind 및 rmlint와 같은 다른 프로그램은 다르게 검색합니다.

rdfind에는 btrfs reflink를 사용하는 "실험적" 기능이 있습니다. (그리고 하드 링크, 심볼릭 링크 등을 위한 "신뢰할 수 있는" 옵션)

rmlint는 btrfs 복제, 참조 링크, 일반 하드 링크, 심볼릭 링크, 삭제 및 사용자 정의 명령에 대한 "강력한" 옵션을 제공합니다.

하지만 더 중요한 것은 rdfind와 rmlint가상당히서둘러요. 예를 들어, 규모의 순서입니다. 모든 대상 파일의 체크섬을 검사하는 대신 다음을 수행합니다.

  • 경로와 파일 크기만 수집하여 전체 대상 파일 시스템을 검사합니다.
  • 고유한 파일 크기를 가진 파일을 고려 대상에서 제거합니다. 이것만으로도 많은 시간과 디스크 활동을 절약할 수 있습니다. ("Scads"는 일종의 역지수 함수 같은 것입니다.)
  • 나머지 후보 중 처음 N 바이트를 스캔합니다. 파일 크기는 동일하지만 처음 N 바이트가 다른 파일은 고려 대상에서 제거됩니다.
  • 마지막 N 바이트에 대해서도 동일한 작업을 수행합니다.
  • 더 이상은 없습니다 (보통매우 작은분수) 남음, 체크섬 검사.

나는 rmlint의 다른 장점을 알고 있습니다.

  • 체크섬을 지정할 수 있습니다. md5가 너무 무서운가요? sha256을 사용해 보세요. 아니면 512. 아니면 조금씩 비교해 보세요. 아니면 자신만의 해시 함수를 사용하세요.
  • 링크를 참조하는 대신 Btrfs를 "복제"하고 "참조"하는 옵션을 제공합니다. "cp --reflink=always"는 원자적이지 않고 커널의 파일에 무슨 일이 일어나고 있는지 알 수 없으며 항상 메타데이터를 보존하지 않기 때문에 약간 위험합니다. "Clone", OTOH(약칭입니다...공식 API 관련 이름은 생략하겠습니다)는 원자적이고 메타데이터를 보존하는 커널 수준 호출입니다. 거의 항상 동일한 결과를 생성하지만 더 강력하고 안전합니다. (대부분의 프로그램은 먼저 다른 파일에 대한 임시 재링크를 성공적으로 설정할 수 없는 경우 중복 파일을 제거하지 않을 만큼 똑똑합니다.)
  • 다양한 사용 사례에 대해 많은 옵션을 제공합니다(단점이기도 함).

나는 rmlint를 deduperemove와 비교했습니다. 후자는 또한 모든 대상 파일의 체크섬을 맹목적으로 검사합니다. Duperemov가 가져갔습니다.며칠나는 끝내야 할 책이 ​​있고(내 생각에는 4개), 앞으로 전력을 다할 것이다. 펌린트가 가져갔다몇 시간중복 항목을 식별한 다음 하루 이내에 Btrfs 클론을 사용하여 중복을 제거합니다.

(그러나 고품질의 강력한 소프트웨어를 작성하고 지원하며 무료로 제공하기 위해 열심히 노력하는 사람은 누구나 크게 칭찬받아야 합니다!)

그런데:어떤 경우에도 중복 제거를 위한 일반 하드 링크를 "범용" 중복 제거 솔루션으로 사용하는 것을 피해야 합니다.

하드 링크는 특정 대상 사용 사례(예: 개별 파일, 특정 최소 크기 이상의 특정 파일 형식을 검사할 수 있는 도구 사용 또는 많은 무료 및 상업용 백업/스냅샷 솔루션의 일부)에서 매우 편리하지만 다음과 같은 이점이 있습니다.무거운대규모 범용 파일 시스템의 "데이터 중복 제거"용입니다. 그 이유는 아마도 대부분의 사용자가수천파일 시스템의 파일은 동일한 이진수를 갖지만 기능은 완전히 다릅니다.

예를 들어, 많은 프로그램은 처음에는 동일한 템플릿 및/또는 숨겨진 설정 파일(때로는 볼 수 있는 모든 폴더에 있음)을 생성하며 대부분은 사용자(사용자)가 더 이상 필요하지 않을 때까지 동일하게 유지됩니다.

구체적인 참고 사항: 사진 썸네일 캐시 파일은 사진이 포함된 폴더의 수많은 프로그램에 의해 생성되며(이동성 때문에) 생성하는 데 몇 시간 또는 며칠이 걸릴 수 있지만 사진 앱 사용이 매우 쉬워집니다. 이러한 초기 캐시 파일이 모두 함께 하드 링크된 경우 나중에 디렉터리에서 응용 프로그램을 열면 큰 캐시가 생성됩니다... 그리고 추측해 보십시오. 이제 이전에 하드 링크된 캐시가 있던 모든 폴더에는 이제 잘못된 캐시가 있습니다. 이는 예상치 못한 데이터 손상으로 이어지는 재앙적인 결과를 초래할 수 있습니다. 또한 하드 링크를 지원하지 않는 백업 솔루션이 어떻게든 중단될 수도 있습니다.

또한 전체 스냅샷을 망칠 수도 있습니다. 스냅샷의 요점은 "라이브" 버전이 계속 변경될 수 있으며 이전 상태로 롤백할 수 있다는 것입니다. 모든 것이 서로 하드 링크되어 있으면... 동일한 항목으로 "롤백"됩니다.

하지만 좋은 소식은 Btrfs를 사용하여 중복 제거를 위한 링크를 복제/참조하면 이러한 손상을 제거할 수 있다는 것입니다. (제 생각에는 스캔 중에 하드 링크 파일을 동일하게 처리해야 하기 때문에...다른 것이 없는 한 논리를 고려하십시오.) 하드 링크 수는 중복 제거를 수행하는 특정 유틸리티에 따라 달라질 수 있습니다.)

답변3

11년 후: 추천합니다fclones. 이는 dedupe하위 명령을 통해 정확하게 수행됩니다.

이는 훌륭한 도구이고 빠르며(Rust로 작성됨) 모든 백업을 중복 제거하고 합리화하는 훌륭한 도구로서 나에게 매우 유용했습니다.

관련 정보