Quero transferir arquivos scp para machineA
o meu machineB
e é assim que estou fazendo. Estou copiando vários arquivos, um por um, da primary
pasta machineA
para a primary
pasta machineB
e secondary
da pasta machineA
para a secondary
pasta machineB
.
trinity@machineB:~$ scp trinity@machineA:/data01/primary/* /data01/primary/
trinity@machineB:~$ scp trinity@machineA:/data02/secondary/* /data02/secondary/
Existe alguma maneira de copiar vários arquivos em paralelo? Tipo cinco arquivos de uma pasta por vez? Então, em vez de copiar um arquivo por vez, quero copiar cinco arquivos das pastas primária ou secundária, respectivamente?
Basicamente, quero copiar tudo o que existe nas pastas primária e secundária em machineA
paralelo machineB
.
Também tenho o GNU Parallel instalado na minha caixa, se puder usá-lo. Tentei o comando abaixo, mas não funciona. Eu esperava que ele copiasse 5 arquivos em paralelo por vez até que tudo fosse copiado daquela pasta.
parallel -j 5 scp trinity@machineA:/data01/primary/* /data01/primary/
Alguma coisa errada com minha sintaxe paralela? Qual é a melhor maneira de copiar cinco arquivos em paralelo de uma pasta remota até que tudo seja copiado dela?
Responder1
Por que você acha que a conexão paralela tornaria isso mais rápido? SCP é uma ferramenta muito simples para transferir alguns arquivos pequenos, nada para rendimento e desempenho. Executá-lo a partir de processos mais paralelos poderia torná-lo um pouco mais rápido, mas não significativamente. O que você pode fazer por outro lado é:
- Use
sftp
para obter melhor rendimento e cópias mais inteligentes (deve ser suficiente), por exemplo, usando-r
- Use
ControlMaster
para se livrar da sobrecarga de conexões TCP paralelas - Use os parâmetros corretos para o
parallel
Eu começaria com sftp
:
sftp -r trinity@machineA:/data01/primary/ /data01/primary/
Responder2
Você precisa que a expansão * aconteça no lado remoto:
ssh machineA 'parallel -j 5 scp {} machineB:/data01/primary/ ::: /data01/primary/*'