각 파일에 대해 rsync 블록 압축 사전을 재설정해야 합니까?

각 파일에 대해 rsync 블록 압축 사전을 재설정해야 합니까?

이전 파일에 관계없이 각 파일의 블록이 압축 됩니까 rsync -z, 아니면 독립적으로 처리될 수 있도록 각 파일에 대해 압축 사전이 재설정됩니까?

예를 들어, 압축 가능한 파일 one.txt과 해당 파일의 동일한 복사본이 두 파일 모두 존재하지 않는 원격 서버로 전송되는 경우를 생각해 보세요.

cp -p one.txt two.txt
rsync -az one.txt two.txt remote:

압축 계층이 합계를 독립적으로 zlib처리 합니까 , 아니면 해당 수준의 데이터 전송이 연속 스트림이므로 적용할 수 있는 유용한 압축 사전을 학습하게 됩니까 ?one.txttwo.txtone.txttwo.txt

zlib아니면 (예를 들어) 항상 새 블록마다 사전을 재설정하는 것과 같은 압축 알고리즘을 완전히 오해하고 있습니까 ?

rsync디버그 출력을 살펴보았지만 rsync -avvvvz --debug=IO1,IO2,IO3,IO4 --msgs2stderr압축 레이어와 특별히 관련된 내용은 볼 수 없습니다.

(이것은 후속 조치입니다.댓글 영역ServerFault에 대한 내 답변을 바탕으로 합니다. )

답변1

rsync압축 사용token.c, 거기에만있는 것 같습니다. 변수에서 수축 흐름 상태를 유지하고 tx_strm이전 플래그가 -1일 때 흐름 상태를 재설정합니다.send_deflated_token

        if (last_token == -1) {
                /* initialization */
                if (!init_done) {
                        tx_strm.next_in = NULL;
                        tx_strm.zalloc = NULL;
                        tx_strm.zfree = NULL;
                        if (deflateInit2(&tx_strm, compression_level,
                                         Z_DEFLATED, -15, 8,
                                         Z_DEFAULT_STRATEGY) != Z_OK) {
                                rprintf(FERROR, "compression init failed\n");
                                exit_cleanup(RERR_PROTOCOL);
                        }
                        if ((obuf = new_array(char, OBUF_SIZE)) == NULL)
                                out_of_memory("send_deflated_token");
                        init_done = 1;
                } else
                        deflateReset(&tx_strm);

이것은 이후에 사용됩니다match.c,통과하다match기능 hash_search은 및 에서 사용됩니다 match_sums. 이러한 함수는 항상 -1로 설정된 호출로 처리를 완료하여 last_token다음 호출에서 수축 스트림을 재설정하도록 합니다. 이 모든 작업은 파일별로 수행되므로 수축 스트림은 항상 각 파일의 시작 부분에서 재설정됩니다.

이는 블록 압축 사전이 각 파일에 대해 재설정된다는 것을 보장하며 더 자주 재설정될 수 있음을 의미합니다.

이전 파일의 데이터를 사용하려는 경우 rsync파일 전체에 걸쳐 해싱을 확장하는 것이 더 흥미로울 수 있습니다.

제안한 대로 압축 가능한 파일의 여러 복사본을 동기화하여 이 모든 것을 실험적으로 확인할 수 있습니다. 통계는 항상 전송된 크기가 개별 파일의 압축 크기에 복사본 수를 곱한 것과 동일하다는 것을 보여줍니다. 파일 전체에 걸쳐 중복된 데이터 유형이 삭제됩니다.

관련 정보