rsyncは2つのローカルドライブ間でコピーされたファイルを検証しますか?


65

あるローカルドライブから別のローカルドライブに大量のファイルの新しいコピーを作成したい。

ネットワーク経由でリモートマシンにファイルを送信するときに、rsyncがファイルのチェックサム比較を行うことを読みました。

  1. rsyncは、2つのローカルドライブ間でファイルをコピーするときに比較を行いますか?

  2. 検証を行う場合-安全な賭けですか?または、バイトごとの比較を行う方が良いですか?

回答:


77

rsyncは常にチェックサムを使用して、ファイルが正しく転送されたことを確認します。宛先ファイルがすでに存在する場合、変更時間とサイズがソースファイルと一致する場合、rsyncはファイルの更新をスキップしますが、rsyncがデータを転送する必要があると判断した場合、送信と受信rsyncプロセス間で転送されるデータで常にチェックサムが使用されます。これにより、ネットワークを介したバイトレベルの比較による大きなオーバーヘッドなしで、受信したデータが高い確率で送信されたデータと同じであることを確認できます。

ファイルデータを受信すると、rsyncはデータをファイルに書き込み、カーネルが書き込みの成功を示した場合、データが破損せずにディスクに書き込まれたことを信頼します。rsyncはデータを再読み取りせず、追加のチェックとして既知のチェックサムと比較しません。

検証自体に関しては、プロトコル30以降(3.0.0で最初にサポート)で、rsyncはMD5を使用します。古いプロトコルの場合、使用されるチェックサムはMD4です。

セキュリティで保護された暗号化ハッシュでは時代遅れと考えられてきましたが、MD5とMD4はファイルの破損をチェックするのに十分です。

ソース:確認するために、manページとrsyncソースコードを確認します。


3
私はみんなのバブルを破裂させたくありませんが、rsyncは-cフラグが追加された場合にのみチェックサム検証を行います!

27
@clintいいえ、答えは正しいです。-cフラグのマニュアルページの説明から:「rsyncは、ファイルが転送されるときに生成されるファイル全体のチェックサムをチェックすることにより、転送された各ファイルが受信側で正しく再構築されたことを常に確認しますが、検証は、このオプションの転送前の「このファイルを更新する必要がありますか?」チェックとは関係ありません。
マイケルMrozek

7
この回答では、コピー後に実際にファイルを検証するかどうかは明確になりません。ファイルの受信中にチェックサムが計算された場合、それはコピー後のチェックサムではなく、ファイルが正しく書き込まれていることを確認できません。その後、追加の比較を実行する必要があります。
アンドレミラー

7
なぜなら、この答えがきちんと書かれていて、技術的に正確であると同時に、読者から誤解を招くほど話題を逸しているという事実が好きではないからです。問題は、回答者が転送中に何が起こるかについて非常に詳細になり、質問者ネットワーク転送ではなくローカルコピーに関心があることを明確に述べていることです。カイル・ジョーンズは誰にも誤解を与えたくなかったが、この答え(私見)はそうだと確信している。
-ndemou

4
カイルあなたの答えが間違っているとは思わない。私はすでにそれが「詳細に書かれていて技術的に正しい」と述べましたが、それは読者が不必要に集中し注意することを必要とします。他の無関係な検証プロセスを繰り返し説明する117の単語の後、回答の途中で質問されているディスクデータの検証の欠如をカバーするのはなぜですか?とにかく、この議論に時間と関心をお寄せいただきありがとうございます。心から感謝しています。
ndemou

40

rsyncローカルファイルコピーのコピー後の検証行いませrsync大きなファイルを低速(USB)ドライブにコピーしてから、同じファイルをcpでコピーすることで、それが機能しないことを確認できます。

time rsync bigfile /mnt/usb/bigfile

time cp bigfile /mnt/usb/bigfile

両方のコマンドにかかる時間はほぼ同じです。したがってrsync、低速ディスクから宛先ファイルを再読み取りする必要があるため、チェックサムを実行することはできません。

このmanページは残念ながら誤解を招きます。また、これを検証しましstraceた。コピーが完了した後、宛先ファイルで呼び出しをrsync発行しないread()ため、チェックサムできません。もう1つ確認できるのは、次のようなものですiotoprsync読み取りと書き込みを同時に行っている(ソースから宛先へのコピー)のを確認してから終了します。整合性を検証している場合、読み取り専用フェーズがあります。


1
「残念ながら、manページはこれについて誤解を招きます。また、straceでこれを検証しました」リモートのrsyncプロセスまたはローカルの実行プロセスをトレースしましたか?2つあります... sshを使用する場合でも、1つは宛先で実行されます。
user129070

8
ローカルまたはリモートのコピーには、コピー後の検証はありません。rsync -cチェックを強制する場合は、再度実行します。
-psusi

検証は、着信ストリームで実行されます。ファイルシステムが書き込み済みであることをファイルシステムが確認した場合、ディスクから読み戻す必要はありません。
停止ハーミングモニカ

17

rsyncコピーの前にチェックサムの比較を行い(場合によって)、すでに存在するものをコピーしないようにします。チェックサム比較のポイントは、コピーが成功したことを確認することではありません。これは、基盤となるインフラストラクチャの仕事です。ファイルシステムドライバー、ディスクドライバー、ネットワークドライバーなどrsyncです。このような狂気を気にする必要のない個々のアプリケーション。すべてはrsyncエラーがなかったことを確認するために呼び出しを行う必要がある(としません!)システムの戻り値をチェックすることです。


1
これは受け入れられた答えと矛盾するようです
...-djule5

2
@ djule5どのように?受け入れられた答えは、主にrsyncが転送されたファイルをチェックする方法に関するもののようですが、質問と私の答えはローカルコピーに関するものです。
ジル「悪さSO-ストップ」

3
わかりました、その文脈でそれはより理にかなっていることに同意します。したがって、「チェックサム比較のポイントは、コピーが成功したことを確認することではありません」は、ローカルコピーにのみ当てはまります。また、「送信rsyncプロセスと受信rsyncプロセス間で転送されるデータで常にチェックサムが使用される」は、転送されたコピーにのみ当てはまります。私が見つけ受け入れ答え質問に関して誤解をし、あなたの答えは受け入れ1(ちょうど私の2セント)であるべきと考えています。
djule5

私はまだこの答えが少し誤解を招くと感じています。たとえば、特にネットワークドライバーはコピーが成功したかどうかを確認すると言います-ただし、チェックサム比較がコピーがローカルのみで成功したかどうかを確認しないと言っている場合、ネットワークドライバーは機能しません。
ケン

1
@Ken私はあなたがしようとしているポイントを理解していません。何かを間違えたようです。ネットワークドライバーが機能するのは、ネットワークコピーがある場合のみです。Rsync自体は、コピーするかどうかを決定するために、コピーを行う前にチェックサム比較を行います。Rsyncはコピー後にチェックサム比較を行いません(無意味だからです:コピーされたばかりのものを知っています)。
ジル 'SO-悪であるのをやめる'

4

質問への直接の迅速で汚い答え。

Q:rsync2つのローカルドライブ間でファイルをコピーするときに比較を行いますか?A:何をコピーするかを判断するために比較を行います。

Q:検証を行う場合-安全な賭けですか?または、バイトごとの比較を行う方が良いですか?A:ファイルのMD5チェックサムの背後にある数学と同じくらい安全です。ツールを学び、信頼するための簡単な実験を試みることができます。

長い答え:rsyncファイルをコピーした後、ファイル比較(ビット単位またはチェックサム単位)を実行したいと思います。あなたがデータの整合性を重視する数少ない人の1人であるなら、以下が役に立つでしょう:

rsync -avh [source] [destination] && rsync -avhc [source] [destination] 

上記のコードrsyncファイルフォルダーは最初の実行時に問題なく完了した場合rsync、ファイル全体のハッシュを使用して同じファイル名の比較を実行しながらすぐに再度実行されます。


1

rsyncを使用して複製の整合性を検証する

このテストがドライブメディアからファイルを物理的に再読み取りすることを保証するには、このテストを実行する前に両方のドライブの電源を切り、再起動することをお勧めします。これにより、内部の揮発性キャッシュがクリアされます。

Linuxも再起動しない場合、少なくともキャッシュ(*)をドロップする必要があります。

sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

次に、両方のツリーを再度読み取り、チェックサムを比較します。

rsync --dry-run --checksum --itemize-changes --archive SRC DEST

最新のrsyncチェックサムはMD5(128ビット)を使用します。これが個々のファイルのエラーを検出できない可能性は天文学的に低い(ここでの議論)が、不可能ではない。



末尾のスラッシュを正しく取得してください。
nobar

良いニュースはありません。
nobar

--checksumそれなしでテストに合格するまで気にしないでください。
nobar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.