machineA
からにファイルを scp したいのですmachineB
が、次のようにしています。 のフォルダーから のフォルダーへ、 のフォルダーから のフォルダーへ、多数のファイルを 1つprimary
ずつコピーしています。machineA
primary
machineB
secondary
machineA
secondary
machineB
trinity@machineB:~$ scp trinity@machineA:/data01/primary/* /data01/primary/
trinity@machineB:~$ scp trinity@machineA:/data02/secondary/* /data02/secondary/
複数のファイルを並行してコピーする方法はありますか? たとえば、フォルダーから一度に 5 つのファイルをコピーするなどです。つまり、一度に 1 つのファイルをコピーするのではなく、プライマリ フォルダーまたはセカンダリ フォルダーからそれぞれ 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/*'