cp ou rsync, cp en vaut-il vraiment la peine?

8

J'espère que cela ne compte pas comme une question sans vraie réponse, que je ne peux pas sembler trouver une bonne raison d'utiliser cp(1)plus rsync(1)dans presque toutes les circonstances. Faut - il privilégier généralement rsyncplus cp? Existe-t-il de bonnes directives pour leur utilisation?

  • rsync: Transfère les diffs, il peut utiliser la compression, il peut être utilisé à distance (et en toute sécurité), il peut être redémarré malgré une interruption, même pendant le transfert d'un seul gros fichier. "

  • cp: Peut-être que c'est plus simple à utiliser? Est-ce plus rapide que rsync?

Soyouz
la source
4
Parfois, la surcharge de comparaison représente bien plus d'efforts que la simple copie aveugle des octets.
bahamat
Même question avec une meilleure réponse: serverfault.com/questions/43014/…
Daniel

Réponses:

9

cpfait partie des coreutils, il est donc présent partout. En outre, il a été principalement conçu pour copier des fichiers sur un ordinateur.

rsyncne fait pas partie de coreutils, il n'est pas présent même dans l'environnement par défaut. De plus, il était principalement conçu pour transférer des fichiers sur le réseau. A également rsyncplus de dépendances par rapport aux coreutils, mais cette différence n'a pas beaucoup de sens.

PS: Au fait, l'utilisation du CPU est toujours importante sur les systèmes embarqués.

se ruer
la source
6

La principale raison pour laquelle vous ne voulez pas utiliser rsyncpour chaque opération de copie, c'est parce rsyncque les frais généraux sont calculés. Avant que le transfert de données ne démarre réellement, rsyncanalyse tous les fichiers. Puis, avant chaque fichier, une comparaison est effectuée. Cette surcharge n'est pas négligeable, même avec les processeurs rapides disponibles en 2012. Je fais ce type de transferts tout le temps, et sur des serveurs de taille assez décente, une fois que vous commencez à traiter des quantités de données, la surcharge peut prendre du temps.

Je ne dis pas ne pas utiliser rsync, pas du tout, utiliser rsyncquand vous pouvez économiser du temps de transfert. N'utilisez simplement pas rsyncquand cppourrait accomplir la même chose.

Ce que je fais habituellement, apportez d'abord les données en utilisant des méthodes de copie régulières. Ensuite, rsyncpour les modifications ultérieures, c'est à ce moment-là que ces différences peuvent être exploitées.

JM Becker
la source
Est-ce un prix élevé à payer, étant donné la puissance de nos processeurs aujourd'hui?
Soyouz
3
Large est subjectif et changerait en fonction du nombre de fichiers, de la taille des données et des E / S. Mon point principal serait que ce n'est pas insignifiant quels que soient les processeurs d'aujourd'hui. Une chose à retenir est que les processeurs d'aujourd'hui doivent encore gérer les données d'aujourd'hui.
JM Becker
D'accord. Les processeurs ne deviennent pas plus rapides dans le vide. L'une des meilleures raisons que nous ayons pour les processeurs GHz est la mise en réseau gigabit: un processeur plus lent ne peut tout simplement pas garder un tuyau d'E / S aussi gros. Les ordinateurs ont tendance à être aussi bien équilibrés que nous savons les fabriquer. Supprimez une partie de la puissance du processeur et une partie de la capacité d'E / S devient inactive. Augmentez la demande d'E / S et le processeur finit par tourner au ralenti davantage, attendant les E / S.
Warren Young
3

Je m'attendrais cpà utiliser moins de CPU lors de la copie locale car il n'utilise pas de différences alors qu'il rsyncpeut réduire les écritures lors de l'utilisation de différences. La compression doit être évitée localement car vous devez lire et écrire tout le fichier / diff de toute façon et cela nécessite des calculs supplémentaires.

scai
la source
Donc, tout se résume au coût du processeur ou au coût des E / S
Soyuz
2
@soyuz, c'est vrai pour les données qui ont changé, en référence à d'autres données. Plus le diff est petit, plus il rsyncest préférable. Mais quand il n'y a pas de différence, cela rsyncn'apporte que des frais généraux sans avantage supplémentaire.
JM Becker
@TechZilla Je pense que vous voulez dire, quand il n'y a rien en commun. S'il n'y a pas de différence, rsync s'arrêtera tôt car il n'y a rien à copier, ce qui le rend beaucoup plus préféré.
Izkata
@Izkata: Il y a au moins un moyen rsyncd'avoir deux fois la surcharge d'E / S pour deux fichiers identiques par rapport à l'aveugle cp: un temps de modification changé. Vous auriez à donner --size-onlypour résoudre ce problème. La seule autre façon de voir cela serait de rsyncse fier aux sommes de contrôle du système de fichiers, mais pour la plupart des systèmes de fichiers, ce ne sont pas de très bons prédicteurs statistiques de l'identité.
Warren Young
3

Indépendamment des frais généraux dans le cas d'un différentiel volumineux ou inexistant, rsyncil ne semble pas avoir d'équivalent de cp --reflink=always, ce qui peut enregistrer une énorme quantité de données si la copie dans un système de fichiers qui le prend en charge (il crée des copies de copie sur écriture, donc les données en commun entre l'original et la copie (qui est, bien sûr, initialement la totalité) ne sont stockées qu'une seule fois). rsyncest cependant meilleur pour mettre à jour les copies CoW, en utilisant --inplace.

Darael
la source