Question Copier une grande arborescence de répertoires localement? cp ou rsync?


Je dois copier une grande arborescence de répertoires, environ 1,8 To. C'est tout local. Par habitude j'utiliserais rsync, cependant je me demande s’il ya beaucoup à dire, et si je devrais plutôt utiliser cp.

Les autorisations et uid / gid m'inquiètent, car ils doivent être conservés dans la copie (je sais que rsync le fait). Ainsi que des choses comme des liens symboliques.

La destination est vide, je n'ai donc pas à m'inquiéter de la mise à jour conditionnelle de certains fichiers. C'est tout le disque local, ainsi je n'ai pas à m'inquiéter de ssh ou du réseau.

La raison pour laquelle je serais tenté de ne pas utiliser rsync, c'est parce que rsync pourrait en faire plus que ce dont j'ai besoin. Fichiers de sommes de contrôle rsync. Je n’en ai pas besoin, et je crains que cela ne prenne plus de temps que cp.

Alors, que comptez-vous, rsync ou cp?


217
2017-07-20 14:36


origine


Si rsync fait exactement ce que vous voulez, si vous connaissez déjà bien son utilisation pour cette application particulière et si elle fonctionne assez rapidement pour répondre à vos goûts, pourquoi voudriez-vous changer? - eleven81
Parce que je crains que rsync ne prenne plus de temps que cp, car rsync effectue de nombreuses vérifications que cp ne fera pas - Rory
Le temps système de la somme de contrôle est peu élevé par rapport à celui du disque / réseau. À moins que le disque ne se trouve sur le même système et que le système d'exploitation ne puisse effectuer une copie astucieuse d'unité de disque dans le contrôleur de bus. - Martin Beckett
La vérification est effectuée sur des fichiers qui diffèrent par la vérification de la taille et de l'horodatage. Si vous êtes paranoïaque (comme après une panne de courant pendant la copie), vous pouvez forcer la vérification sur tous les fichiers, mais sur un transfert local, c'est généralement plus lent que de recommencer à zéro. - korkman
Peut-être est-il curieux d'améliorer son flux de travail et ne plonge pas la tête dans le sable en pensant qu'il sait tout. Ce commentaire m'agace vraiment. - Martin Konecny


Réponses:


J'utiliserais rsync car cela signifie que s'il est interrompu pour une raison quelconque, vous pouvez le redémarrer facilement avec un coût très faible. Et étant rsync, il peut même redémarrer à mi-chemin à travers un fichier volumineux. Comme d'autres le mentionnent, il peut facilement exclure des fichiers. Le moyen le plus simple de préserver la plupart des choses est d’utiliser le -a flag - 'archive. ’Ainsi:

rsync -a source dest

Bien que les UID / GID et les liens symboliques soient préservés par -a (voir -lpgo), votre question implique que vous souhaitiez peut-être un plein copie des informations du système de fichiers; et -a n'inclut pas les liens en dur, les attributs étendus ni les ACL (sous Linux) ou les éléments ci-dessus ni ressources forks (sur OS X.) Ainsi, pour une copie robuste d'un système de fichiers, vous devez inclure ces indicateurs:

rsync -aHAX source dest # Linux
rsync -aHE source dest  # OS X

Le cp par défaut va recommencer, bien que le -u le drapeau sera "Copier uniquement lorsque le fichier SOURCE est plus récent que le fichier de destination ou lorsque le fichier de destination est manquant". Et le -a (archive) sera récursif, pas une copie des fichiers si vous devez redémarrer et conserver les autorisations. Alors:

cp -au source dest

188
2017-07-20 14:40



Le drapeau -u de cp n'est probablement pas la meilleure solution car il ne détecterait pas un fichier partiellement copié / corrompu. La bonne chose à propos de rsync est que vous pouvez lui demander de faire la somme des fichiers md5 pour détecter les différences. - Chad Huneycutt
Ajouter l’option -w (--whole-file) accélèrerait l’interruption de rsync, car cela ne ferait que copier le fichier au lieu du checksum. - hayalci
En fait, rsync détecte les transferts locaux et permet la copie de fichiers entiers sans contrôle automatique. - korkman
et --progress qui est vraiment pratique! - Matt
-P ou --progress affiche la progression de chaque fichier individuellement. C'est utile pour copier des fichiers volumineux, pas pour beaucoup (milliers) de petits fichiers car cela signifie beaucoup plus de sorties que vous ne pouvez pas lire. Il ne montre pas la progression générale de tous les fichiers combinés. - SPRBRN


Lors de la copie sur le système de fichiers local, j'utilise toujours les options suivantes de rsync:

# rsync -avhW --no-compress --progress /src/ /dst/

Voici mon raisonnement:

-a is for archive, which preserves ownership, permissions etc.
-v is for verbose, so I can see what's happening (optional)
-h is for human-readable, so the transfer rate and file sizes are easier to read (optional)
-W is for copying whole files only, without delta-xfer algorithm which should reduce CPU load
--no-compress as there's no lack of bandwidth between local devices
--progress so I can see the progress of large files (optional)

J'ai constaté 17% de transferts plus rapides en utilisant les paramètres rsync ci-dessus par rapport à la commande tar suivante, comme le suggère une autre réponse:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

89
2018-05-07 19:09



J'ai l'erreur suivante: rsync: --no-compress: unknown option @ Ellis Percival. - alper
C'est rapide comme l'éclair. Plus rapide que cela rm -rf /src/. - dgo
Comme @alper, --no-compress n'était pas une option pour ma version de rsync (dans CentOS 7); J'ai utilisé --compress-level = 0 à la place. - Paul


Lorsque je dois copier une grande quantité de données, j'utilise généralement une combinaison de tar et de rsync. La première passe est de le goudronner, quelque chose comme ceci:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

Généralement, avec une grande quantité de fichiers, tar ne peut pas en gérer pour une raison quelconque. Ou bien le processus sera peut-être interrompu ou, s’il s’agit d’une migration de système de fichiers, vous pouvez effectuer la copie initiale avant l’étape de migration proprement dite. Quoi qu'il en soit, après la copie initiale, je fais une étape rsync pour tout synchroniser:

# cd /dst; rsync -avPHSx --delete /src/ .

Notez que le slash de fin sur /src/ est important.


78
2017-07-20 15:15



+1 J'ai trouvé que tar était généralement plus rapide pour les grandes copies que pour rsync. J'aime aussi l'idée de terminer avec une dernière rsync. - Geoff Fritz
tar est un bon choix si le répertoire de destination est vide. Bien que ma voie soit: cd $ DSTDIR; tar c -C $ SRCDIR. | le goudron - asdmin
C'est la beauté de cette méthode. Vous n'avez pas besoin de doubler l'espace car vous ne créez jamais de fichier tar intermédiaire. Le goudron situé avant le tuyau rassemble les données et les diffuse sur stdout, et le goudron après le tuyau les récupère de stdin et les décompresse. - Chad Huneycutt
J'ai fait un cp-a pour un transfert de 12gb, et cette méthode pour un transfert de 42gb. La méthode du goudron a pris environ un quart du temps. - NGaida
J'ai aussi mis pv au milieu pour pouvoir suivre les progrès, en estimant la taille de toutes les données en utilisant df. J'ai aussi utilisé --numeric-owner, car le disque source était d'un autre système et je ne voulais pas tar déranger les propriétaires: tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp - Petr Pudlák


rsync

Voici le rsync que j'utilise, je préfère cp pour les commandes simples, pas ceci.

$ rsync -ahSD --ignore-errors --force --delete --stats $SRC/ $DIR/

cpio

Voici un moyen encore plus sûr, cpio. C'est à peu près aussi rapide que le goudron, peut-être un peu plus vite.

$ cd $SRC && find . -mount -depth -print0 2>/dev/null | cpio -0admp $DEST &>/dev/null

le goudron

C'est aussi bon, et continue sur les échecs de lecture.

$ tar --ignore-failed-read -C $SRC -cf - . | tar --ignore-failed-read -C $DEST -xf -

Notez que ce ne sont que des copies locales.


13
2018-02-26 17:06



Pourquoi utilisez-vous les indicateurs -S et -D pour rsync? - miyalys


rsync -aPhW --protocol=28 aide à accélérer ces grandes copies avec RSYNC. Je vais toujours au rsync parce que la pensée d'être à mi-chemin de 90GiB et cela me fait peur de CP


6
2017-07-20 16:24



Quelle est la valeur d'utiliser l'ancien protocole dans cette chaîne de commande? - ewwhite
Sur une machine Mac, l'ancienne version de Rsync livrée est suspendue à certaines versions du protocole rsync plus récentes, telles que la version 29. Le fait de lui dire de passer à l'ancien protocole ne le vérifie PAS encore et encore. - oneguynick
Je suppose que le numéro 28 n'est plus valide? - SPRBRN


le rsync commande calcule toujours des sommes de contrôle sur chaque octet transféré.

L'option de ligne de commande --checksum concerne uniquement si les sommes de contrôle des fichiers sont utilisées pour déterminer les fichiers à transférer ou non, à savoir:

-c, --checksum  sauter en fonction de la somme de contrôle, pas du temps et de la taille du mod "

La page de manuel dit aussi ceci:

Notez que rsync vérifie toujours que chaque fichier transféré a été correctement reconstruit du côté de la réception en vérifiant la somme de contrôle de l'ensemble du fichier, mais que la vérification automatique après le transfert n'a rien à voir avec l'option de cette option avant le transfert. à mettre à jour?" vérifier.

Alors rsync aussi, toujours, calcule une somme de contrôle de la totalité du fichier du côté de la réception, même lorsque -c/ --checksum l'option est "off".


6
2017-11-28 01:20



Bien que votre message ajoute des informations intéressantes ici, les coups de gueule et les insultes diminuent la valeur de votre message. Ce site n'est pas un forum pour des coups de gueule non constructifs. Si vous avez pu modifier le source, avez-vous soumis vos modifications sous forme de correctif? Avez-vous posté votre version sur github ou quelque chose? Si cela vous tient à cœur, il serait peut-être préférable d'essayer de faire quelque chose de plus constructif au lieu d'être insultant inutilement. - Zoredache
Oui, le dernier paragraphe n'était pas vraiment nécessaire. - Sherwin Flight


Ce que tu préfères. Juste n'oublie pas le -a changez lorsque vous décidez d'utiliser cp.

Si vous avez vraiment besoin d'une réponse: j'utiliserais rsync parce que c'est beaucoup plus flexible. Besoin d'arrêter avant la fin de la copie? Juste ctrl-c et reprendre dès que votre dos. Besoin d'exclure certains fichiers? Juste utiliser --exclude-from. Besoin de changer de propriétaire ou d'autorisations? rsync le fera pour vous.


5
2017-07-20 14:40



Que fait encore le drapeau -p? - Rory
Il préserve la propriété, les horodatages et les autorisations. - innaM
cp -a serait mieux. - David Pashley
Effectivement. La réponse a changé en conséquence. - innaM