私は2台の異なるコンピュータで使用される大容量ファイル(2〜3GB、バイナリ、文書化されていない形式)を持っています(通常はデスクトップシステムで使用されますが、旅行中はラップトップの上に置きます)。 rsync を使用してファイルを前後に転送します。
私は時々このファイルを少しずつ更新しますが、変更された量は100kB未満です。これは両方のシステムで発生します。
私が理解したのは、rsyncの問題は、ソースとターゲットの間でファイルが変更されたと思われる場合はファイル全体を転送することです。私の場合、ファイルの小さな部分が変わると、時間の無駄のように感じました。私はソースとターゲットの転送エージェントが最初にファイル全体をチェックサムし、結果を比較するプロトコルを想定します。彼らはファイル全体のチェックサムが異なることに気づき、ファイルをAとBの2つの部分に分割し、別々にチェックサムを計算しました。
ああ、Bは両方のコンピュータで同じです。その半分は無視しましょう。ここで、AをA1とA2に分割します。ところでA2だけ変わりました。 A2をA2IとA2IIに分割して比較などを行います。たとえば、ソースとターゲットが3つの異なるセクション(それぞれ1 MB)を見つけるまでこの操作を繰り返し実行し、そのセクションのみを転送してターゲットファイルの正しい場所に挿入します。今日の高速SSDとマルチコアCPUを使用すると、これらの並列化は非常に効率的です。
だから私の質問は、今日このように動作する(または想像することはできませんが、同様の結果を提供する他の方法で)使用できるツールはありますか?
説明要求が発行されました。私は主にMacを使用しているので、ファイルシステムはHFS +です。通常、私はこのようにrsyncを起動します。
rsync -av --delete --progress --stats
- この場合、SSHを使用する場合もあり、rsyncdを使用する場合もあります。 rsyncdを使用するときは、次のように起動しますrsync --daemon --verbose --no-detach
。
2番目の説明:小さな変更がある両方の場所に存在するファイルのデルタのみを送信するか、rsyncが実際にこの機能を提供するツールを要求します。 rsyncの私の経験は、ファイル全体を転送することです(しかし、これを説明する答えは次のとおりです。rsyncは、デルタのみを転送するためにrsyncサーバーが必要です。そうしないと(ssh-shellを使用するなど)、ファイル全体を送信しますが、多くの場合変更されました)。
ベストアンサー1
Rsyncはデルタを使用しませんが、単一のプロセスとしてソースファイルとターゲットファイルを担当する場合は、ファイル全体が転送されます。ソースコンピュータとターゲットコンピュータで別々のクライアントプロセスとサーバープロセスが実行されている場合は、デルタを転送できます。
rsyncが唯一のプロセスでデルタを送信しないのは、デルタを送信するかどうかを決定するためにソースファイルとターゲットファイルを読み取る必要があるためです。完了したら、ファイルを直接コピーできます。
このコマンド形式を使用する場合、rsyncプロセスは1つだけです。
rsync /path/to/local/file /network/path/to/remote/file
このコマンド形式を使用すると、2つのrsyncプロセス(ローカルホストとリモートホストに1つずつ)があり、増分を使用できます。
rsync /path/to/local/file remote_host:/path/to/remote/file