回答:
rsyncは常にチェックサムを使用して、ファイルが正しく転送されたことを確認します。宛先ファイルがすでに存在する場合、変更時間とサイズがソースファイルと一致する場合、rsyncはファイルの更新をスキップしますが、rsyncがデータを転送する必要があると判断した場合、送信と受信rsyncプロセス間で転送されるデータで常にチェックサムが使用されます。これにより、ネットワークを介したバイトレベルの比較による大きなオーバーヘッドなしで、受信したデータが高い確率で送信されたデータと同じであることを確認できます。
ファイルデータを受信すると、rsyncはデータをファイルに書き込み、カーネルが書き込みの成功を示した場合、データが破損せずにディスクに書き込まれたことを信頼します。rsyncはデータを再読み取りせず、追加のチェックとして既知のチェックサムと比較しません。
検証自体に関しては、プロトコル30以降(3.0.0で最初にサポート)で、rsyncはMD5を使用します。古いプロトコルの場合、使用されるチェックサムはMD4です。
セキュリティで保護された暗号化ハッシュでは時代遅れと考えられてきましたが、MD5とMD4はファイルの破損をチェックするのに十分です。
ソース:確認するために、manページとrsyncソースコードを確認します。
-c
フラグのマニュアルページの説明から:「rsyncは、ファイルが転送されるときに生成されるファイル全体のチェックサムをチェックすることにより、転送された各ファイルが受信側で正しく再構築されたことを常に確認しますが、検証は、このオプションの転送前の「このファイルを更新する必要がありますか?」チェックとは関係ありません。
rsync
ローカルファイルコピーのコピー後の検証は行いません。rsync
大きなファイルを低速(USB)ドライブにコピーしてから、同じファイルをcp
でコピーすることで、それが機能しないことを確認できます。
time rsync bigfile /mnt/usb/bigfile
time cp bigfile /mnt/usb/bigfile
両方のコマンドにかかる時間はほぼ同じです。したがってrsync
、低速ディスクから宛先ファイルを再読み取りする必要があるため、チェックサムを実行することはできません。
このman
ページは残念ながら誤解を招きます。また、これを検証しましstrace
た。コピーが完了した後、宛先ファイルで呼び出しをrsync
発行しないread()
ため、チェックサムできません。もう1つ確認できるのは、次のようなものですiotop
:rsync
読み取りと書き込みを同時に行っている(ソースから宛先へのコピー)のを確認してから終了します。整合性を検証している場合、読み取り専用フェーズがあります。
rsync -c
チェックを強制する場合は、再度実行します。
rsync
コピーの前にチェックサムの比較を行い(場合によって)、すでに存在するものをコピーしないようにします。チェックサム比較のポイントは、コピーが成功したことを確認することではありません。これは、基盤となるインフラストラクチャの仕事です。ファイルシステムドライバー、ディスクドライバー、ネットワークドライバーなどrsync
です。このような狂気を気にする必要のない個々のアプリケーション。すべてはrsync
エラーがなかったことを確認するために呼び出しを行う必要がある(としません!)システムの戻り値をチェックすることです。
質問への直接の迅速で汚い答え。
Q:rsync
2つのローカルドライブ間でファイルをコピーするときに比較を行いますか?A:何をコピーするかを判断するために比較を行います。
Q:検証を行う場合-安全な賭けですか?または、バイトごとの比較を行う方が良いですか?A:ファイルのMD5チェックサムの背後にある数学と同じくらい安全です。ツールを学び、信頼するための簡単な実験を試みることができます。
長い答え:rsync
ファイルをコピーした後、ファイル比較(ビット単位またはチェックサム単位)を実行したいと思います。あなたがデータの整合性を重視する数少ない人の1人であるなら、以下が役に立つでしょう:
rsync -avh [source] [destination] && rsync -avhc [source] [destination]
rsync
ファイルフォルダーは最初の実行時に問題なく完了した場合rsync
、ファイル全体のハッシュを使用して同じファイル名の比較を実行しながらすぐに再度実行されます。このテストがドライブメディアからファイルを物理的に再読み取りすることを保証するには、このテストを実行する前に両方のドライブの電源を切り、再起動することをお勧めします。これにより、内部の揮発性キャッシュがクリアされます。
Linuxも再起動しない場合、少なくともキャッシュ(*)をドロップする必要があります。
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
次に、両方のツリーを再度読み取り、チェックサムを比較します。
rsync --dry-run --checksum --itemize-changes --archive SRC DEST
最新のrsyncチェックサムはMD5(128ビット)を使用します。これが個々のファイルのエラーを検出できない可能性は天文学的に低い(ここでの議論)が、不可能ではない。
--checksum
それなしでテストに合格するまで気にしないでください。