rsyncのデフォルトのブロックサイズは何ですか?
オプションを指定せずにrsyncを実行すると、--block-size
ブロックサイズはどのように使用されますか?
Linuxプラットフォームでrsyncを使用しています。
答え1
--block-size=BLOCKSIZE
コマンドラインで指定すると、対応するブロックサイズが使用されます。- ファイルサイズが490,000バイト以下の場合、ブロックサイズは700バイトに設定されます。
- ファイルが490,000バイトより大きい場合、ブロックサイズはファイルサイズの平方根(8の倍数に丸め)に設定され、最大ブロックサイズはプロトコルバージョンによって異なります。
- プロトコルバージョン<30の場合、最大ブロックサイズは536,870,912(〜536 MB)です。
- プロトコルバージョン> = 30の場合、最大ブロックサイズは131,072(〜131 KB)で、これはより合理的です。
- 17GBファイル(131KBの2乗)の場合、最大ブロックサイズは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のタイプとは無関係です。