O que o sinalizador `-C` faz exatamente no` scp`?

35

Eu sempre uso um rsyncou scppara copiar arquivos de / para uma máquina remota. Recentemente, descobri no manual da scp( man scp) bandeira-C

 -C      Compression enable.  Passes the -C flag to
         ssh(1) to enable compression.

Antes de descobrir essa bandeira, eu costumava zipantes e depois scp.

É tão eficiente usar apenas o -Cque fechar e descompactar? Quando o uso de um ou outro processo agiliza a transferência?

Remi.b
fonte
2
A melhor maneira que eu acho que é referência para você. Usando scp -rve scp -Crvpara comparar a taxa de transferência.
27515 cu cukslm
3
Isso é totalmente irrelevante para a questão, mas zipé um formato de arquivo muito "windows". Você quase nunca verá ou precisará disso ao operar uma máquina linux com software linux nativo. taré usado para enrolar diretórios em um arquivo, preservando permissões e nomes e tal, enquanto gzip, bzip2, xz, etc são usados para arquivos compressa. tars são freqüentemente compactados, criando tar.gze tar.xzformatos comuns para arquivos no linux. Eu já vi pessoas rolando suas próprias scppráticas com comandos como tar cvz directory | ssh machine 'cd somewhere; tar xz'.
27/07/2015
2
@Score_Under - O formato zip também é usado pelo Java para compactar arquivos .jar, portanto o zip ainda é usado extensivamente em muitos servidores Linux.
27415 Johnny
Em vez de usar a opção em cada transferência de arquivos, você pode colocar Compression yesno seu .ssh/configarquivo.
Barmar 29/07/2015
Se você realmente quiser velocidade, você pode ser capaz de evitar SSH: unix.stackexchange.com/questions/227951/...
rogerdpack

Respostas:

22

Isso nunca fará muita diferença, mas compactar o arquivo antes de copiá-lo deve ser um pouco menos eficiente, pois o uso de um formato de contêiner como o zipque pode encapsular vários arquivos (como tar) é desnecessário e não é possível transmitir o arquivo zip entrada e saída (então você precisa de um arquivo temporário).

Usando, gzippor outro lado, em vez de zipdeveria ser exatamente o mesmo, já que é o que ssh -Cacontece sob o capô ... exceto que zíper a si mesmo é mais trabalho do que apenas usar ssh -C.

Celada
fonte
Ok, vou verificar o que gzipé. Sua resposta significa que essa scp -rCé provavelmente a solução mais eficiente que eu tenho?
Remi.b 27/07/2015
1
Sua resposta não considera que -Ccompacta um fluxo de protocolo interativo. Você considera apenas os dados. Portanto, suas conclusões estão erradas. Veja minha resposta
Martin Prikryl
O @Celada Zip pode gravar em um pipeline, já que o diretório de membros é colocado no final. No entanto, como você disse, descompactar exige a busca de extrair mais de um membro e, portanto, não pode ser lido em um pipeline.
Jrw32982 suporta Monica
20

O -Csinalizador permite uma compactação gzip de um fluxo SSH.

É o equivalente Accept-Encoding: gzipem HTTP.

O desempenho do sinalizador depende de um tipo de dados que você transfere:

  • Ao transferir um único arquivo grande, o desempenho seria quase o mesmo de compactar o arquivo antes da transferência (negligenciando a eficiência do algoritmo zip vs. gzip).

    Mas usar -Cé um esforço menor para você como usuário.

  • Ao transferir muitos arquivos pequenos, o desempenho será inferior ao compactar os arquivos antes da transferência.

    Uma razão por trás disso é que, antes de cada transferência de arquivo, há uma comunicação interativa entre o servidor SCP e o cliente (para a troca de metadados do arquivo, como registro de data e hora e permissões). Portanto, ambos os lados precisam esperar um pouco para que o outro lado responda (a compactação não ajudará enquanto espera). Esse é um tempo perdido para cada arquivo transferido. Quanto tempo é desperdiçado depende da latência da conexão. No final, a transferência pode ser magnitudes mais lentas.

    Quando você transfere um único arquivo compactado, essa comunicação ocorre apenas uma vez.

Martin Prikryl
fonte
8

Permite a compactação gzip no ssh (sob o scp).

Em conexões lentas, isso acelera as coisas, em qualquer conexão razoavelmente rápida (100Mbit ou mais rápida) é muito provável que a compactação diminua a velocidade.

Será mais ou menos eficiente que o zip, com base no fato de o gzip (especificamente o gzip -6) ser mais ou menos eficiente que o nível de compactação do zip escolhido

Wayne Walker
fonte
1
No meu caso específico, tenho uma conexão relativamente boa (estou no campus), mas as pastas que tenho que copiar são muito grandes (~ 100 GB acima de 442 .bine .txtarquivos). Então você sugeriria usar apenas scp -rsem -Cbandeira e não zip, gzipnão tar?
Remi.b 27/07/2015
2
@ Remi.b: Você provavelmente precisa compará-lo dos dois lados e ver. A questão é se a CPU é rápida o suficiente para compactar os dados em uma taxa mais rápida do que poderia ser enviada pela rede sem compressão. Portanto, a resposta dependerá da sua máquina e rede em particular.
Nate Eldredge
Ok, eu tenho o ponto +1. Obrigado pela sua ajuda.
Remi.b
O SSH em si parece ter uma CPU que percebo, às vezes chegando ao limite muito abaixo da largura de banda máxima. Não tenho certeza o que fazer lá ...
rogerdpack
O desempenho também depende dos dados. Copiar um arquivo que é essencialmente todos os zeros será altamente compactado. Eu tenho um link de 500Mb entre dois servidores remotos e apenas copiei um arquivo 50G (VMWare VMDK) contendo todos os zeros nesse link a ~ 128-130MB / s (provavelmente algum limite do buffer de compactação do scp), levando apenas cerca de 6-7 minutos. Sem compressão, isso levaria 1:45 horas. Sua milhagem variará dependendo da complexidade dos dados e quão bem eles podem ser compactados.
Topher