scpが完了したら、ファイルの破損をチェックする必要がありますか?


17

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

scp -rp /source/folder myremoteusername@122.10.12.123:/destination/folder

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


stderrからゼロ以外の終了ステータスscpとそれに付随するエラーメッセージを取得しない限り、すべてが正しく完全にコピーされます。
ロアイマ

私の投稿への少しのtl; dr:rsync可能であれば使用します。トランザクションが終了した後、すべてのファイルの検証をコピーするため、少し安全にするためにそれを使用することをお勧めします。
ポレモン

回答:


24

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

ただし、問題が発生したことをscp伝えていないことを確認する必要があります。エラーメッセージが表示されますが、信頼性の高いインジケータは、scp何か問題が発生した場合にゼロ以外の終了コードを返すことです。

より正確には、scp0(つまり、成功ステータスコード)を返す場合、ファイルが正しく送信されたことを知っています。とにかくコマンドを実行するときは、終了ステータスが0であることを確認する必要があります。scpエラーステータスを返す場合、シグナルによって強制終了された場合、または実行中にシステムがクラッシュしたり電源が失われたためにエラーが発生しない場合、保証はありません。特に、scpファイルを最終的な名前に直接コピーするため、これは、システムがクラッシュした場合に部分的なファイルになる可能性があることを意味します。コピーされた部分は正しいことが保証されていますが、ファイルは切り捨てられる場合があります。

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


3

私がscp何かをした後、破損の問題は一度もありませんでしたが、心配であればmd5sum <filename>、両方のシステムで常に実行して、それらが同じであることを確認できます。


3

@ david-kingの提案によると、これはmd5転送後のファイルの整合性をチェックするためのベースのソリューションです。ローカルマシンでにアクセスした後、リモートホストでにcdアクセスし/source/folderた後に、次のコマンドを1回実行します。転送が成功すると、結果のハッシュは同一になります。cd/destination/folderfind . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum

更新: ServerFaultに関する同様の質問に対するこの回答によると、ファイルの整合性は保証されませんscp(詳細については、@ Gillesによるこの回答を確認してください)。ファイルハッシュの転送後チェックの代わりに、ファイルrsyncを転送してそのリターンコードをチェックするために使用できます。

更新2:以下は、転送後にファイルとそれぞれのサイズが一致するかどうかのみをチェックします。find . -type f -print0 | xargs -0 -I {} stat --printf="%n %s\n" {} | sort | md5sum


2
scpが0を返す場合、整合性保証されています。さらに、scpが0を返さない場合、問題は一般的な破損ではなく、特に切り捨てです。ファイルサイズの確認で十分です(ターゲットファイルの古いバージョンが既に存在しない場合:scpが非常に早く中断された場合、古いバージョンが存在する可能性があります)。ここでチェックサムを確認するのは時間の無駄です。
ジル 'SO-悪である停止

まあ 回答を更新しました。
マニM

基本的な欠陥は修正しませんでした。チェックscpのリターンコードは十分です、とハッシュをチェックすることは無意味です。
ジル 'SO-悪である停止

1
scp0を返したとしても、ファイルシステムが混乱しないことを保証するものではないため、誰かがscpover を使用することを選択した場合、ハッシュのチェックは機密データの整合性をチェックするのに役立ちますrsync
マニM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.