先週、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スクリプトは戻り状態をチェックしないので、scp
scpがコピーが成功したことを知らせたかどうかを知る方法はありません。
ここで Expect は便利なツールではありません。君は本当にそうしなければならない公開鍵認証の使用。本当にキーを設定できない場合は、次を使用します。SSHパス直接転がる代わりに。
または、以下を使用する必要があります。同期scpの代わりにRsyncには1つの主な利点があります。複製が中断された場合は再実行でき、中断された部分から再開されます。以下の理由がない限り、タイムスタンプとその他のメタデータを保存するように指示してください。
rsync -a SOURCE/ DESTINATION/