Como o `scp` difere do` rsync`?

241

Um artigo sobre a configuração dos blogs Ghost diz para usar scppara copiar da minha máquina local para um servidor remoto:

scp -r ghost-0.3 root@*your-server-ip*:~/

No entanto, o Railscast 339: Chef Solo Basics usa scppara copiar na direção oposta (do servidor remoto para a máquina local):

scp -r [email protected]:/var/chef .

No mesmo Railscast, quando o autor deseja copiar arquivos para o servidor remoto (mesma direção do primeiro exemplo), ele usa rsync:

rsync -r . [email protected]:/var/chef

Por que usar o rsynccomando se scpirá copiar nas duas direções? Como é que scpdifere rsync?

Leahcim
fonte
além de ser mais simples e sempre criptografado, ninguém apontou nada que o scp possa fazer melhor do que "rsync -aA". eu prefiro "rsync -aAX --delete source dest". check-out bsync para sincronização bidirecional.
Tomachi 26/03/19

Respostas:

344

A principal diferença entre essas ferramentas é como elas copiam arquivos.

scpbasicamente lê o arquivo de origem e o grava no destino. Ele executa uma cópia linear simples, localmente ou através de uma rede.

rsynctambém copia arquivos localmente ou pela rede. Mas emprega um algoritmo de transferência delta especial e algumas otimizações para tornar a operação muito mais rápida. Considere a ligação.

rsync A host:B
  • rsyncirá verificar o tamanho dos arquivos e os carimbos de data / hora de modificação de A e B e pulará qualquer outro processamento, se eles corresponderem.

  • Se o arquivo de destino B já existir, o algoritmo de transferência delta garantirá que apenas as diferenças entre A e B sejam enviadas pela conexão.

  • rsyncirá gravar dados em um arquivo temporário T , e em seguida, substituir o arquivo de destino B com T para tornar o update "atômica" para processos que possam estar usando B .

Outra diferença entre eles diz respeito à invocação. rsyncpossui uma infinidade de opções de linha de comando, permitindo que o usuário ajuste seu comportamento. Ele suporta regras de filtro complexas, é executado em modo batch, modo daemon, etc., scppossui apenas algumas opções.

Em resumo, use scppara as tarefas do dia a dia. Comandos que você digita de vez em quando em seu shell interativo. É mais simples de usar e, nesses casos, as rsyncotimizações não ajudam muito.

Para tarefas recorrentes, como crontrabalhos, use rsync. Como mencionado, em várias invocações, ele aproveitará os dados já transferidos, executando muito rapidamente e economizando recursos. É uma excelente ferramenta para manter dois diretórios sincronizados em uma rede.

Além disso, ao lidar com arquivos grandes, use rsynccom a -Popção Se a transferência for interrompida, você poderá retomar onde parou, reemitindo o comando. Veja a resposta de Sid Kshatriya .

Rafa
fonte
14
Você diz para usar o scp nas tarefas do dia a dia. Pela sua explicação e pelo OP, parece que a interface para as duas ferramentas quando usada sem opções é idêntica. Se o rsync tem uma implementação superior e as interfaces são as mesmas, por que não usar sempre o rsync?
Alex
5
Sua interface não é a mesma, mesmo sem opções. O Rsync possui uma interpretação especial de uma barra final no argumento de origem (sincronize o próprio diretório versus seu conteúdo). Pode ter outras dicas, não tenho certeza.
065 Rafa
2
Além disso, eu acho que scpé mais provável que esteja disponível em um sistema semelhante ao Unix, para evitar um irritante "comando não encontrado" de vez em quando.
626 Rafa
2
@ erikb85 rsync tem o sinalizador -P que exibirá uma barra de progresso e permitirá retomar a partir de uma transferência parcialmente concluída. digitalocean.com/community/tutorials/...
Ben
1
Outra diferença de interface entre scpe rsync: rsync -aversus scp -rppara preservar os tempos e permissões de modificação.
Rafa
71

O rysnc pode ser útil para rodar em conexões lentas e não confiáveis. Portanto, se o seu download for interrompido no meio de um arquivo grande, o rysnc poderá continuar de onde parou quando chamado novamente.

Usar rsync -vP username@host:/path/to/file .

A opção -P preserva arquivos baixados parcialmente e também mostra o progresso.

Como sempre man rsync

Sid Kshatriya
fonte
32

Diferença b / w scp e rsync no parâmetro diferente

1. Desempenho acima da latência

  • scp : scp é relativamente menos otimizado e velocidade

  • rsync : rsync é comparativamente mais otimizado e acelerado

https://www.disk91.com/2014/technology/networks/compare-performance-of-different-file-transfer-protocol-over-latency/

2. Manuseio de interrupção

  • scp : A ferramenta de linha de comando scp não pode retomar downloads abortados de conexões de rede perdidas

  • rsync: Se a própria sessão do rsync acima for interrompida, você poderá continuar quantas vezes quiser, digitando o mesmo comando. O rsync reiniciará automaticamente a transferência de onde parou.

http://ask.xmodulo.com/resume-large-scp-file-transfer-linux.html

3. Exemplo de comando

scp

$ scp source_file_path destination_file_path

rsync

$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh [email protected]:bigdata.tgz ./bigdata.tgz 

A -Popção é a mesma que --partial --progress, permitindo que o rsync funcione com arquivos parcialmente baixados. A --rsh=sshopção diz ao rsync para usar ssh como um shell remoto.

4. Segurança:

scp é mais seguro. Você precisa usar rsync --rsh=sshpara torná-lo tão seguro quanto o scp.

documento do homem para saber mais:

gráfico de desempenho

Amitesh
fonte
Obrigado por esta nova resposta, especialmente pela parte de segurança.
zhihong 04/10/19
em muitos sistemas, o ssh é usado por padrão. serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
qwr
2
Sobre a segurança, das notas de versão do openSSH 8.0 : The scp protocol is outdated, inflexible and not readily fixed. We recommend the use of more modern protocols like sftp and rsync for file transfer instead.
downtheroad
6

Uma das principais características do rsyncover scp(além do algoritmo delta e criptografia, se usado com ssh) é que ele verifica automaticamente se o arquivo transferido foi transferido corretamente. O Scp não fará isso, o que ocasionalmente pode resultar em corrupção ao transferir arquivos maiores. Então, em geral, o rsync é uma cópia com garantia .

As páginas de manual do Centos mencionam isso no final da --checksumdescrição da opção:

Observe que o rsync sempre verifica se cada arquivo transferido foi reconstruído corretamente no lado receptor, verificando uma soma de verificação de arquivo inteiro que é gerada à medida que o arquivo é transferido, mas essa verificação automática após a transferência não tem nada a ver com as opções anteriores. the-transfer "Este arquivo precisa ser atualizado?" Verifica.

count0
fonte
5

Há uma distinção para mim que scpsempre é criptografada com ssh (shell seguro), enquanto rsyncnão é necessariamente criptografada. Mais especificamente, rsyncnão realiza nenhuma criptografia por si só; ainda é capaz de usar outros mecanismos (ssh por exemplo) para executar criptografia.

Além da segurança, a criptografia também tem um grande impacto na sua velocidade de transferência, bem como na sobrecarga da CPU. (Minha experiência é que rsyncpode ser significativamente mais rápido que scp.)

Confira esta postagem para saber quando a rsynccriptografia está ativada.

Samuel Li
fonte
1

O scp é melhor para um arquivo.
OR uma combinação de tar& compressão para conjuntos de dados menores, como árvores de código-fonte com pequenos recursos ( ou seja : imagens, sqlite etc ).


No entanto , quando você começar a lidar com volumes maiores, diga:

  • pastas de mídia (40 GB)
  • backups de banco de dados (28 GB)
  • bibliotecas mp3 (100 GB)

Torna-se impraticável criar um arquivo zip / tar.gz para transferir com o scp neste momento para os limites físicos do servidor hospedado.

Como um exercício, você pode fazer algumas ginástica como tubulação tarpara sshe redirecionando os resultados em um remoto arquivo. (economizando a necessidade de criar um swap ou clone temporário, também conhecido como zip ou tar.gz)

No entanto ,

O rsync simplifica esse processo e permite transferir dados sem consumir espaço em disco adicional.

Além disso ,

As atualizações contínuas (cron?) Usam alterações mínimas versus cópias clonadas completas aceleram grandes migrações de dados ao longo do tempo.

tl; dr
scp == pequena escala (com espaço para criar arquivos compactados na mesma unidade)
rsync== grande escala (com a necessidade de fazer backup de grandes dados e sem espaço)

coprêmese
fonte
-1

é melhor pensar em um contexto prático. Em nossa equipe, usamos rsync -aPpara substituir um host cassandra ruim em nosso cluster. Não podemos fazer isso com o scp (preservação lenta e sem progresso).

del bao
fonte
Na verdade, não estou trazendo nada ainda não mencionado nas outras respostas. Além disso, nem devemos responder perguntas fora do tópico.
Dan Cornilescu
1
@DanCornilescu descreve um caso de uso em um cenário real, o que facilita a compreensão das diferenças por outras pessoas. Eu não vejo quaisquer outras respostas semelhantes
del bao
2
Veja -P explicou e notas relacionadas à lentidão / velocidade nas respostas de Sid e Rafa.
Dan Cornilescu