大量のファイル scp サーバーをサーバーにコピーするための物流です。進捗状況をどのように判断しますか?

大量のファイル scp サーバーをサーバーにコピーするための物流です。進捗状況をどのように判断しますか?

そのため、職場から古いサーバーから新しいサーバーに多くのファイルをコピーする必要があります。それぞれ約200,000個のファイルが含まれており、累積サイズが20GBを超える2つのデータバックアップを転送する必要がありました。小さなファイルはたくさんあり、大きなファイルはないので、scpが転送を実行する正しい方法だと思います。

ただし、リモートでserver2にsshを接続し、server1のファイルをscpで接続すると、端末からそのファイルにアクセスすることがわかります。ところが退社する際にWiFi接続を切らなければならず、今や端末に配管が切れた様子が見えます。したがって、scpプロセスがまだ実行されているかどうか、どのくらい残っているかを知る方法はありません。時間の経過とともにディレクトリのサイズを変更できますが、より良い方法があるかどうか疑問に思います。私の端末で実行されているプロセスを表示できますか?

最初のデータセットに対してこれを実行しましたが、まだ2番目のデータセットのプロセスを開始していません。大規模なSCPに関連する問題を回避/解決するために、コマンドを実行する前/実行中に何ができますか?

さらに、これは数日も続くと思いますか?重要な場合、あるサーバーはAWSで、もう一方のサーバーはGoogleです。

答え1

使用rsync

rsync -av --progress /from/dir/ server:/to/dir/

答え2

@hschouさんが回答できなかったさまざまな部分についてお答えします。

したがって、scpプロセスがまだ実行されているかどうか、どのくらい残っているかを知る方法はありません。
私の端末で実行されているプロセスを表示できますか?

実行中のプロセスのリストを取得するには、次のコマンドを使用できますpsマニュアルページ)

ps aux | grep scp

これを監視するには、コマンドを使用するか、watch単純なループを直接作成できます。

while true; do clear; ps aux | grep scp; sleep 5; done

これはps aux | grep scp5秒ごとに実行されます。

答え3

良いパフォーマンスを得るためにscpを使用すると、バックグラウンドプロセスを使用してシェルスクリプトから大きな(小さい)ファイルを送信できます。

filename や filename.done などのセマフォ (タグ) ファイルを使用します。受信操作で filename.done を確認すると、filename が完全に送信されたことがわかります。

シェルスクリプトは、入力ディレクトリからファイルのペアを取得し、作業ディレクトリに移動し、バックグラウンド機能を実行してペアを転送できます。

バックグラウンド機能はscpコマンドを介してペアを送信するため、操作は[準]アトミックであり、scp戻りコードを確認します。成功したら、バックアップ場所に移動して終了します。失敗した場合は、再試行時に選択できるように元の入力ディレクトリに戻ります。ソフトエラーを処理する便利な方法です。

同時サブプロセス数の制限を構成します。いくつかを起動し、実行中のPIDの数(pstree)を確認し、必要に応じて子PIDの数を制限内に保つのを待ちます。

ロギング機能を最大限に活用すると便利です。

関連情報