web-dev-qa-db-ja.com

scpを使用して複数のファイルを同時にコピーする方法

プロセスをスピードアップするために複数のファイルを同時にコピーしたい現在使用しているのは次のとおりです

scp -r [email protected]:/var/www/example/example.example.com .

ただし、一度に1つのファイルしかコピーしません。私は100Mbpsのファイバーを使用しているので、同時に大量のコピーを実行できる帯域幅を利用できます。助けてください。

5
Philip

SSHは、いわゆる「多重化」を実行できます。つまり、1つを介して(1つのサーバーに対して)より多くの接続を行うことができます。それはあなたが望むものを買う余裕がある一つの方法かもしれません。 「ControlMaster」などのキーワードを検索する

2番目の方法は、より多くの接続を使用してから、すべてのジョブをバックグラウンドで送信することです。

for file in file1 file2 file3 ; do 
     scp $file server:/tmp/ & 
done

しかし、これはあなたの質問に対する答えです-「複数のファイルを同時にコピーする方法」。速度を上げるには、より弱い暗号化(rc4など)を使用できます。また、SCPは転送速度を暗黙的に制限しないため、ボトルネックがハードドライブになる可能性があることを忘れないでください。

最後に、rsyncを使用します-場合によっては、scpよりもはるかに高速になることがあります...

4
Mike S.

待機コマンドでバックグラウンドタスクを使用できます。 Waitコマンドは、次の行を処理する前に、すべてのバックグラウンドタスクが完了していることを確認します。つまり、エコーは3つのノードすべてのscpが完了した後に実行されます。

#!/bin/bash
scp -i anuruddha.pem myfile1.tar [email protected]:/tmp &
scp -i anuruddha.pem myfile2.tar [email protected]:/tmp &
scp -i anuruddha.pem myfile.tar [email protected]:/tmp &

wait
echo "SCP completed"

これがあなたに役立つかどうかはわかりませんが、私は通常、ソースでファイルをアーカイブし(圧縮は必要ありません。アーカイブするだけで十分です)、ダウンロードして抽出します。これにより、プロセスが大幅にスピードアップします。アーカイブする前に1GBをダウンロードするのに8時間以上かかりましたアーカイブした後、同じことをするのに8分未満かかりました

3
kranthi117

実際、100メガビットイーサネットはかなり遅いです。理論的には8MiB/sが期待できます。実際には、通常、せいぜい4〜6 MiB/sになります。

とはいえ、複数のセッションを並行して実行した場合、速度の向上は見られません。自分で試すことができます。2つの大きなファイルをコピーする2つの並列SCPセッションを実行するだけです。私の推測では、目立ったスピードアップは見られないでしょう。この理由は次のとおりです。

  1. 2台のコンピューター間のネットワークパス上で最も遅いコンポーネントが最大値を決定します。速度。
  2. 他の人が同時にexample.comにアクセスしている可能性があり、それがあなたに与えることができる帯域幅を減らします
  3. 100メガビットイーサネットでは、2つの連続するネットワークパケット間にかなり大きなギャップが必要です。 GBitイーサネットはこの点ではるかに優れています。

ソリューション:

  1. 有線で送信する前にデータを圧縮する
  2. rsync(内部でSSHを使用)などのツールを使用して、最後にコマンドを実行してから変更されたファイルをコピーします。
  3. 小さなファイルをたくさん作成するには、かなりの時間がかかります。リモート側のすべてのファイルのアーカイブを作成し、それを単一のアーカイブとして送信してみてください。

最後の提案は次のように行うことができます。

ssh root@xxx "cd /var/www/example ; tar cf - example.example.com" > example.com.tar

または圧縮あり:

ssh root@xxx "cd /var/www/example ; tar czf - example.example.com" > example.com.tar.gz

注意: bzip2圧縮は良くなりますが、遅くなります。そのため、このようなタスクにはgzipz)を使用します。

2
Aaron Digulla

Parallel-scp(AKA pscp)を使用できます: http://manpages.ubuntu.com/manpages/natty/man1/parallel-scp.1.html

このツールを使用すると、1つまたは複数のファイルを複数のホストに同時にコピーできます。

よろしく、

1
BhEaN

複数のファイルを指定した場合、scpはそれらを順番にダウンロードします。

scp -r [email protected]:/var/www/example/file1 [email protected]:/var/www/example/file2 .

または、ファイルを並行してダウンロードする場合は、scpを複数回呼び出して、それぞれをバックグラウンドで実行します。

#! /usr/bin/env bash
scp [email protected]:/var/www/example/file1 . &
scp [email protected]:/var/www/example/file2 . &
0
GNSL