scpがパケットを失う?

scpがパケットを失う?

先週、200MBのファイルをリモートコンピュータに転送しようとしました。それから30MBファイルを得ました。今日、私はディレクトリ全体のためにscpを試み、多くのファイルを失いました。

scpは正常ですか?これが起こるのを防ぐ方法は何ですか?

編集する:

scpファイルにExpectスクリプトを作成しましたが、関連していますか?

このスクリプトはとても簡単です。

#!/usr/bin/expect
set file [lindex $argv 0];
set ip [lindex $argv 1];
spawn scp -r $file $ip
expect {
    "*password*" {send "password\r"}
    "*(yes/no)?*" {send "yes\r";exp_continue}
}
expect eof

エラーメッセージはありませんが、コピーされていないファイルがありません。

答え1

scp はコピーが正しく行われることを保証しません。どのソフトウェアもコピーが正しく実行されることを保証できません。停電やネットワーク障害、ソースファイルが読み取れなくなったり、ターゲットボリュームがいっぱいになったりする可能性は常に存在します。

ファイルコピーソフトウェアができることは、終了時にコピーが正しいこと、またはソフトウェアがエラーを報告することを保証することです。エラーを確認する信頼できる方法は、プロセスの戻り状態を確認することです。 0 は成功を意味し、その他の値はエラーを意味します。半分程度のプログラムと同様に、scp は成功すると 0 を返し、失敗すると 0 以外の値を返します。

Expectスクリプトは戻り状態をチェックしないので、scpscpがコピーが成功したことを知らせたかどうかを知る方法はありません。

ここで Expect は便利なツールではありません。君は本当にそうしなければならない公開鍵認証の使用。本当にキーを設定できない場合は、次を使用します。SSHパス直接転がる代わりに。

または、以下を使用する必要があります。同期scpの代わりにRsyncには1つの主な利点があります。複製が中断された場合は再実行でき、中断された部分から再開されます。以下の理由がない限り、タイムスタンプとその他のメタデータを保存するように指示してください。

rsync -a SOURCE/ DESTINATION/

関連情報