rsync가 "파일 이름 변경"을 정상적으로 처리하지 않는다는 것이 사실입니까?
백업 도구를 사용하는 동안 duplicity소스의 파일 이름을 바꾸면 데이터가 네트워크를 통해 대상으로 다시 전송된다는 사실을 알게 되었습니다 . internaly를 duplicity
사용 하기 때문에 .librsync
rsync
이 위키 백과 페이지 에는 다음과 같은 내용이 있습니다.
핸들 이름 변경 이동 / 이름 변경된 파일이 감지되고 두 번 저장되거나 전송되지 않습니다. 일반적으로 파일 또는 해당 청크의 체크섬이 계산됨을 의미합니다. 이 기능이없는 애플리케이션은 이름 변경 만 동기화하는 hsyncAUR과 결합하여 보완 할 수 있습니다.
rsync : 핸들 이름 변경 : 아니요
이것은를 사용할 때rsync
원본 컴퓨터에서로 이름 /test/10GBfile
을 바꾸면 을 ( /test/10GBfile_newname
를) 사용할 때 10GB가 네트워크를 통해 대상으로 다시 전송되는 것을 방지 할 방법이 없다는 것을 의미합니까 ?
의 오랜 인기를 감안할 때이 문제를 rsync
더 잘 처리 할 수있는 모드가 없습니까?
답변
rsync
실행 중 외에는 상태를 유지하지 않으므로 이름 변경을 추적하는 메커니즘이 없습니다 . 원본 컴퓨터에서로 이름 /test/10GBfile
을 바꾸면 /test/10GBfile_newname
기본적 으로 삭제 되고 생성 된 rsync
것만 볼 수 있습니다 .10GBfile
10GBfile_newname
--fuzzy
매개 변수 ( -y
) 식별하는 데 도움이 될 수 있습니다 10GBfile
에 대한 데이터의 잠재적 인 소스로 10GBfile_newname
대상에하여 파일 복사의 비용으로 네트워크 사본을 피하는. 그러나, (주로) 파일 만의 경기를 고려할 수 같은 디렉토리에 귀하의 예는,의 이름 변경을 일치합니다 그래서 비록 /test/10GBfile
에 /test/otherdir/10GBfile_newname
하지 않을 것입니다.
공지 사항 문서는 (또한 man rsync
) 사용할 경우 것을 조언 --delete
대신 사용해야 하나 --delay-updates
또는 --delete-after
그래서에 대한 잠재적 인 일치 --fuzzy
가 사용되기 전에 삭제되지 않습니다.
예
# Prepare an uncompressible 100MB file
mkdir -p /tmp/test
dd bs=1M count=100 iflag=fullblock if=/dev/urandom >/tmp/test/file1
# Normal first-time copy
rsync -av --fuzzy --delete-after /tmp/test/ remote:/tmp/test
# Skip copy because unchanged
rsync -av --fuzzy --delete-after /tmp/test/ remote:/tmp/test
# Rename file (per your example)
mv /tmp/test/file1 /tmp/test/file2
# Fast copy because fuzzy match
rsync -av --fuzzy --delete-after /tmp/test/ remote:/tmp/test
두 개의 -v
플래그 (예 :)를 더 추가 rsync -avvv …
하여 무슨 일이 벌어지고 있는지 블록 별 세부 정보를 확인합니다.
--fuzzy
이미 답변을 받았지만 하드 링크와 관련된 또 다른 흥미로운 해킹이 있습니다.
첫 이체 후
$ rsync -avHP --delete-after ~/family/Photos remotebox:backups
하드 링크 된 작업 디렉토리를 만듭니다.
$ cd ~/family
$ cp -rlp Photos Photos-work
그런 다음 사용할 수 있습니다
$ rsync -avHP --delete-after --no-inc-recursive ~/family/Photos ~/family/Photos-work remotebox:backups
새 구조를 리모컨으로 전송합니다.
이것이 작동하는 이유와 방법은 여기에 설명되어 있습니다.
https://lincolnloop.com/blog/detecting-file-moves-renames-rsync/