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:
À 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)