プロセスをスピードアップするために複数のファイルを同時にコピーしたい現在使用しているのは次のとおりです
scp -r [email protected]:/var/www/example/example.example.com .
ただし、一度に1つのファイルしかコピーしません。私は100Mbpsのファイバーを使用しているので、同時に大量のコピーを実行できる帯域幅を利用できます。助けてください。
SSHは、いわゆる「多重化」を実行できます。つまり、1つを介して(1つのサーバーに対して)より多くの接続を行うことができます。それはあなたが望むものを買う余裕がある一つの方法かもしれません。 「ControlMaster」などのキーワードを検索する
2番目の方法は、より多くの接続を使用してから、すべてのジョブをバックグラウンドで送信することです。
for file in file1 file2 file3 ; do
scp $file server:/tmp/ &
done
しかし、これはあなたの質問に対する答えです-「複数のファイルを同時にコピーする方法」。速度を上げるには、より弱い暗号化(rc4など)を使用できます。また、SCPは転送速度を暗黙的に制限しないため、ボトルネックがハードドライブになる可能性があることを忘れないでください。
最後に、rsyncを使用します-場合によっては、scpよりもはるかに高速になることがあります...
待機コマンドでバックグラウンドタスクを使用できます。 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分未満かかりました
実際、100メガビットイーサネットはかなり遅いです。理論的には8MiB/sが期待できます。実際には、通常、せいぜい4〜6 MiB/sになります。
とはいえ、複数のセッションを並行して実行した場合、速度の向上は見られません。自分で試すことができます。2つの大きなファイルをコピーする2つの並列SCPセッションを実行するだけです。私の推測では、目立ったスピードアップは見られないでしょう。この理由は次のとおりです。
ソリューション:
rsync
(内部でSSHを使用)などのツールを使用して、最後にコマンドを実行してから変更されたファイルをコピーします。最後の提案は次のように行うことができます。
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
圧縮は良くなりますが、遅くなります。そのため、このようなタスクにはgzip
(z
)を使用します。
Parallel-scp(AKA pscp)を使用できます: http://manpages.ubuntu.com/manpages/natty/man1/parallel-scp.1.html
このツールを使用すると、1つまたは複数のファイルを複数のホストに同時にコピーできます。
よろしく、
複数のファイルを指定した場合、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 . &