小さいファイルから中程度の違いを持つ巨大なファイルまたはブロックデバイスを同期するには、プレーンコピーを実行するか、bdsyncを使用します。rsyncはこの特定のケースにはまったく適合しません*。
bdsync
私のために働いた、十分に成熟したようだ、それはバグの歴史が勇気づけられている(小さな問題、迅速な解決)。私のテストでは、速度は理論上の最大値に近かった**(つまり、ファイルを読むのに必要な時間で同期できる)。最後に、それはオープンソースであり、費用はかかりません。
bdsync
両方のホストからファイルを読み取り、チェックサムを交換してそれらを比較し、違いを検出します。これらすべてを同時に。最後に、ソースホスト上に圧縮パッチファイルを作成します。次に、そのファイルを宛先ホストに移動し、bdsyncを2回実行して宛先ファイルにパッチを適用します。
かなり高速なリンク(100Mbitイーサネットなど)で使用し、小さな違いのあるファイル(VMディスクでよくあることです)で使用する場合、ファイルの読み取りに必要な時間に同期する時間を短縮します。低速リンクでは、1つのホストから別のホストに圧縮された変更をコピーする必要があるため、もう少し時間が必要です(素晴らしいトリックを使用して時間を節約できるようですが、テストしていません)。
*:rsyncは巨大なファイルでは非常に非効率的です。--inplaceを使用しても、宛先ホスト上のファイル全体を最初に読み取り、その後、ソースホスト上のファイルの読み取りを開始し、最後に差分を転送します(rsyncおよびobserveの実行中にdstatなどを実行するだけです)。その結果、わずかな違いのあるファイルであっても、同期するためにファイルを読み取るのに必要な時間の約2倍の時間がかかります。
**:ファイルのどの部分が変更されたかを伝える他の方法がないという仮定の下で。LVMスナップショットはビットマップを使用して変更されたブロックを記録するため、非常に高速になります(lvmsyncのreadmeに詳細があります)。