rsync의 기본 블록 크기는 얼마입니까?
옵션을 제공하지 않고 rsync를 실행 하면 --block-size
블록 크기는 어떻게 사용됩니까?
Linux 플랫폼에서 rsync를 사용하고 있습니다.
답변1
--block-size=BLOCKSIZE
명령줄에서 지정 하면 해당 블록 크기가 사용됩니다.- 파일 크기가 490,000바이트 이하인 경우 블록 크기는 700바이트로 설정됩니다.
- 파일이 490,000바이트보다 큰 경우 블록 크기는 파일 크기의 제곱근(8의 배수로 반올림)으로 설정되며 최대 블록 크기는 프로토콜 버전에 따라 다릅니다.
- 프로토콜 버전 <30의 경우 최대 블록 크기는 536,870,912(~536MB)입니다.
- 프로토콜 버전 >=30의 경우 최대 블록 크기는 131,072(~131KB)이며 이는 더 합리적입니다.
- 17GB 파일(131KB 제곱)의 경우 최대 블록 크기는 131KB에 도달합니다.
따라서 최신 버전에 따르면 rsync
블록 크기 범위는 에 정의된 대로 700바이트에서 131KB 사이입니다.소스 코드 상수.
답변2
rsync
매뉴얼 에서 :
-B
,--block-size=BLOCKSIZE
이는 rsync의 증분 전송 알고리즘에 사용되는 블록 크기를 고정된 값으로 강제합니다. 일반적으로 업데이트할 각 파일의 크기에 따라 선택됩니다. 자세한 내용은 기술 보고서를 참조하세요.
기술 보고서는 다음에서 확인할 수 있습니다.https://rsync.samba.org/tech_report/오래되어 블록 크기를 선택하는 방법에 대해 자세히 설명하지는 않지만 "500에서 1000 사이의 S 값이 대부분의 목적에 적합합니다"(이것은 실제로 코드에서 사용되는 값이 아니며, 아래 참조).
몇 가지 실용적인 의견소스 코드블록 크기로 사용된 파일 크기의 제곱근을 표시합니다(8의 배수로 반올림됨).
/*
* set (initialize) the size entries in the per-file sum_struct
* calculating dynamic block and checksum sizes.
*
* This is only called from generate_and_send_sums() but is a separate
* function to encapsulate the logic.
*
* The block size is a rounded square root of file length.
*
* The checksum size is determined according to:
* blocksum_bits = BLOCKSUM_BIAS + 2*log2(file_len) - log2(block_len)
* provided by Donovan Baarda which gives a probability of rsync
* algorithm corrupting data and falling back using the whole md4
* checksums.
*
* This might be made one of several selectable heuristics.
*/
static void sum_sizes_sqroot(struct sum_struct *sum, int64 len)
{
[...]
else {
blength = 0;
do {
blength |= c;
if (len < (int64)blength * blength)
blength &= ~c;
c >>= 1;
} while (c >= 8); /* round to multiple of 8 */
blength = MAX(blength, BLOCK_SIZE);
}
선택한 블록 크기는 사용되는 Unix 유형과 무관합니다.