네트워크를 통해 전송하는 데 시간이 오래 걸리는 매우 큰 이미지 파일(몇 픽셀만 다름)에 약간의 변경을 가하고 있습니다.
rsync가 파일의 차이점을 식별하고 네트워크를 통해 작은 차이점만 보내는 방법이 있습니까?
답변1
rsync
증분 전송 알고리즘은 기본적으로 이 작업을 수행합니다. 인용하다rsync 맨페이지:
설명하다
Rsync는 빠르고 다양한 파일 복사 도구입니다. 원격 셸을 통해 다른 호스트로/에서 로컬로 복사하거나 원격 rsync 데몬으로/에서 복사할 수 있습니다. 이는 동작의 다양한 측면을 제어할 수 있는 많은 옵션을 제공하고 복사할 파일 세트를 지정하는 데 있어 뛰어난 유연성을 허용합니다.원본 파일과 대상에 있는 기존 파일의 차이만 전송하여 네트워크로 전송되는 데이터의 양을 줄이는 증분 전송 알고리즘으로 알려져 있습니다.. Rsync는 백업 및 미러링에 널리 사용되며 일상적인 사용을 위한 향상된 복사 명령으로 사용됩니다.
비활성화하려면 -W
또는 --whole-file
옵션을 사용해야 합니다.
-W, --전체 파일
이 옵션은 전송된 모든 파일이 그대로 전송되도록 하는 rsync의 증분 전송 알고리즘을 비활성화합니다. 원본 컴퓨터와 대상 컴퓨터 간의 대역폭이 디스크 대역폭보다 높은 경우(특히 "디스크"가 실제로 네트워크 파일 시스템인 경우) 이 옵션을 사용하면 전송 속도가 더 빨라질 수 있습니다. 이는 원본과 대상이 모두 로컬 경로로 지정된 경우 기본값이지만 대량 쓰기 옵션이 적용되지 않은 경우에만 해당됩니다.
파일이 얼마나 변경되었는지 확실히 알고 있다면 델타 블록 크기를 조정하여 델타 전송 동작을 최적화할 수도 있습니다.
-B, --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
원문에서 언급한 바와 같이 파일이 늘어나 중간에 변화가 생기면 --append
산이 예상대로 작동하지 않아 위험할 수 있으니 주의하시기 바랍니다. 본질적으로 --append
로그 파일에 추가하는 것과 같은 작업 에만 사용됩니다 .
답변3
rsync 작동 방식에 대해서는 모두가 옳습니다. 그러나 이미지의 작은 변경으로 인해 파일의 작은 변경이 발생할 수 있는 유일한 형식은 원시 비트맵 형식(.bmp, .pnm, 일부 유형의 .tif)입니다. 일반적으로 .png, JPEG, Gimp, Photoshop .xcf 또는 .psd 파일은 이미 압축되어 있으므로 작은 이미지 변경으로도 디스크에 거의 완전히 다른 파일이 생성될 가능성이 높습니다. 이것이 rsync의 델타 알고리즘이 다소 비효율적으로 보이는 이유입니다.