122 votes

Commande de copie ou rsync

La commande suivante fonctionne comme prévu...

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

Est-ce que rsync a un avantage quelconque sur lui ? Existe-t-il un meilleur moyen de synchroniser le dossier de sauvegarde toutes les 24 heures ?

87voto

marchica Points 971

Rsync est meilleur puisqu'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. Consultez cette page tutoriel .

76voto

ckg Points 521

Rsync n'est pas nécessairement plus efficace, en raison de l'inventaire plus détaillé des fichiers et des blocs qu'il effectue. L'algorithme est fantastique dans ce qu'il fait, mais vous devez comprendre votre problème pour savoir si c'est vraiment le meilleur choix.

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

Notez que vous pouvez avoir besoin d'une mise en mémoire tampon, par exemple en utilisant tar plutôt qu'un simple cp, en fonction de la taille des fichiers, des performances du réseau, de l'activité des autres disques, etc. Je trouve l'idée suivante très utile :

tar cf - . | tar xCf directory -

Les métadonnées elles-mêmes peuvent en fait devenir une surcharge importante sur les très grands systèmes de fichiers (en grappe), mais rsync et cp partageront ce problème.

rsync semble souvent être l'outil préféré (et dans les applications générales, c'est mon choix par défaut), mais il y a probablement beaucoup de gens qui utilisent rsync aveuglément sans y réfléchir.

29voto

mightypile Points 316

La commande telle qu'elle est écrite créera de nouveaux répertoires et fichiers avec la date et l'heure actuelles, et vous-même comme propriétaire. Si vous êtes le seul utilisateur de votre système et que vous faites cela quotidiennement, cela n'a peut-être pas beaucoup d'importance. Mais si la préservation de ces attributs est importante pour vous, vous pouvez modifier votre commande avec

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

L'option -p préservera la propriété, l'horodatage et le mode du fichier. Cela peut être assez important en fonction de ce que vous sauvegardez.

La commande alternative avec rsync serait

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

Avec rsync, -a indique "archive" qui préserve tous les attributs mentionnés ci-dessus. -v indique "verbose" qui liste simplement ce qui est fait avec chaque fichier pendant l'exécution. -z n'est pas utilisé ici pour les copies locales, mais il permet la compression, ce qui sera utile si vous sauvegardez sur un réseau. Enfin, le -h indique à rsync de rapporter les tailles dans des formats lisibles par l'homme comme MB, GB, etc.

Par curiosité, j'ai exécuté une copie pour amorcer le système et éviter de biaiser la première exécution, puis j'ai chronométré ce qui suit sur un test de 1 Go de fichiers d'un disque SSD interne vers un disque dur connecté en USB. Ces fichiers ont simplement été 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 la compression et la décompression taxent évidemment le système lorsque la bande passante n'est pas un goulot d'étranglement.

10voto

Geremia Points 162

Surtout si vous utilisez un système de fichiers à copie en écriture comme BTRFS ou ZFS, rsync est bien meilleur.

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

alias cp="rsync -ah --inplace --no-whole-file --info=progress2"

L'indicateur important ici pour les FS CoW comme BTRFS est le suivant --inplace parce qu'il ne copie que la partie modifiée des fichiers, ne crée pas de nouveaux pour les petits changements entre les inodes des fichiers, etc. Voir ce .

8voto

Ellison Points 31

Il ne s'agit pas vraiment de savoir ce qui est le plus efficace.

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

1- rsync peut conserver l'heure de création des fichiers existants. (en utilisant l'option -a)
2- rsync fonctionnera en multiprocessus et transférera en utilisant soit des sockets locaux, soit des sockets réseau. (c'est-à-dire qu'il se divise lui-même 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 importants.

En résumé, rsync est pour les données volumineuses, et cp pour les copies locales plus petites. (de l'ordre du Mo au petit Go). Lorsque vous commencez à avoir des données de plusieurs Go ou de l'ordre du TB, utilisez rsync. Et bien sûr, pour les copies réseau, c'est rsync qui s'impose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X