手動でファイルをコピーした後、rsync がファイルをコピーするのはなぜですか?

手動でファイルをコピーした後、rsync がファイルをコピーするのはなぜですか?

私は、bash を使用して、ext4 の場所から別の場所に、多数のフォルダー (約 54 GB) にある多数のファイルをコピーしましたcp ~/1 ~/2 -d -r -v -i。その後、すべてのファイルが正しくコピーされたことを確認したかったので、 を実行しましたrsync --delete -vturOn ~/1 ~/2が、rsync はすべてのファイルをコピーしようとしました。なぜでしょうか?

cp追記: を使用するつもりでした-aが、-d誤って使用しました。

編集: 回答ここ--itemize-changesすべてのファイルを表示するフラグを使用するように指示されました>f..t......。マニュアル ページには、t平均変更時刻が異なり、type-files はファイル ( f) であり、アイテム属性のみが変更されている ( .) と記載されています。これは正しいですか? 変更されるのは変更時刻だけですか?

編集: を実行しましたrsync( なし-n)。t変更時刻が異なるにもかかわらず、すべてのファイル (実際のファイル コンテンツ) が再度コピーされました。これは予期しない結果です。rsync はいずれにしても diff コピーを実行する必要があるためです。これは注目すべき点です。

編集: 同期を停止し、-tパラメータなしで再実行しました。これで、項目別変更には ではなく 'T' が表示されましたt。今後これらのファイルで rsync を使用する場合は、すべてのファイルを少なくとも 1 回は rsync 経由でコピーする必要があるようです。

編集: 対象ファイルを削除し、-vanパラメータ付きで rsync を使用してすべてを再度コピーしました。

答え1

rsync ドキュメントより:

Rsync は、サイズまたは最終更新時刻が変更されたファイルを検索する「クイック チェック」アルゴリズム (デフォルト) を使用して、転送する必要があるファイルを検索します。

また、ソースとターゲットの両方がローカルの場合、デフォルトでオプションrsyncを使用して実行されます--whole-file

-W, --whole-file

このオプションを使用すると、rsync のデルタ転送アルゴリズムは使用されず、ファイル全体がそのまま送信されます。ソース マシンと宛先マシン間の帯域幅がディスクへの帯域幅よりも高い場合 (特に「ディスク」が実際にはネットワーク ファイル システムである場合)、このオプションを使用すると転送が高速化される可能性があります。これは、ソースと宛先の両方がローカル パスとして指定されている場合のデフォルトですが、バッチ書き込みオプションが有効になっていない場合に限ります。

よく分かりませんが、そのオプションが必要なようです--checksum

-c, --checksum              skip based on checksum, not mod-time & size

チェックサムを計算するには、ソース ファイルとターゲット ファイルの両方をディスクから読み取る必要があることに注意してください。

詳細は以下をご覧ください。

https://superuser.com/a/118984/219809

https://serverfault.com/a/279346

関連情報