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 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 veut copier des fichiers sur le serveur distant (même sens que dans le premier exemple), il utilise rsync :

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

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

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

scp lit essentiellement le fichier source et l’écrit à 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 beaucoup 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 de B , et ignorera tout autre traitement 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 écrira les données dans un fichier temporaire T , puis remplacera le fichier de destination B par T pour que la mise à jour soit “atomique” par rapport aux processus susceptibles d’utiliser B.

Une autre différence concerne l’invocation. rsync a une pléthore d’options en ligne de commande, permettant à l’utilisateur d’affiner son comportement. Il supporte des règles de filtrage complexes, fonctionne en mode batch, en mode démon, etc. scp ne dispose que de quelques commutateurs.

En résumé, utilisez scp pour vos tâches quotidiennes. Commandes que vous tapez de temps en temps sur votre shell interactif. Il est plus simple à utiliser et, dans ce cas, les optimisations rsync ne seront d’aucune aide.

Pour les tâches récurrentes, comme les tâches cron , utilisez rsync . Comme mentionné, sur les invocations multiples, 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 répertoires synchronisés sur un réseau.

En outre, lorsque vous utilisez des 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 la réponse de Sid Kshasortingya.

rysnc peut être utile pour exécuter des connexions lentes et peu fiables. Ainsi, si votre téléchargement s’interrompt au milieu d’un fichier volumineux, rysnc pourra continuer là où il s’est arrêté lorsqu’il a été appelé à nouveau.

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érifiez l’ man rsync

Il y a une distinction pour moi que scp est toujours chiffré avec ssh (shell sécurisé), alors que rsync n’est pas nécessairement chiffré. Plus précisément, 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 chiffrement.

En plus de la sécurité, le chiffrement a également un impact majeur sur votre vitesse de transfert, ainsi que sur le temps système du processeur. (Mon expérience est que rsync peut être beaucoup plus rapide que scp .)

Consultez ce post pour savoir quand rsync a le cryptage rsync .

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 la page de manuel (centos) à la fin de la description de l’option --checksum :

Notez que rsync vérifie toujours que chaque fichier transféré a été correctement reconstruit du côté réception en vérifiant une sum de contrôle de fichier complète générée lors du transfert du fichier, mais que la vérification automatique après transfert n’a rien à voir avec cette option. le transfert «Ce fichier doit-il être mis à jour?

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

scp est le meilleur pour un fichier.
OU une combinaison de tar et de compression pour des ensembles de données plus petits, tels que des arborescences de code source avec de petites ressources ( ex : images, sqlite, etc. ).


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

  • dossiers multimédia (40 Go)
  • sauvegardes de firebase database (28 Go)
  • Bibliothèques mp3 (100 Go)

À ce stade, il devient impossible de créer un fichier zip / tar.gz à transférer avec scp sur les limites physiques du serveur hébergé.

En guise d’exercice, vous pouvez faire de la gymnastique, comme redirect tar dans ssh et redirect les résultats dans un fichier distant . (en évitant la nécessité de créer un swap ou un clone temporaire appelé zip ou tar.gz)

Cependant ,

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

Aussi ,

Les mises à jour continues (cron?) Utilisent des modifications minimales par rapport aux copies clonées complètes, ce qui accélère les migrations de données importantes au fil du temps.

tl; dr
scp == small scale (avec de l’espace pour construire des fichiers compressés sur le même lecteur)
rsync == à grande échelle (avec la nécessité de sauvegarder des données volumineuses et plus de place)