[unix] btrfs CoW를 중복 제거로 사용하는 중복 제거 스크립트가 있습니까?

Linux에서 중복 제거 도구를 찾고 있다면 이 위키 페이지를 참조하십시오 .

대부분의 모든 스크립트는 감지, 중복 파일 이름 인쇄 또는 중복 파일을 단일 사본으로 하드 링크하여 제거 만 수행합니다.

btrfs가 증가함에 따라 파일의 CoW (Copy-On-Write) 사본 (예 :)을 작성하는 또 다른 옵션이 있습니다 cp reflink=always. 이 작업을 수행하는 도구를 찾지 못했습니다.이 작업을 수행하는 도구를 아는 사람이 있습니까?



답변

나는 이 목적을 위해 잠 들었다 . 증분 btree 검색과 CoW 중복 제거를 결합합니다. 다음을 실행할 수있는 Linux 3.6에서 가장 많이 사용됩니다.

sudo bedup dedup


답변

나는 취침을 시도했다. 훌륭하지만 (그리고 많은 사람들에게 최선의 선택이 될 수있는 유용한 차별화 된 기능이 있지만) 모든 대상 파일의 전체를 검사하여 체크섬을 찾는 것 같습니다.

고통스럽게 느립니다.

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

rdfind에는 btrfs reflink를 사용하기위한 “실험”기능이 있습니다. (하드 링크, 심볼릭 링크 등에 대한 “솔리드”옵션)

rmlint에는 btrfs clone, reflink, regular hardlinks, symlinks, delete 및 사용자 정의 명령에 대한 “solid”옵션이 있습니다.

그러나 더 중요한 것은 rdfind와 rmlint가 훨씬 빠릅니다. 마찬가지로, 규모의 순서. 모든 대상 파일에서 체크섬을 스캔하지 않고 다음과 같은 작업을 수행합니다.

  • 경로와 파일 크기 만 수집하여 전체 대상 파일 시스템을 스캔하십시오.
  • 고유 한 파일 크기를 가진 파일을 고려하여 제거하십시오. 이것만으로 시간과 디스크 활동의 시간을 절약 할 수 있습니다. ( “Scads”는 역 지수 함수 또는 무언가입니다.)
  • 나머지 후보 중에서 첫 번째 N 바이트를 스캔하십시오. 파일 크기는 같지만 첫 번째 N 바이트가 다른 것을 고려하십시오.
  • 마지막 N 바이트에 대해서도 동일하게 수행하십시오.
  • 남은 것 (보통 작은 부분) 만 체크섬을 스캔하십시오.

내가 알고있는 rmlint의 다른 장점 :

  • 체크섬을 지정할 수 있습니다. md5가 너무 무섭습니까? sha256을 사용해보십시오. 또는 512. 비트-비트 비교. 또는 자신의 해싱 기능.
  • 단지 reflink가 아니라 Btrfs “clone”및 “reflink”의 옵션을 제공합니다. “cp –reflink = always”는 원 자성이 아니기 때문에 커널에서 해당 파일에 대해 어떤 일이 일어나고 있는지 알지 못하며 메타 데이터를 항상 보존하지는 않습니다. OTOH (약식 … 공식 API 관련 이름은 공백 임) 인 “Clone”은 원자 수준이고 메타 데이터를 유지하는 커널 수준 호출입니다. 거의 항상 같은 결과를 낳지 만 조금 더 강력하고 안전합니다. (대부분의 프로그램은 먼저 다른 파일에 대한 임시 참조를 만들 수없는 경우 중복 파일을 삭제하지 못할 정도로 똑똑합니다.)
  • 많은 유스 케이스에 대한 많은 옵션이 있습니다 (또한 단점이기도합니다).

rmlint를 deduperemove와 비교했습니다. 이는 또한 모든 대상 파일을 체크섬에 대해 맹목적으로 검사합니다. Duperemove가 볼륨을 완성하는 데 며칠 이 걸렸 습니다 (4라고 생각합니다). fmlint는 중복을 식별하는 데 몇 시간 이 걸렸고 Btrfs 클론으로 중복 제거하는 데 하루도 채 걸리지 않았습니다.

(즉, 품질, 강력한 소프트웨어를 작성하고 지원하고 무료로 제공하기 위해 노력하는 사람이라면 누구나 큰 도움이 될 것입니다!)

Btw : 일반 하드 링크를 “일반적인”중복 제거 솔루션으로 사용하여 중복 제거를 피해야합니다.

하드 링크는 특정 대상 사용 사례 (예 : 개별 파일 또는 최소 크기를 초과하는 특정 파일 유형을 스캔 할 수있는 도구 또는 많은 무료 및 상용 백업 / 스냅 샷 솔루션의 일부)에서 매우 유용 할 수 있지만, 비참 할 수 있습니다. 대규모 범용 파일 시스템에서 “중복 제거” 그 이유는 대부분의 사용자가 파일 시스템에 수천 개의 파일을 가지고있을 수 있는데 , 이진 파일은 동일하지만 기능상 완전히 다릅니다.

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

구체적인 설명 : 사진을 포함하는 폴더에서 수많은 프로그램이 생성하는 (그리고 좋은 이유로 이식성) 사진 썸네일 캐시 파일은 생성하는 데 몇 시간 또는 며칠이 걸릴 수 있지만 사진 앱을 사용하면 산들 바람이됩니다. 초기 캐시 파일이 모두 함께 하드 링크 된 경우 나중에 디렉토리에서 앱을 열고 큰 캐시를 빌드합니다 … 그런 다음 추측하십시오 : 이전에 하드 링크 된 캐시가있는 모든 폴더에 잘못된 캐시가 있습니다. 잠재적으로 데이터가 실수로 손상 될 수있는 비참한 결과가 발생할 수 있습니다. 또한 잠재적으로 하드 링크를 인식하지 않는 백업 솔루션을 폭발시키는 방식으로 사용됩니다.

또한 전체 스냅 샷을 망칠 수 있습니다. 스냅 샷의 전체 요점은 “실시간”버전을 계속 변경하여 이전 상태로 롤백 할 수 있도록하는 것입니다. 그래도 모든 것이 서로 연결되어 있다면 같은 롤로 “롤백”할 수 있습니다.

그러나 좋은 소식은 Btrfs 복제 / 반복으로 중복 제거하면 해당 손상을 취소 할 수 있다는 것입니다 (스캔 중 하드 링크 된 파일을 동일하게 간주해야합니다. 중복 제거를 수행하는 특정 유틸리티.)


답변