scpが完了した後にファイルが破損していることを確認する必要がありますか?

scpが完了した後にファイルが破損していることを確認する必要がありますか?

scp次のコマンドを使用して、多くのファイルとフォルダを再帰的に転送しました。

scp -rp /source/folder [email protected]:/destination/folder

scp転送が完了した後、すべてのファイルが破損せずに転送されたかどうかを確認する必要があります(ファイルが正しく転送されていない場合は、いくつかのエラーメッセージが表示されます)。

答え1

scp相手が送信したすべてのデータをコピーしたことを確認してください。転送の整合性は、暗号化されたチャネルプロトコルによって保証されます。したがって、転送後に整合性を確認する必要はありません。比較するデータはおそらくキャッシュから読み取られるため、これは冗長であり、ハードウェアエラーをキャッチする可能性が低くなります。定期的にデータを検証することは便利ですが、転送後すぐに検証することは意味がありません。

scpしかし、これが何かが間違っていることを知らせていないことを確認したいと思います。エラーメッセージが必要ですが、scp何かが間違っている場合はゼロ以外の終了コードが返されることが信頼できる指標です。

scpより正確には、0(つまり成功ステータスコード)を返すと、ファイルが正しく転送されたことがわかります。終了ステータスが 0 であることを確認してください。それにもかかわらず、コマンドを実行するときに必要です。エラー状態を返したりscp、信号でシャットダウンしたり、システムのクラッシュや実行時に電力損失によってシャットダウンしない場合は保証できません。特に、scpファイルは最後の名前まで直接コピーされるため、システムがクラッシュしたときに部分的なファイルのみが残る可能性があります。コピーされた部分は正しいことが保証されますが、ファイルが切り捨てられる可能性があります。

安定性を高めるには、scpの代わりにrsyncを使用してください。特に指示がない限り、rsync は一時ファイルに書き込み、完了するとそのファイルを所定の位置に移動します。したがって、rsyncが成功コードを返すと、ファイルが存在し、正確で完全なコピーであることがわかります。 rsyncがエラーコードを返さない場合、ファイルは存在しません(この場合、以前のバージョンのファイルが存在しない限り)。以前のバージョンは変更されません)。

答え2

私は損傷の問題を経験したことがありませんが、scp心配な場合は、いつでもmd5sum <filename>両方のシステムで実行して同じことを確認できます。

答え3

@david-kingが提案したように、md5転送後のファイルの整合性を確認するための基本的なソリューションは次のとおりです。ローカルコンピュータで一度、cdリモートホストで一度次のコマンドを実行します。正常な送信後、結果のハッシュ値は同じでなければなりません。/source/foldercd/destination/folderfind . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum

修正する: ~によるとこの回答エマルジョンサーバー障害scpファイルの整合性を保証しません(確認してくださいこの回答詳細は、@Gillesが書いた)転送後にファイルのハッシュをチェックするだけでなく、ファイルを転送して戻りコードをrsync確認するためにも使用できます。

アップデート2:以下は、転送後のファイルとそのサイズが一致することを確認します。find . -type f -print0 | xargs -0 -I {} stat --printf="%n %s\n" {} | sort | md5sum

関連情報