En quoi «scp» diffère-t-il de «rsync»?


241

Un article sur la configuration des blogs Ghost dit d'utiliser scppour copier de ma machine locale vers un serveur distant:

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

Cependant, Railscast 339: Chef Solo Basics utilise scppour copier dans la direction opposée (du serveur distant vers la machine locale):

scp -r root@178.xxx.xxx.xxx:/var/chef .

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

rsync -r . root@178.xxx.xxx.xxx:/var/chef

Pourquoi utiliser la rsynccommande if scpva copier dans les deux sens? En quoi scpdiffère- rsynct-il?


en plus d'être plus simple et toujours crypté, personne n'a signalé quoi que ce soit que scp puisse faire mieux que "rsync -aA". je préfère "rsync -aAX - supprimer la source dest". extraire bsync pour une synchronisation bidirectionnelle.
Tomachi

Réponses:


345

La principale différence entre ces outils réside dans la façon dont ils copient les fichiers.

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

rsynccopie é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 beaucoup plus rapide. Considérez l'appel.

rsync A host:B
  • rsyncvérifiera la taille des fichiers et les horodatages de modification de A et B , et ignorera tout traitement supplémentaire s'ils correspondent.

  • 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 sur le câble.

  • rsyncécrit les données dans un fichier temporaire T , puis remplacer le fichier de destination B avec T pour faire le look de mise à jour « atomique » à des processus qui pourraient utiliser B .

Une autre différence entre eux concerne l'invocation. rsynca une pléthore d'options de ligne de commande, permettant à l'utilisateur d'affiner son comportement. Il prend en charge des règles de filtrage complexes, s'exécute en mode batch, en mode démon, etc. scpne dispose que de quelques commutateurs.

En résumé, utilisez scppour vos tâches quotidiennes. Commandes que vous saisissez de temps en temps sur votre shell interactif. Il est plus simple à utiliser et, dans ces cas, les rsyncoptimisations n'aideront pas beaucoup.

Pour les tâches récurrentes, comme les crontravaux, utilisez rsync. Comme mentionné, lors de plusieurs invocations, il tirera parti des données déjà transférées, en effectuant très rapidement et en économisant des ressources. C'est un excellent outil pour garder deux répertoires synchronisés sur un réseau.

En outre, lorsque vous traitez des fichiers volumineux, utilisez rsyncl' -Poption. Si le transfert est interrompu, vous pouvez le reprendre là où il s'est arrêté en relançant la commande. Voir la réponse de Sid Kshatriya .


14
Vous dites d'utiliser scp pour vos tâches quotidiennes. D'après votre explication et l'OP, il apparaît que l'interface des deux outils lorsqu'ils sont utilisés sans options est identique. Si rsync a une implémentation supérieure et que les interfaces sont les mêmes, pourquoi ne pas toujours utiliser rsync?
Alex

5
Leur interface n'est pas la même, même sans options. Rsync a une interprétation spéciale d'une barre oblique de fin sur l'argument source (synchroniser le répertoire lui-même par rapport à son contenu). Il pourrait y avoir d'autres problèmes, je ne suis pas sûr.
Rafa

2
En outre, je suppose qu'il scpest plus susceptible d'être disponible sur un système de type Unix, vous évitez donc de temps en temps une "commande introuvable" ennuyeuse.
Rafa

2
@ erikb85 rsync a le drapeau -P qui affichera une barre de progression et permettra de reprendre à partir d'un transfert partiellement terminé. digitalocean.com/community/tutorials/…
Ben

1
Une autre différence d'interface entre scpet rsync: rsync -aversus scp -rppour conserver les temps de modification et les autorisations.
Rafa

71

rysnc peut être utile pour fonctionner sur des connexions lentes et peu fiables. Donc, si votre téléchargement s'interrompt au milieu d'un gros fichier, rysnc pourra continuer à partir de là où il s'était arrêté lors d'un nouvel appel.

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

L'option -P conserve les fichiers partiellement téléchargés et indique également la progression.

Comme d'habitude, vérifiez man rsync


32

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

1. Performance sur latence

  • scp : scp est relativement moins optimiser et vitesse

  • 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 elle-même est interrompue, vous pouvez la reprendre autant de fois que vous le souhaitez en tapant la même commande. rsync redémarrera automatiquement le transfert là où il s'était 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 userid@remotehost.com:bigdata.tgz ./bigdata.tgz 

L' -Poption est la même que pour --partial --progresspermettre à rsync de fonctionner avec des fichiers partiellement téléchargés. L' --rsh=sshoption indique à rsync d'utiliser ssh comme shell distant.

4. Sécurité:

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

document homme pour en savoir plus:

tableau des performances


Merci pour cette nouvelle réponse, notamment pour la partie sécurité.
zhihong

sur de nombreux systèmes, ssh est utilisé par défaut. serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
qwr

2
À propos de la sécurité, à partir des notes de publication d' 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.
téléchargement le

6

Une caractéristique majeure de rsyncover scp(à côté de l'algorithme delta et du chiffrement s'il est utilisé avec ssh) est qu'il vérifie automatiquement si le fichier transféré a été transféré correctement. Scp ne le fera pas, ce qui pourrait occasionnellement entraîner une corruption lors du transfert de fichiers plus volumineux. Donc en général rsync est une copie avec garantie .

Les pages de manuel Centos mentionnent ceci à la fin de la --checksumdescription de l' option:

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


5

Il y a une distinction pour moi qui scpest toujours cryptée avec ssh (shell sécurisé), alors qu'elle rsyncn'est pas nécessairement cryptée. Plus précisément, rsyncn'effectue aucun chiffrement seul; il est toujours capable d'utiliser d'autres mécanismes (ssh par exemple) pour effectuer le chiffrement.

En plus de la sécurité, le cryptage a également un impact majeur sur votre vitesse de transfert, ainsi que la surcharge du processeur. (Mon expérience est que cela rsyncpeut être beaucoup plus rapide que scp.)

Consultez cet article pour savoir quand le rsynccryptage est activé.


1

scp est préférable pour un fichier.
OU une combinaison de tar& compression pour les petits ensembles de données comme les arbres de code source avec de petites ressources (par exemple : images, sqlite, etc. ).


Pourtant , lorsque vous commencez à traiter des volumes plus importants, dites:

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

Il devient peu pratique de construire un fichier zip / tar.gz à transférer avec scp à ce stade, jusqu'aux limites physiques du serveur hébergé.

À titre d'exercice, vous pouvez faire quelques gymnastique comme la tuyauterie tardans sshet redirigeant les résultats dans un distant fichier. (évitant d'avoir à créer un swap ou un clone temporaire aka zip ou tar.gz)

Cependant ,

rsync simplifie ce processus et vous permet de transférer des données sans consommer d'espace disque supplémentaire.

Aussi ,

Les mises à jour continues (cron?) Utilisent des changements minimes par rapport aux copies clonées complètes accélèrent les migrations de données importantes au fil du temps.

tl; dr
scp == petite échelle (avec de la place 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 et pas de place)


-1

il vaut mieux penser dans un contexte pratique. Dans notre équipe, nous utilisons rsync -aPpour remplacer un mauvais hôte cassandra dans notre cluster. Nous ne pouvons pas faire cela avec scp (lent et pas de préservation des progrès).


N'apportant pas vraiment quoi que ce soit non encore mentionné dans les autres réponses. De plus, nous ne devrions même pas répondre aux questions hors sujet.
Dan Cornilescu

1
@DanCornilescu décrit un cas d'utilisation dans un scénario réel, ce qui permet aux autres de comprendre facilement la différence. Je ne vois pas d'autres réponses similaires
del bao

2
Voir -P expliqué et notes liées à la lenteur / vitesse dans les réponses de Sid et Rafa.
Dan Cornilescu
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.