Copiando mais rápido que cp?

3

Atualmente, estou copiando um grande número de diretórios e arquivos recursivamente no mesmo disco usando cp -r .

Existe uma maneira de fazer isso mais rapidamente? Compactar os arquivos primeiro seria melhor ou talvez usando rsync ?

    
por CJ7 25.08.2016 / 04:11

3 respostas

2

Recentemente, fiquei perplexo com a velocidade às vezes lenta de cp . Especificamente, como df = pandas.read_hdf('file1', 'df') (700ms para um arquivo de 1.2GB) seguido por df.to_hdf('file2') (530ms) poderia ser muito mais rápido que cp file1 file2 (8s)?

Pesquisando isso:

  • cat file1 > file2 não é melhor (8.1s).
  • dd bs=1500000000 if=file1 of=file2 nenhum (8.3s).
  • rsync file1 file2 é pior (11.4s), porque o arquivo2 já existia, então ele tenta executar sua soma de verificação contínua e bloquear a mágica de atualização.

Oh, aguarde um segundo! Que tal desvincular (excluir) file2 primeiro se existir?

Agora estamos falando:

  • rm -f file2 : 0.2s (para adicionar a qualquer figura abaixo).
  • cp file1 file2 : 1,0s.
  • cat file1 > file2 : 1,0s.
  • dd bs=1500000000 if=file1 of=file2 : 1.2s.
  • rsync file1 file2 : 4s.

Então você tem isso. Certifique-se de que os arquivos de destino não existam (ou os trunque, o que é presumivelmente o que o pandas.to_hdf() faz).

Editar : isso foi sem esvaziar o cache antes de qualquer um dos comandos, mas conforme observado nos comentários, isso apenas adiciona consistentemente ~ 3.8s a todos os números acima.

Vale ressaltar: isto foi tentado em várias versões do Linux (kernel Centos w. 2.6.18-408.el5, e kernel Ubuntu w. 3.13.0-77-generic), e ext4 assim como ext3. Curiosamente, em um MacBook com o Darwin 10.12.6, não há diferença e as duas versões (com ou sem arquivo existente no destino) são rápidas.

    
por 07.07.2018 / 02:35
1

Na mesma partição (e sistema de arquivos), você pode usar -l para obter hard links em vez de cópias . A criação de link físico é muito mais rápida do que copiar coisas (mas, é claro, não funciona em diferentes partições de disco).

Como um pequeno exemplo:

$ time cp -r mydir mydira

real    0m1.999s
user    0m0.000s
sys     0m0.490s

$ time cp -rl mydir mydirb

real    0m0.072s
user    0m0.000s
sys     0m0.007s

Isso é uma melhoria de 28 vezes. Mas esse teste usou apenas ~ 300 (bastante pequenos) arquivos. Alguns arquivos maiores devem ter um desempenho mais rápido e muitos arquivos menores, mais lentos.

    
por 25.08.2016 / 04:22
0

Copiar um arquivo no disco local é 99% gasto na leitura e gravação no disco. Se você tentar compactar os dados, aumentará a carga da CPU, mas não reduzirá os dados de leitura / gravação ... na verdade, ela diminuirá a sua cópia.

O rsync ajudará se você já tiver uma cópia dos dados e a trouxer "atualizada".

Mas se você quiser criar uma nova cópia de uma árvore, não poderá fazer muito melhor do que o comando cp .

    
por 25.08.2016 / 04:30