hashsync는 SSH로 원격 명령을 실행하면서 전송 데이터를 받는 쪽 호스트의 파일과 대조해 중복 블록을 참조로 바꾸는 도구다. 파일 이름이나 위치, 스트림 형식이 달라도 블록이 일치하면 재사용하며, 중복되지 않은 데이터는 zstd로 압축한다. Linux 5.8 이상에서 양쪽 호스트에 설치해야 한다.

제작자 설명에 따르면 2MiB/s로 제한한 링크에서 기존 파일이 있는 GPT-2 저장소의 새 버전을 복사하는 시험은 rsync만 썼을 때 19분, hashsync를 함께 썼을 때 4분이 걸렸다. 이 시험은 hashsync 1.0.0과 패치를 적용한 rsync 3.5.1을 사용했고, 두 호스트는 같은 가상 머신에서 실행됐다. 따라서 이 수치는 해당 시험 조건에 따른 결과다. 시험에 사용한 데이터와 조건

rsync에서는 원격 셸로 hashsync ssh를 지정해 가져오기에 사용하고, --dedup-stdin을 추가하면 보내기에도 쓸 수 있다. 받는 쪽에서 미리 인덱스를 만들면 첫 인덱스 생성에 걸리는 시간 동안 중복 제거 효과가 작아지는 상황을 줄일 수 있다. --wait를 쓰면 인덱스의 해시 목록을 모두 받을 때까지 전송을 기다려 더 적은 데이터를 보낼 수 있지만, 전송 시작은 늦어진다.

압축되거나 암호화된 데이터는 중복 제거할 수 없다. rsync의 -z도 hashsync가 데이터를 처리하기 전에 압축하므로 함께 쓰지 말아야 한다. rsync에서 중복 제거를 더 효과적으로 하려면 보내는 쪽 rsync에 rsync 3.5.1용 패치를 적용할 수 있다. 패치가 없으면 rsync가 데이터를 최대 32KiB 조각으로 나눠 보내면서 hashsync가 기본 16KiB 블록의 일부를 놓칠 수 있다.

hashsync는 자체 백업 형식이나 데몬을 두지 않는다. 양쪽 명령은 SSH를 쓸 때와 같은 바이트를 주고받고, 네트워크로 보내는 내용만 바뀐다. 다만 각 hashsync ssh는 서버에 SSH 세션 두 개를 열며, 전송 데이터는 양쪽 호스트의 임시 파일에 스트림당 기본 최대 2GiB까지 저장한다.

보안상 보내는 쪽은 받는 쪽 인덱스에 있는 모든 블록의 해시를 받으므로, 특정 내용의 블록이 있는지 시험할 수 있다. 특히 가져오기에서는 서버가 클라이언트 파일의 해시를 알게 될 수 있으므로, 신뢰하는 서버만 이용하거나 서버가 알아도 되는 디렉터리만 인덱싱하는 프로필을 써야 한다. 자세한 설치·설정 방법과 제약은 hashsync 저장소, 매뉴얼, 설계 문서에서 확인할 수 있다.