rsync 中的默认块大小是多少

rsync 中的默认块大小是多少

rsync 中的默认块大小是多少?

如果我在不提供--block-size选项的情况下执行 rsync 那么块大小有什么用?

我在 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/尽管它很旧并且没有详细介绍如何选择块大小,只是“S 的值在 500 到 1000 之间对于大多数用途来说都很好”(这些值不是代码中实际使用的值,请参阅以下)。

实际中的一些评论源代码显示文件大小的平方根用作块大小(四舍五入到 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 类型无关。

相关内容