あるローカルドライブから別のドライブに大量のファイルをコピーしたいと思います。
rsyncは、ファイルをネットワーク経由でリモートシステムに送信するときにファイルのチェックサム比較を実行することを読みました。
2つのローカルドライブ間でファイルをコピーすると、rsyncが比較されますか?
それが検証されたら - 安全な賭けですか?それともバイト単位で比較する方が良いですか?
答え1
rsync は常にチェックサムを使用して、ファイルが正しく転送されたことを確認します。ターゲットファイルがすでに存在する場合は、変更時間とサイズがソースファイルと一致する場合、rsyncはファイルの更新をスキップできますが、rsyncがデータを送信する必要があると判断した場合はチェックサムいつもrsyncプロセス間で転送されるデータの送受信に使用されます。これは、受信データがネットワークを介したバイトレベル比較の過度のオーバーヘッドなしで高い確率で送信されたデータと等しいことを確認します。
ファイルデータを受信した後、rsyncはカーネルが書き込みが成功したとマークすると、データが破損せずにディスクに書き込まれると信じ、データをファイルに書き込みます。 rsync はデータを再読み込みせず、追加のチェックとして知られるチェックサムと比較しません。
認証自体の場合、プロトコル30以降(3.0.0で最初にサポートされている)の場合、rsyncは次のものを使用します。MD5。以前のプロトコルでは、使用されるチェックサムは次のとおりです。MD4。
MD5 と MD4 は、長い間セキュア暗号化ハッシュには廃止されていると考えられてきましたが、それでもファイルの破損を確認するのに十分です。
出典:確認のためのマニュアルページとrsyncソースコードを見る。
答え2
rsync
するいいえローカルファイルのコピーのコピー後の検証。以下を使用して、大容量ファイルを低速(USB)ドライブにコピーし、rsync
同じファイルをコピーしてそうでないことを確認できますcp
。
time rsync bigfile /mnt/usb/bigfile
time cp bigfile /mnt/usb/bigfile
どちらのコマンドもほぼ同じ時間がかかるため、rsync
チェックサムを実行することは、遅いディスクからターゲットファイルを再読み込みすることに関連しているため、不可能です。
残念ながら、このman
ページにはこれに関する誤解を招く可能性があります。私もこれを確認しましたstrace
。コピーが完了すると、ターゲットファイルへの呼び出しは行われないため、rsync
チェックread()
サムを実行できません。以下で確認することもできますiotop
。同時読み取りと書き込み(ソースからターゲットにコピー)を確認してrsync
終了します。整合性を確認する場合は、読み取り専用の手順があります。
答え3
rsync
チェックサム比較の実行今後既存のコンテンツが重複しないようにコピー(場合によっては)します。チェックサム比較の目的は、コピーが成功したことを確認することではありません。これは、ファイルシステムドライバ、ディスクドライバ、ネットワークドライバなどの基本インフラストラクチャのタスクです。このような単一のアプリは、rsync
こういうわけではないことを気にする必要はありません。実行する必要があるすべてのrsync
作業は、システムコールの戻り値を調べてエラーがないことを確認することです。
答え4
rsyncを使用してレプリカの整合性を確認する
このテストがドライブメディアからファイルを物理的に読み取るようにするには、このテストを実行する前に両方のドライブの電源を切り、再起動することをお勧めします。これにより、内部揮発性キャッシュが消去されます。
Linuxを再起動しない場合は、少なくともキャッシュ(*)そして:
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
次に、2つのツリーを再度読み、チェックサムを比較します。
rsync --dry-run --checksum --itemize-changes --archive SRC DEST
最新のrsyncチェックサムは128ビットMD5を使用します。単一ファイルでエラーを検出できない可能性は非常に低いです(いくつかの議論ここ)しかし不可能ではありません。