web-dev-qa-db-fra.com

Comment `scp` diffère-t-il de` rsync`?

Un article sur la configuration de Ghost blogging dit d'utiliser scp pour copier depuis mon ordinateur local vers un serveur distant:

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

Cependant, Railscast 339: Principes de base de Chef Solo utilise scp pour copier dans le sens opposé (du serveur distant à la machine locale):

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

Dans le même Railscast, lorsque l'auteur souhaite copier des fichiers sur le serveur distant (même direction que le premier exemple), il utilise rsync:

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

Pourquoi utiliser la commande rsync si scp va copier dans les deux sens? Comment scp diffère-t-il de rsync?

182
Leahcim

La principale différence entre ces outils réside dans la manière dont ils copient les fichiers.

scp lit le fichier source et l’écrit dans la destination. Il effectue une copie linéaire simple, localement ou sur un réseau.

rsync copie également les fichiers localement ou sur un réseau. Mais il utilise un algorithme de transfert delta spécial et quelques optimisations pour rendre l'opération plus rapide. Considérez l'appel.

rsync A Host:B
  • rsync vérifiera la taille des fichiers et les horodatages de modification de A et B, et ignorera tout traitement ultérieur, le cas échéant.

  • Si le fichier de destination B existe déjà, l'algorithme de transfert delta s'assurera que seules les différences entre A et B sont envoyées par le fil.

  • rsync écrira les données dans un fichier temporaire T, puis remplacera le fichier de destination B par T pour que la mise à jour ressemble "atomiquement" aux processus susceptibles en utilisant B.

Une autre différence entre eux concerne l'invocation. rsync a une pléthore d'options de ligne de commande, permettant à l'utilisateur de peaufiner son comportement. Il prend en charge les règles de filtrage complexes, s’exécute en mode de traitement par lots, en mode démon, etc. scp n’a que quelques commutateurs.

En résumé, utilisez scp pour vos tâches quotidiennes. Les commandes que vous tapez de temps en temps sur votre shell interactif. Son utilisation est plus simple et, dans ces cas, les optimisations rsync n’aideront pas beaucoup.

Pour les tâches récurrentes, telles que les tâches cron, utilisez rsync. Comme mentionné précédemment, sur plusieurs invocations, il tirera parti des données déjà transférées, fonctionnant très rapidement et économisant des ressources. C'est un excellent outil pour garder deux annuaires synchronisés sur un réseau.

De même, lorsqu’il s’agit de fichiers volumineux, utilisez rsync avec l’option -P. Si le transfert est interrompu, vous pouvez le reprendre là où il s’est arrêté en réémettant la commande. Voir réponse de Sid Kshatriya.

270
Rafa

rysnc peut être utile pour fonctionner sur des connexions lentes et peu fiables. Donc, si votre téléchargement est interrompu au milieu d’un fichier volumineux, rysnc sera en mesure de continuer à partir de l’endroit où il s’est arrêté lors de son nouvel appel.

Utilisez rsync -vP username@Host:/path/to/file .

L'option -P préserve les fichiers partiellement téléchargés et affiche également les progrès.

Comme d'habitude vérifier man rsync

51
Sid Kshatriya

Différence n/b scp et rsync sur un paramètre différent

1. Performance sur latence

  • scp: scp est relativement moins optimisé et rapide

  • rsync: rsync est comparativement plus optimisé et plus rapide

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

2. Traitement des interruptions

  • scp: l'outil de ligne de commande scp ne peut pas reprendre les téléchargements interrompus à partir de connexions réseau perdues

  • rsync: Si la session rsync ci-dessus est interrompue, vous pouvez la reprendre autant de fois que vous le souhaitez en tapant la même commande. rsync redémarre automatiquement le transfert là où il s'est arrêté.

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

3. Exemple de commande

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 

L'option -P est identique à --partial --progress, ce qui permet à rsync de fonctionner avec des fichiers partiellement téléchargés. L'option --rsh=ssh indique à rsync d'utiliser ssh en tant que shell distant.

4. Sécurité:

scp est plus sécurisé. Vous devez utiliser rsync --rsh=ssh pour le rendre aussi sécurisé que scp.

man document pour en savoir plus:

 performance chart

6
Amitesh

Il y a une distinction pour moi: scp est toujours chiffré avec ssh (Secure Shell), alors que rsync n'est pas nécessairement chiffré. Plus spécifiquement, rsync n'effectue aucun chiffrement par lui-même; il est toujours capable d'utiliser d'autres mécanismes (ssh par exemple) pour effectuer le cryptage.

En plus de la sécurité, le cryptage a également un impact majeur sur la vitesse de votre transfert, ainsi que sur la charge du processeur. (Mon expérience est que rsync peut être considérablement plus rapide que scp.)

Découvrez cette post pour quand rsync a le cryptage.

2
Samuel Li

L'une des principales caractéristiques de rsync over scp (à côté de l'algorithme delta) est qu'il vérifie automatiquement si le fichier transféré a été transféré correctement. Scp ne le fera pas, ce qui peut parfois entraîner une corruption lors du transfert de fichiers plus volumineux. Donc, en général, rsync est une copie avec garantie.

Voir la note de page de manuel (centos) à la fin de la description de l'option --checksum:

Notez que rsync vérifie toujours que chaque fichier transféré était correctement reconstruit du côté de la réception en vérifiant un fichier entier somme de contrôle qui est générée au fur et à mesure que le fichier est transféré, mais que la vérification automatique après transfert n'a rien à voir avec cela option avant le transfert "Ce fichier doit-il être mis à jour?" vérifier.

2
count0

il vaut mieux penser dans un contexte pratique. Dans notre équipe, nous utilisons rsync -aP pour remplacer un hôte cassandra de notre cluster. Nous ne pouvons pas faire cela avec scp (conservation lente et sans progrès). 

0
del bao

scp est préférable pour le fichier one.
OUune combinaison de tar & compression pour des ensembles de données plus petits comme des arbres de code source avec de petites ressources (ie: images, sqlite etc).


Pourtant , lorsque vous commencez à traiter avec une plus grande les volumes disent:

  • dossiers multimédia (40 Go)
  • sauvegardes de bases de données (28 Go)
  • bibliothèques de mp3 (100 Go)  

Il devient peu pratique de créer un fichier Zip/tar.gz à transférer avec scp à ce stade dans les limites physical du serveur hébergé.

En tant qu'exercice, vous pouvez faire de la gymnastique comme piping tar dans ssh et rediriger les résultats dans un fichier remote. (en évitant la nécessité de créer un échange ou un clone temporaire aka Zip ou tar.gz)

Toutefois ,

rsync simplifie ce processus et vous permet de transférer data sans utiliser d'espace disque supplémentaire.

Également

Les mises à jour continues (cron?) Utilisent des modifications minimes par rapport aux vitesses de copies clonées complètes Migrations de données volumineuses au fil du temps. 

tl; dr 
scp == petite échelle (avec suffisamment d'espace pour créer des fichiers compressés sur le même lecteur) 
rsync == grande échelle (avec la nécessité de sauvegarder des données volumineuses sans laisser d'espace)

0
copremesis