내 rsync가 블록 크기> 128K를 허용하지 않는 이유는 무엇입니까?


15

다음과 같이 큰 *로 rsync를 실행 --block-size하십시오.

rsync -avvz --rsh 'ssh -c arcfour' --block-size 1048576 --inplace --progress example.com:/big.file /big.file

다음과 같은 오류가 발생합니다.

Invalid block length 1048576 [sender]

두 끝 모두 64 비트 CentOS 6.4를 실행하고 있습니다. 인터넷 검색 --block-size에서 훨씬 높은 값으로 사용되는 것을 보았는데 왜 이것이 효과가 없습니까?

* rsync가 CPU를 영원히 44 %로 300GB 파일로 회전시키는 버그를 해결하려고하기 때문에 큰 블록 크기를 사용하고 있습니다.

rsync 

답변:


13

에서 소스 :

int32 max_blength = protocol_version < 30 ? OLD_MAX_BLOCK_SIZE : MAX_BLOCK_SIZE;

sum->blength = read_int(f);
if (sum->blength < 0 || sum->blength > max_blength) {
    rprintf(FERROR, "Invalid block length %ld [%s]\n",
        (long)sum->blength, who_am_i());
    exit_cleanup(RERR_PROTOCOL);
}

어디서 :

#define OLD_MAX_BLOCK_SIZE ((int32)1 << 29)
#define MAX_BLOCK_SIZE ((int32)1 << 17)

어느 것 536870912(512M)와 131072각각 (128K).


버전 v3.0.0 에서 변경되었으며 v3.0.3 에서 지원 OLD_추가되었습니다 . (링크는 변경 사항에 대한 몇 가지 근거를 설명합니다.)

  • [PATCH] 발신자 측 해시 테이블 검색에서 큰 파일을 처리하지 못하게하는 패치입니다.

  • [PATCH] 프로토콜 <29에 대한 이전 블록 크기 제한을 처리하여 이전 rsync 버전의 대용량 파일 전송을 수정했습니다.


1
--dry-run에서 블록 크기를 처리 할 때 여전히 3.0.x에 버그가있는 것 같습니다. --dry-run이없는 명령은 작동 할 수 있지만 여전히 "잘못된 블록 길이 NNN [sender]"메시지가 나타납니다.
Paul Gear

3 년이 지난 후 @PaulGear가 언급 한 뉘앙스를 발견 한 것은 매우 흥미 롭습니다. 이것은 여전히 ​​우분투 18에서? v3.1.2
TonyG

3

최대 블록 크기는 rsync 프로토콜 버전에 따라 다릅니다.

프로토콜 버전이 30보다 작은 경우 최대 값은 1 << 29536870912 바이트 (512M)입니다. 그러나 프로토콜 버전 30 이상에서 최대 값 1 << 17은 128k 바이트입니다. 따라서 더 큰 블록 크기를 원하면 이전 버전을 사용해야합니다.

출처 : rsync.h

#define MAX_BLOCK_SIZE ((int32)1 << 17)

/* For compatibility with older rsyncs */
#define OLD_MAX_BLOCK_SIZE ((int32)1 << 29)

그리고 : io.c

// ...
int32 max_blength = protocol_version < 30 ? OLD_MAX_BLOCK_SIZE : MAX_BLOCK_SIZE;
// ...
if (sum->blength < 0 || sum->blength > max_blength) {
  rprintf(FERROR, "Invalid block length %ld [%s]\n",
                  (long)sum->blength, who_am_i());
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.