私は、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
チェックサムを計算するには、ソース ファイルとターゲット ファイルの両方をディスクから読み取る必要があることに注意してください。
詳細は以下をご覧ください。