web-dev-qa-db-fra.com

Commande copier ou rsync

La commande suivante fonctionne comme prévu ...

cp -ur /home/abc/* /mnt/windowsabc/

Est-ce que rsync a un avantage sur elle? Existe-t-il un meilleur moyen de conserver le dossier de sauvegarde synchronisé toutes les 24 heures?

61
shantanuo

Rsync est préférable car il ne copiera que les parties mises à jour du fichier mis à jour, au lieu du fichier entier. Il utilise également la compression et le cryptage si vous le souhaitez. Découvrez ce tutorial .

49
marchica

rsync n’est pas nécessairement plus efficace, en raison de l’inventaire plus détaillé des fichiers et des blocs qu’il réalise. L’algorithme est fantastique, mais vous devez comprendre votre problème pour savoir s’il s’agit vraiment du meilleur choix.

Sur un très grand système de fichiers (disons plusieurs milliers ou des millions de fichiers) où les fichiers ont tendance à être ajoutés mais non mis à jour, "cp -u" sera probablement plus efficace. cp prend la décision de copier uniquement sur les métadonnées et peut tout simplement se lancer dans la copie.

Notez que vous voudrez peut-être utiliser un tampon, par exemple en utilisant tar plutôt que straight cp, en fonction de la taille des fichiers, des performances du réseau, des autres activités du disque, etc. Je trouve l’idée suivante très utile:

tar cf - . | tar xCf directory -

Les métadonnées elles-mêmes peuvent en réalité devenir une surcharge importante sur les systèmes de fichiers très volumineux (en cluster), mais rsync et cp vont partager ce problème.

rsync semble être fréquemment l'outil préféré (et dans les applications générales, c'est mon choix par défaut habituel), mais il y a probablement de nombreuses personnes qui utilisent aveuglément rsync sans y penser.

47
ckg

La commande telle que écrite créera de nouveaux répertoires et fichiers avec l’horodatage actuel ainsi que vous-même en tant que propriétaire. Si vous êtes le seul utilisateur de votre système et que vous le faites tous les jours, cela n'a pas beaucoup d'importance. Mais si la préservation de ces attributs vous importe, vous pouvez modifier votre commande avec

cp -pur /home/abc/* /mnt/windowsabc/

Le -p conservera la propriété, les horodatages et le mode du fichier. Cela peut être assez important selon ce que vous sauvegardez.

La commande alternative avec rsync serait

rsync -avh /home/abc/* /mnt/windowsabc

Avec rsync, -a indique "archive" qui conserve tous les attributs mentionnés ci-dessus. -v indique "verbose" qui répertorie simplement ce qu'il fait avec chaque fichier au fur et à mesure de son exécution. -z est laissé ici pour les copies locales, mais pour la compression, ce qui vous aidera si vous effectuez une sauvegarde sur un réseau. Enfin, le paramètre -h indique à rsync de signaler les tailles dans des formats lisibles par l’homme tels que Mo, Go, etc.

Par curiosité, j'ai lancé une copie pour amorcer le système et éviter toute distorsion par rapport à la première, puis j'ai chronométré ce qui suit sur une série de 1 Go de fichiers d'un disque SSD interne sur un disque dur connecté par USB. Ceux-ci sont simplement copiés dans des répertoires cibles vides.

cp -pur    : 19.5 seconds
rsync -ah  : 19.6 seconds
rsync -azh : 61.5 seconds

Les deux commandes semblent être à peu près les mêmes, bien que compresser et décompresser pèse évidemment sur le système où la bande passante n'est pas un goulot d'étranglement.

12
mightypile

Pour une copie locale, le seul avantage de rsync est qu’il évitera la copie si le fichier existe déjà dans le répertoire de destination. La définition de "existe déjà" est (a) le même nom de fichier (b) la même taille (c) le même horodatage. (Peut-être même propriétaire/groupe; je ne suis pas sûr ...)

"L'algorithme rsync" est idéal pour les mises à jour incrémentielles d'un fichier via un lien réseau lent, mais il ne vous en achètera pas beaucoup pour une copie locale, car il doit lire le fichier (partiel) existant pour exécuter son calcul "diff".

Ainsi, si vous exécutez fréquemment ce type de commande et que l'ensemble des fichiers modifiés est petit par rapport au nombre total de fichiers, vous devriez constater que rsync est plus rapide que cp. (Rsync a également une option --delete qui pourrait vous être utile.)

3
Nemo

Surtout si vous utilisez un système de fichiers avec copie sur écriture tel que BTRFS ou ZFS, rsync est bien meilleur.

J'utilise BTRFS, et j'ai ceci dans mon ~/.bashrc:

alias cp="rsync -ah --partial --inplace --info=progress2"

L'indicateur important ici pour les FS CoW tels que BTRFS est --inplace car il ne copie que la partie modifiée des fichiers, ne crée pas de nouveau pour les petites modifications entre les inodes des fichiers, etc. Voir this _.

3
Geremia

Ce n'est pas vraiment une question de ce qui est plus efficace.

Les commandes 'rsync' et 'cp' ne sont pas équivalentes et atteignent des objectifs différents.

1- rsync peut préserver le temps de création des fichiers existants. (en utilisant l'option -a)
2- rsync exécutera le multitraitement et le transfert en utilisant soit des sockets locaux, soit des sockets réseau. (c'est-à-dire se diviser en plusieurs processus)
3- Le multitraitement et le threading augmenteront votre débit lors de la copie d'un grand nombre de petits fichiers, et même de plusieurs fichiers plus volumineux.

Ainsi, rsync est destiné aux grandes données et cp à la copie locale plus petite. (Mo à petite gamme Go). Lorsque vous commencez à entrer dans plusieurs Go ou dans la plage TB, utilisez rsync. Et bien sûr, les copies réseau, rsync tout le chemin.

2
Ellison

Gardez à l'esprit que lors du transfert de fichiers en interne sur une machine, c'est-à-dire qu'il ne s'agit pas d'un transfert réseau, l'utilisation de l'indicateur -z peut avoir une énorme différence en termes de temps pris pour le transfert.

Transfert dans la même machine

Case 1: With -z flag:
    TAR took: 9.48345208168
    Encryption took: 2.79352903366
    CP took = 5.07273387909
    Rsync took = 30.5113282204

Case 2: Without the -z flag:
    TAR took: 10.7535531521
    Encryption took: 3.0386879921
    CP took = 4.85565590858
    Rsync took = 4.94515299797
1

si vous utilisez cp, ne sauvegardez pas les fichiers existants lors de la copie de dossiers du même nom. Disons que vous avez ces dossiers:

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

Ensuite, vous en copiez un sur l’autre:

cp /someOtherFolder/myFolder /myFolder

résultat:

/myFolder
  wellHelloThere.txt

C'est du moins ce qui se passe sous macOS et je voulais conserver les fichiers diff. J'ai donc utilisé rsync.

0
h3dkandi