rsync가 전체 재전송 없이 부분적으로만 변경된 대용량 파일을 업데이트할 수 있습니까?

rsync가 전체 재전송 없이 부분적으로만 변경된 대용량 파일을 업데이트할 수 있습니까?

네트워크를 통해 전송하는 데 시간이 오래 걸리는 매우 큰 파일 이미지 파일(단 몇 픽셀 차이)을 약간 변경하고 있습니다.

rsync가 파일의 차이점을 식별하고 네트워크를 통해 작은 차이점만 보내는 방법이 있습니까?

답변1

rsync델타 전송 알고리즘은 기본적으로 이를 수행합니다. 인용rsync 맨페이지:

설명

Rsync는 빠르고 매우 다양한 파일 복사 도구입니다. 로컬로, 원격 셸을 통해 다른 호스트로/에서 또는 원격 rsync 데몬으로/에서 복사할 수 있습니다. 이는 동작의 모든 측면을 제어하고 복사할 파일 세트를 매우 유연하게 지정할 수 있는 다양한 옵션을 제공합니다.원본 파일과 대상에 있는 기존 파일의 차이점만 전송하여 네트워크로 전송되는 데이터의 양을 줄이는 델타 전송 알고리즘으로 유명합니다.. Rsync는 백업 및 미러링에 널리 사용되며 일상적인 사용을 위한 향상된 복사 명령으로 사용됩니다.

비활성화하려면 -W또는 --whole-file옵션을 사용해야 합니다.

-W, --전체 파일

이 옵션은 전송된 모든 파일을 전체로 전송하는 rsync의 델타 전송 알고리즘을 비활성화합니다. 원본 컴퓨터와 대상 컴퓨터 사이의 대역폭이 디스크 대역폭보다 높을 때(특히 "디스크"가 실제로 네트워크로 연결된 파일 시스템인 경우) 이 옵션을 사용하면 전송 속도가 더 빨라질 수 있습니다. 이는 원본과 대상이 모두 로컬 경로로 지정된 경우 기본값이지만 일괄 쓰기 옵션이 적용되지 않는 경우에만 해당됩니다.

파일이 얼마나 변경되었는지 실제로 알고 있다면 델타 블록 크기를 조정하여 이 델타 전송 동작을 최적화할 수도 있습니다.

-B, --block-size=BLOCKSIZE

이는 rsync의 델타 전송 알고리즘에 사용되는 블록 크기를 고정된 값으로 강제합니다. 일반적으로 업데이트되는 각 파일의 크기에 따라 선택됩니다. 자세한 내용은 기술 보고서를 참조하세요.

알고리즘 자체에 대한 자세한 내용을 알고 싶다면 여기에서 찾을 수 있습니다.재동기화 알고리즘

답변2

당신이 찾고 있던 것은 --partial--inplace옵션입니다. 네트워크를 통해 100GB에서 300GB의 단일 파일을 업데이트해야 해서 어제 찾았습니다. 또한 최신 버전의 rsync에서도 가장 잘 작동합니다. cygwin에 있는 것은 전혀 잘 작동하지 않는 것 같습니다. 그러나 준현대적인 Linux부터 Linux까지, 한계는 네트워크가 아니라 각 끝이 이미 전송된 파일을 읽을 수 있는 속도입니다.

나는 이것을 구체적으로 사용합니다 :

rsync -avPHx --inplace --partial src/foo remote_host:/target/path/

편집 - 출처는 다음과 같습니다.https://fedoramagazine.org/copying-large-files-with-rsync-and-some-misconceptions/- --append소스 기사에서 언급한 , 파일이 커지고 중간에 변경 사항이 있으면 --appendHill이 예상대로 작동하지 않는다는 점에서 위험할 수 있습니다. 본질적으로 --append추가만 되는 로그 파일과 같은 항목에만 사용됩니다.

답변3

rsync 작동 방식에 대한 모든 사람의 말은 사실이지만, 이미지를 조금만 변경하면 파일도 약간 변경될 수 있는 유일한 형식은 원시 비트맵 형식(.bmp, .pnm, 일부 유형의 .tif)입니다. 일반적인 .png, JPEG, Gimp, Photoshop .xcf, .psd 파일은 이미 압축되어 있으므로 작은 이미지 변경으로도 디스크에 거의 완전히 다른 파일이 생성될 가능성이 높습니다. 이것이 rsync의 델타 알고리즘이 상당히 비효율적인 것처럼 보이는 이유입니다.

관련 정보