--checksumオプションと--ignore-timesオプションのRsyncの違い


96

誰でもrsyncのオプション--checksum--ignore-timesオプションの違いを明確にできますか?

私の理解は次のとおりです。

--checksum
ファイルのサイズと時間が一致する場合、両端でチェックサムを実行して、ファイルが実際に同一であるかどうかを確認します。

--ignore-times
ファイル時間が両端で同じかどうかに関係なく、すべてのファイルを「転送」します。デルタ転送アルゴリズムが引き続き使用されるため、ファイルが実際に同一である場合、何も転送されません。

それは技術的な違いですが、私が知る限り、それらは意味的には同じものです。

だから、私が思っているのは:

  • 2つのオプションの実際の違いは何ですか?
  • どのような場合に、他ではなく一方を使用しますか?
  • それらの間にパフォーマンスの違いはありますか?

回答:


99

通常、rsyncソース側と宛先側でファイルのサイズと時間が同じ場合、ファイルをスキップします。これはrsync、ソース側と宛先側で同じ可能性が非常に高いファイルの内容を調べる必要がないため、通常は良いアイデアであるヒューリスティックです。

--ignore-timesrsyncファイルの時間とサイズのヒューリスティックをオフにするように指示します。したがって、すべてのファイルをソースから宛先に無条件に転送します。オプションが指定さrsyncれたかどうかに応じて、デルタ転送アルゴリズムを使用するか、すべてのファイル全体を単に送信する必要があるため、ソース側のすべてのファイルの読み取りに進み--whole-fileます。

--checksumまた、ファイルの時間とサイズのヒューリスティックも変更しますが、ここでは時間を無視してサイズのみを調べます。サイズが異なるソース側と宛先側のファイルは、明らかに異なるため転送されます。同じサイズのファイルはチェックサムされ(rsyncバージョン3.0.0+のMD5 、または以前のバージョンのMD4)、合計が異なることが判明したファイルも転送されます。

ソース側と宛先側がほとんど同じ--checksum場合、ほとんどのファイルが両側でチェックサムされます。これには長い時間がかかる可能性がありますが、結果は、特にデルタ転送アルゴリズムが使用されている場合、実際には最小のデータが実際に回線上で転送されることです。もちろん、これは非常に遅いネットワークや非常に速いCPUを持っている場合にのみ勝利です。

--ignore-times一方、ネットワークを介してより多くのデータを送信し、すべてのソースファイルを読み取りますが、少なくとも、ソースおよび宛先CPUで多くの暗号強度の高いハッシュサムを計算する追加の負荷を課すことはありません。このオプション--checksumは、ネットワークが高速である場合や、CPUが比較的遅い場合よりもパフォーマンスが向上すると予想されます。

私は私が今までにのみ使用と思います--checksumか、--ignore-times私はそれはいくつかのファイルの内容が破損したことが疑われた宛先にファイルを転送している場合、しかし、その修正時刻は変更されませんでした。おそらく他のユースケースもありますが、私はどちらのオプションを使用する他の正当な理由を本当に考えることはできません。


12
バックアップの検証に--checksum役立つと思いました--itemize-changes。現在の毎日/毎週の更新が完了した後、バックアップスクリプトはこの方法で完全に比較することがあります。--itemize-changes予期しないものが出力された場合、緊急とマークされた電子メールがドロップされるため、調査する必要がある潜在的な問題があることがわかります。
デビッドスピレット

10
--checksumは、Gitで作業し、ファイルが変更されたブランチを切り替えるときに役立ちます。これにより、特定のブランチから送信するつもりのないファイルの更新時間が常に変更されます。
FriendlyDev

6
--ignore-times--checksumデフォルトではファイルのタイムスタンプは更新されないため、「ファイル」の1つがTruecryptファイルコンテナの場合は特に必要です。参照productforums.google.com/forum/#!topic/drive/gnmDp3UXEgsask-leo.com/why_wont_my_truecrypt_volume_backup.html
マーカスJUNIUSブルータス

注:簡単な実験を行いましたが、ctimeは比較されず、mtimeのみが比較されます。Macでは、少なくとも。これは知っておくと便利です。Windowsファイルシステムには、atime、mtime、およびctimeで同じ時間(ctime)が報告されるという非常に多くの問題があります。
エドワードフォーク

--checksum宛先マシンまたは宛先ディレクトリ内のすべてのファイルのチェックサムのみソースファイル名を?
グレッグ

17

チェックサムは、タイムスタンプが保持されていない別のシステムを使用してファイルを同期している場合にも役立ちます。チェックサムは、異なるファイルのみを転送し、受信側のすべてのタイムスタンプを更新して、それらが一致するようにします


4

1つの詳細:チェックサムオプションは、一方のファイル全体をチェックし、もう一方のファイル全体をチェックします。ファイルが多少大きい場合、この種の方法は並列処理を無効にします。

また、巨大なファイルがある場合--checksum、を使用しないとタイムアウトが発生する可能性が高くなります-I


2

からinfo rsyncに関しては--checksumオプション- 「接続の両側ですべてのファイルのこの全体のファイルのチェックサムは、ファイルの転送中に発生する自動チェックサムの検証に加えて発生するので、このオプションは非常に遅くなることがあります。」


1
その文は私のマニュアルページにないようです...だから、それはチェックサムオプションがファイルが同一であるかどうかを識別するためにチェックサムを使用し、そうでない場合は転送することを意味し、したがってチェックサムを再び生成します譲渡の一部ですか?--ignore-timesオプションはチェックをスキップし、変更されたと仮定しますか?したがって、パフォーマンス面では--ignore-timesは同じことを達成するためのより良い方法ですか?私はまだ2つの異なるオプション(離れて--checksumがより透明であることから)がある理由を確認するために苦労しています
アンディ・マッジ

あなたは、最新のドキュメントの編集をご覧ください:gitweb.samba.org/...
アレクサンドルLevchuk

2

この--ignore-timesオプションにより、おそらくすべてのファイルがデルタエンコードされ、デルタ転送アルゴリズム(デルタエンコーディング)は少なくともチェックサムと同じくらい遅くなります。

--ignore-timesデルタ転送によって何も転送されないことが頻繁に発生する場合に、「同期後の自動検証」を回避するのにrsync が十分賢いかどうかはわかりません。

のために--ignore-times

  • rsyncがスマートでない(またはデルタエンコーディングを信頼しない)場合、チェック(チェックサムとエンコーディング)は2回行われます。
  • また、128ビットのMD4チェックサムよりもデルタエンコードがはるかに遅い場合もあります。

--checksum--ignore-timesは両方とも「かなり遅い」が--ignore-times、おそらくもっと遅い(上記の2つの可能性のため)。

良い質問です。実際にパフォーマンスの違いを見つけたら投稿してください。


意味がわかります。いくつかのテストを実行して、ポストバックします。
アンディマッジ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.