この質問を改善したいですか? この投稿を編集して、詳細を追加し、問題を明確にしてください。
6年前に閉鎖されました。
この質問を改善する
2台の異なるコンピューターで使用する大きなファイル(2〜3 GB、バイナリ、文書化されていない形式)があります(通常はデスクトップシステムで使用しますが、旅行するときはラップトップに置きます)。このファイルを前後に転送するためにrsyncを使用しています。
私は時々このファイルに小さな更新を行い、100kB未満しか変更しません。これは両方のシステムで発生します。
私が理解しているrsyncの問題は、ファイルがソースと宛先の間で変更されたと思われる場合、完全なファイルを転送することです。私の状況では、ファイルのごく一部に変更が加えられると、時間の無駄のように感じます。ソースと宛先の転送エージェントが最初にファイル全体をチェックサムし、次に結果を比較するプロトコルを想定しています。ファイル全体のチェックサムが異なることに気付いた場合、ファイルをAとBの2つの部分に分割し、別々にチェックサムします。
ああ、Bは両方のマシンで同じです。その半分は無視しましょう。これで、AがA1とA2に分割されます。はい、A2のみが変更されました。 A2をA2IとA2IIに分割し、比較します。たとえば、ソースと宛先でそれぞれ1 MBが異なる3つのパーツが見つかるまでこれを再帰的に実行し、これらのパーツだけを転送して、宛先ファイルの正しい位置に挿入します。今日、高速SSDとマルチコアCPUを使用すると、このような並列化は非常に効率的になるはずです。
ですから、私の質問は、このように機能する(または私が想像できなかったが同様の結果をもたらす別の方法で)今日利用できるツールはありますか?
説明のリクエストが投稿されました。私は主にMacを使用しているため、ファイルシステムはHFS+です。通常、私はこのようにrsyncを開始します
rsync -av --delete --progress --stats
–この場合、SSHとrsyncdを使用することがあります。 rsyncdを使用するときは、次のように起動しますrsync --daemon --verbose --no-detach
。
2番目の説明:2つの場所に小さな変更を加えて存在するファイルのデルタを転送するだけのツールか、rsyncが実際にこれを提供するかどうかを尋ねます。 rsyncでの私の経験では、ファイルを完全に転送します(ただし、これを説明する答えがあります:rsyncは、デルタのみを転送できるようにするためにrsyncサーバーが必要です。そうでない場合(たとえば、ssh-shellを使用して)、全体を転送します。ただし、ファイルは大幅に変更されています。
関連:いつ追加のファイル記述子を使用しますか?承認された回答:
Rsyncはデルタを使用しませんが、単一のプロセスとしてソースファイルと宛先ファイルを担当する場合は、ファイル全体を送信します。ソースマシンと宛先マシンで別々のクライアントプロセスとサーバープロセスが実行されている場合、デルタを送信できます。
rsyncが唯一のプロセスである場合にデルタを送信しない理由は、デルタを送信する必要があるかどうかを判断するために、ソースファイルと宛先ファイルを読み取る必要があるためです。完了するまでに、ファイルを直接コピーしたほうがよいかもしれません。
この形式のコマンドを使用している場合、rsyncプロセスは1つだけです:
rsync /path/to/local/file /network/path/to/remote/file
この形式のコマンドを使用している場合は、2つのrsyncプロセス(1つはローカルホストに、もう1つはリモートに)があり、デルタを使用できます:
rsync /path/to/local/file remote_host:/path/to/remote/file