特定のフォルダからscpファイルを並列に読み取る

特定のフォルダからscpファイルを並列に読み取る

machineAscpファイルを私のファイルに入れたいのですが、machineBこれが私がすることです。primaryフォルダからフォルダmachineAへ、フォルダからフォルダへ複数のファイルを1つずつコピーしています。primarymachineBsecondarymachineAsecondarymachineB

trinity@machineB:~$ scp trinity@machineA:/data01/primary/* /data01/primary/
trinity@machineB:~$ scp trinity@machineA:/data02/secondary/* /data02/secondary/

複数のファイルを同時にコピーする方法はありますか? 1つのフォルダに一度に5つのファイルが含まれていますか?その後、一度に1つのファイルをコピーするのではなく、1次フォルダまたは2次フォルダから5つのファイルを個別にコピーしたいと思います。

machineAデフォルトでは、プライマリフォルダとセカンダリフォルダのすべての項目を並列にコピーしたいと思いますmachineB

利用できる場合は、私のボックスにもGNU Parallelがインストールされています。以下のコマンドを試しましたが、動作しません。フォルダからすべてがコピーされるまで、一度に5つのファイルを並列にコピーする必要があると思います。

parallel -j 5 scp trinity@machineA:/data01/primary/* /data01/primary/

並列構文に問題がありますか?すべてがコピーされるまで、リモートフォルダから5つのファイルを並列にコピーするための最良の方法は何ですか?

答え1

並列接続で速度が速くなるのはなぜですか? SCPは、スループットやパフォーマンスに影響を与えずに少数の小さなファイルを転送できる非常に簡単なツールです。より多くの並列プロセスで実行する方が少し速くなりますが、効果は大きくありません。別の方法は次のとおりです。

  • より良いスループットとよりスマートなレプリケーションを実現するにはsftp(十分である必要があります)、たとえば次のようにします。-r
  • ControlMaster並列TCP接続のオーバーヘッドを除去するために使用されます。
  • 正しいパラメータの使用parallel

次から始めますsftp

sftp -r trinity@machineA:/data01/primary/ /data01/primary/

答え2

*リモート側で拡張する必要があります。

ssh machineA 'parallel -j 5 scp {} machineB:/data01/primary/ ::: /data01/primary/*'

関連情報