Para arquivos grandes compactar primeiro e depois transferir ou rsync -z? qual seria o mais rápido?

14

Eu tenho uma tonelada de arquivos de dados pequenos de relatividade, mas eles ocupam cerca de 50 GB e preciso deles transferidos para uma máquina diferente. Eu estava tentando pensar na maneira mais eficiente de fazer isso.

Os pensamentos que eu tive foram compactar o arquivo inteiro, depois rsync e descompactá-lo, confiar no rsync -z para compactação, gzip e depois usar o rsync -z. Não tenho certeza do que seria mais eficiente, pois não tenho certeza de como exatamente o rsync -z é implementado. Alguma idéia de qual opção seria a mais rápida?


fonte

Respostas:

11

Você não pode "compactar a coisa toda", pois o gzip compacta apenas um arquivo, você pode criar um arquivo tar e compactá-lo para "compactar a coisa toda", mas perderia a capacidade do rsync de copiar apenas o arquivo modificado.

Portanto, a questão é: é melhor armazenar o arquivo que eu preciso para o rsync gziped ou confiar na opção -z do rsync.
A resposta é provavelmente que você não deseja que o arquivo seja descompactado no seu servidor? Eu acho que sim, então eu não vejo como você pode gerenciar o arquivo gzip antes de fazer o rsync.

Pode ser que você não precise da capacidade do rsync de copiar apenas o arquivo modificado? Nesse caso, por que usar o rsync em vez de fazer um scp de um arquivo tar.gz contendo suas coisas?

De qualquer forma, para responder à pergunta, o rsync gzip será um pouco menos eficiente que o arquivo gzip com o gzip. Por quê ? como o rsync fará o gzip dos dados em pedaços, então um conjunto menor de dados será usado para criar a tabela que o gzip usa para fazer a compactação, um conjunto maior de dados (o gzip usaria o arquivo inteiro de uma vez) para obter uma melhor tabela de compactação. Mas a diferença será muito pequena na maioria dos casos, mas em casos muito raros, a diferença pode ser mais importante (se você tiver um arquivo muito grande com um padrão muito longo repetindo muito tempo no arquivo, mas longe um do outro) (Isso é um exemplo muito simplificado)

raio
fonte
1
Pelo modo como li sua pergunta, ele se comprimirá para passar pelo fio e depois descomprimir o outro lado. Eu usaria a compactação nativa rsync sobre o gzip, simplesmente porque compactar e descompactar 50 GB pode levar uma quantidade significativa de tempo. Por outro lado, se os arquivos forem principalmente texto, eles serão compactados de maneira adequada. Terceira opção: copie os arquivos para uma unidade USB.
3
@ Randolph Potter: sim, o tempo perdido para compactar 50 GB localmente, então o rsync seria maior do que usar o rsync -z, de qualquer maneira, se ele quiser tirar vantagem do próprio rsync (copiar apenas o arquivo alterado), a compactação não pode ser feita antes
raio
ponto muito bom. +1 para você :-)
Lembre-se também de que o gzip é um compressor de fluxo.
Falcon Momot 01/10/12
6

Se você estiver copiando os dados apenas uma vez, o rsync não será uma grande vitória por si só. Se você gosta do gzip (ou tar + gzip, já que possui muitos arquivos), tente algo como:

tar -cz /home/me/source/directory | ssh target tar -xz --directory /home/you/target/directory

Isso obteria a compactação que você estava procurando e apenas copiaria diretamente sem envolver o rsync.

Slartibartfast
fonte
Eu provavelmente usaria --lzop para que ao invés de gzip ... muito mais rápido e menor sobrecarga da CPU e ainda tem taxas de compressão bons para o texto
o encaixe
5

O @radius, um pequeno detalhe a escolher sobre como gzipfunciona - gzipé um algoritmo de compressão baseado em bloco e bastante simples. O arquivo inteiro não é considerado para a tabela de compactação - apenas cada bloco. Outros algoritmos podem usar todo o conteúdo do arquivo e há alguns que usam o conteúdo de vários blocos ou mesmo de tamanhos variados. Um exemplo fascinante é lrzipo mesmo autor de rsync!

O gzipalgoritmo do skinny on .

Portanto, em resumo, o uso rsync -zprovavelmente produzirá a mesma compactação que o gzipprimeiro - e se você estiver fazendo uma transferência diferencial, melhor por causa do rsyncalgoritmo diferente.

Dito isso, acho que descobriremos que as scpbatidas fáceis e regulares rsyncpara transferências não diferenciais - porque terão muito menos sobrecarga do que rsynco algoritmo (que usaria de scpqualquer maneira!)

Se sua rede se tornar um gargalo, convém usar a compressão no fio.

Se seus discos são o gargalo, é melhor fazer o streaming em um arquivo compactado. (por exemplo, netcatde uma máquina para a outra, transmitindo para gzip -c)

Normalmente, se a velocidade é fundamental, compactar um arquivo existente antes é uma perda de tempo.

TIMTOWTDI, YMMV, IANAL, etc.

Hercynium
fonte
2

De acordo com esse cara , pode ser mais rápido de usar rsync -z, embora eu ache que seria quase tão eficiente quanto comprimir cada arquivo antes de transferir. Deve ser mais rápido do que comprimir o fluxo de alcatrão, conforme sugerido por outros.

Na página do manual:

          Note  that  this  option  typically  achieves better compression
          ratios than can be achieved by using a compressing remote  shell
          or  a  compressing  transport  because it takes advantage of the
          implicit information in the matching data blocks  that  are  not
          explicitly sent over the connection.
Insyte
fonte
1
Eu sugeriria o uso de --compress-level = 1 com o rsync -z se você tiver uma rede rápida. Você deseja que a rede seja seu gargalo, não IO de CPU ou disco, para minimizar o tempo total de transferência. Se a rede estiver lenta, o uso do padrão -z (que é equivalente a gzip -6, eu acho) ainda pode tornar a rede do processo ligada.
precisa saber é o seguinte
1

Como o scp do arquivo compactado e o rsync terão tempos de transferência muito semelhantes, a "maneira mais eficiente de fazer isso" seria a compactação instantânea, em vez da compactação, a transferência.

Além da "rapidez", outras considerações incluem:

O rsync pode ser facilmente reiniciado se nem todos os arquivos forem transferidos.

O rsync pode ser usado para manter os arquivos na máquina remota.

tar ou gzip local requer espaço local.

Considerações sobre o uso da porta para a máquina de destino e os firewalls: 1) O scp usa a porta 22 (por padrão), que pode não ser aceitável. 2) porta 873 de usuários rsync (por padrão)

Não sei por que o raio espera que o pôster original NÃO queira que os arquivos descompactados sejam armazenados.

DGerman
fonte