Cópia de arquivo paralelo

Cópia de arquivo paralelo

Eu tenho uma lista de arquivos que preciso copiar em um sistema Linux - cada arquivo varia de 10 a 100 GB.

Eu só quero copiar para o sistema de arquivos local. Existe uma maneira de fazer isso em paralelo - com vários processos, cada um responsável por copiar um arquivo - em umsimplesmaneiras?

Posso escrever facilmente um programa multithread para fazer isso, mas estou interessado em descobrir se existe um método Linux de baixo nível para fazer isso.

Responder1

Se o seu sistema não for prejudicado por ele (por exemplo, talvez os arquivos estejam em cache), então GNU Parallelhttp://www.gnu.org/software/parallel/pode funcionar para você:

find . -type f -print0 | parallel -0 -j10 cp {} destdir

Isso executará 10 cps simultâneos.

Pró: É simples de ler.

Contra: GNU Parallel não é padrão na maioria dos sistemas - então você provavelmente terá que instalá-lo.

Se você quiser manter a estrutura de diretórios:

find . -type f -print0 |
  parallel -0 -j10 mkdir -p destdir/{//}';' cp {} destdir/{//}

Assista ao vídeo de introdução para mais informações:http://www.youtube.com/watch?v=OpaiGYxkSuQ

Veja tambémhttps://oletange.wordpress.com/2015/07/04/parallel-disk-io-is-it-faster/para uma discussão sobre E/S de disco paralelo.

Responder2

Não existe um mecanismo de baixo nível para isso por uma razão muito simples: fazer isso destruirá o desempenho do seu sistema. Com unidades de prato, cada gravação competirá pelo posicionamento do cabeçote, levando a uma enorme espera de E/S. Com SSDs, isso acabará saturando um ou mais barramentos do sistema, causando outros problemas.

Responder3

Como mencionado, esta é uma ideia terrível. Mas acredito que todos deveriam ser capazes de implementar seus próprios planos horríveis, então...

for FILE in *;do cp $FILE <destination> &;done

O asterisco pode ser substituído por uma expressão regular dos seus arquivos ou $(cat <listfile>)se você tiver todos eles em um documento de texto. O E comercial inicia um comando em segundo plano, então o loop continuará, gerando mais cópias.

Conforme mencionado, isso aniquilará completamente o seu IO. Então... eu realmente não recomendaria fazer isso.

--Christopher Karel

Responder4

Aqui está uma ferramenta de cópia de arquivo distribuída/paralela e descentralizada que irá dividir o arquivo e copiar todos os pedaços em paralelo. Provavelmente só o ajudará se você tiver um SSD que suporte vários fluxos ou algum tipo de configuração com vários cabeçotes de disco.

https://github.com/hpc/dcp

informação relacionada