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


9

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

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

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


업데이트 : rmlint의 개발 지점이며 마스터라고 생각하며 다음을 추가했습니다. 1) 증분 파일 해싱. 파일은 마지막 실행 이후에 변경되지 않는 한 파일을 다시 해시하지 않습니다. 2) 증분 중복 제거 . 아직 또는 변경되지 않은 파일 만 제거합니다. [그것은 훨씬 더 큽니다.] 다른 모든 빠른 비교 방법이 실패한 후에 해싱 파일 만 결합하면 무적입니다. Bedup은 버려지고 컴파일되지 않습니다. 자세한 비교를 수행했습니다 : docs.google.com/spreadsheets/d/…
Jim

답변:


17

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

sudo bedup dedup

안녕하세요 @Gabriel, 아래 답변에 대한 의견은 "... bedup ... 크기 버킷에 물건을 넣고 전체 파일을 읽은 다음 필요한 경우 체크섬을 만듭니다."라고 말합니다. 그게 사실입니까? 그렇다면 아래 답변을 업데이트하고 싶습니다. 불행히도 나는 이것을 어디서나 확인할 수 없었습니다. Google에서 github 페이지를 검색하고 코드를 검색했습니다. 감사.
Jim

4

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

고통스럽게 느립니다.

반면에 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 복제 / 반복으로 중복 제거하면 해당 손상을 취소 할 수 있다는 것입니다 (스캔 중 하드 링크 된 파일을 동일하게 간주해야합니다. 중복 제거를 수행하는 특정 유틸리티.)


이것은 정확하지 않습니다. bedup은 동일한 작업을 수행하고 크기 버킷에 내용을 넣고 전체 파일 만 읽으며 필요한 경우 체크섬을 만듭니다. 또한 bedup은이 결과를 저장하여 후속 실행이 더욱 빨라집니다.
피터 Smit

@PeterSmit, 귀하의 의견의 첫 부분을 확인할 수 있다면 답변을 업데이트하고 (잠자리로 다시 전환하는 것을 고려하십시오). Bedup의 github readme는 그것을 언급하지 않으며 "file size"또는 "filesize"를 검색하면 확실한 대답이 없습니다. 어떻게 확인할 수 있습니까?
Jim

또한 지난 3 년 동안 잠자리에 들지 않은 것으로 보입니다. 내가 사용하고 싶다는 정말 환상적인 아이디어처럼 보이기 때문에 부끄러운 일입니다! 나는 당신이 그것을 다시 가져 오기를 바랍니다.
Jim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.