Cópia de arquivo paralela

7

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

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 - de uma maneira simples ?

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

    
por Jon 18.06.2010 / 03:08

6 respostas

7

Se o seu sistema não é atacado por ele (por exemplo, talvez os arquivos estejam em cache), então o link do GNU Paralelo pode trabalhe para você:

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

Isso executará 10 cp s concorrentes.

Pro: é simples de ler.

Con: O GNU Parallel não é padrão na maioria dos sistemas - então você provavelmente precisa instalá-lo.

Assista ao vídeo de introdução para obter mais informações: link

Veja também link para uma discussão paralela E / S de disco.

    
por 22.06.2010 / 12:59
4

Não há mecanismo de baixo nível para isso por uma razão muito simples: isso destruirá o desempenho do sistema. Com discos de prato, cada gravação irá conter a colocação da cabeça, levando a grande espera de E / S. Com SSDs, isso acabará saturando um ou mais dos seus barramentos do sistema, causando outros problemas.

    
por 18.06.2010 / 03:16
3

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

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 comercializa um comando em segundo plano, portanto, o loop continuará, gerando mais cópias.

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

- Christopher Karel

    
por 18.06.2010 / 03:35
3

A única resposta que não vai estragar a responsividade da sua máquina não é exatamente uma 'cópia', mas é muito rápida. Se você não estiver editando os arquivos no local novo ou antigo, um link físico será efetivamente como uma cópia e (somente) se você estiver no mesmo sistema de arquivos, eles serão criados muito muito rapidamente.

Confira cp -l e veja se funcionará para você.

    
por 18.06.2010 / 04:43
1

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

link

    
por 20.12.2012 / 02:29
-1

Você deve tentar isto:

    $ seq 3 | parallel cp -v /etc/passwd passwd{}

Isto irá copiar o arquivo passwd 3 vezes do diretório / etc / para o seu $ HOME

Ou se o seu arquivo estiver no seu diretório pessoal

    $ seq 3 | parallel cp -v passwd{,{}}

Isto irá copiar o arquivo passwd 3 vezes para o seu $ HOME

    
por 18.07.2018 / 23:12

Tags