395 votes

Afficher la progression totale en rsync : est-ce possible ?

J'ai déjà cherché cette option, mais je n'ai trouvé que des solutions impliquant personnalisé Parcheando . Le fait qu'il n'apparaisse pas dans --help et qu'aucune autre information ne puisse être trouvée indique probablement que la réponse est 'non', mais j'aimerais que cela soit confirmé.

Est-il possible de montrer progression totale du transfert de fichiers avec rsync ?

22 votes

Depuis rsync 3.1.0, il y a maintenant une progression de base du transfert total de fichiers inclus. Voir la réponse serverfault.com/a/441724/107793 pour les détails.

17 votes

Veuillez modifier la réponse acceptée. La réponse de @David est complètement inutile.

0 votes

607voto

Avio Points 5513

Il existe maintenant un moyen officiel de le faire dans rsync (protocole version 3.1.0 version 31, testé avec Ubuntu Trusty 14.04).

#> ./rsync -a --info=progress2 /usr .
    305,002,533  80%   65.69MB/s    0:00:01  xfr#1653, ir-chk=1593/3594)

J'ai essayé avec mon /usr parce que je voulais cette fonctionnalité pour transférer des systèmes de fichiers entiers, et /usr semblait être un bon échantillon représentatif.

El --info=progress2 donne un bon pourcentage global, même s'il ne s'agit que d'une valeur partielle. En fait, mon /usr est de plus de 6 gigas :

#> du -sh /usr
6,6G    /usr/

y rsync ça a pris beaucoup de temps pour tout scanner. Donc, presque tout le temps, le pourcentage que j'ai vu était d'environ 90% de réalisation, mais néanmoins, c'est réconfortant de voir que quelque chose est en train d'être copié :)

Références :

23 votes

Notez que cela a atterri dans la version 3.1.0. Il est également important de noter que ce n'est pas nécessairement exact dans la perspective temporelle. Il s'agit essentiellement de la quantité de données dont l'existence a été vérifiée du côté distant. Le taux est la vitesse à laquelle les données sont apprises comme étant correctes du côté distant (que ce soit déjà le cas ou que les nouvelles données aient été transférées et les aient rendues correctes). Donc, bien que très utile, vous devez comprendre les mises en garde.

31 votes

Il convient de noter que --info=progress2 ne fonctionne pas avec -v

10 votes

@sanmai : Oui, c'est vrai ! Il affiche la sortie verbeuse (quel fichier est en cours de traitement à l'heure actuelle), mais au lieu d'afficher le pourcentage de progression relative pour ce fichier individuel, il affiche la progression absolue de l'ensemble de l'opération rsync.

113voto

Nate Points 891

Ce qui suit s'applique à rsync version 3.0.0 et supérieure. Les options décrites ci-dessous ont été introduites dans cette version le 1er mars 2008.

Avec --info=progress2 vous pouvez également utiliser --no-inc-recursive (ou son raccourci --no-i-r alias) pour désactiver la récursion incrémentale.

Cela permettra de construire la liste complète des fichiers au début, plutôt que de découvrir progressivement plus de fichiers au fur et à mesure du transfert. Comme il connaîtra tous les fichiers avant de commencer, il donnera un meilleur rapport sur la progression globale. Ceci s'applique au nombre de fichiers - il n'y a pas de rapport de progression basé sur la taille des fichiers.

Cela implique un compromis. Construire la liste complète des fichiers à l'avance est plus coûteux en mémoire et peut retarder considérablement le début du transfert réel. Comme on peut s'y attendre, plus il y a de fichiers, plus le délai sera long et plus la mémoire nécessaire sera importante.

Ce qui suit est extrait du manuel rsync (source - http://rsync.samba.org/ftp/rsync/rsync.html ):

-r, --récursif

Ceci indique à rsync de copier les répertoires de manière récursive. Voir aussi --dirs (-d). À partir de rsync 3.0.0, l'algorithme récursif utilisé est maintenant un balayage incrémental qui utilise beaucoup moins de mémoire qu'auparavant et commence le transfert après que le balayage des premiers répertoires ait été effectué. Ce balayage incrémentiel n'affecte que notre algorithme récursif, et ne modifie pas un transfert non récursif. Il n'est également possible que lorsque les deux extrémités du transfert sont au moins en version 3.0.0.

Certaines options nécessitent que rsync connaisse la liste complète des fichiers, ces options désactivent donc le mode de récursion incrémental. Il s'agit de : --delete-before, --delete-after, --prune-empty-dirs, et --delay-updates. De ce fait, le mode de suppression par défaut lorsque vous spécifiez --delete est maintenant --delete-during lorsque les deux extrémités de la connexion sont au moins 3.0.0 (utilisez --del ou --delete-during pour demander explicitement ce mode de suppression amélioré). Voir aussi l'option --delete-delay qui est un meilleur choix que l'utilisation de --delete-after.

La récursion incrémentale peut être désactivée à l'aide de la commande --no-inc-recursive ou son option plus courte --no-i-r alias.

Voir aussi https://rsync.samba.org pour connaître les différences de version spécifiques (faites défiler la page vers le bas et vérifiez les liens vers les nouvelles versions).

3 votes

Merci pour cette réponse, les autres réponses aboutissent à un pourcentage qui ne cesse de monter et de descendre !

1 votes

Ce n'est pas encore parfait, car le pourcentage est toujours le rapport entre le transfert en cours et la quantité totale de données. Ainsi, si un transfert est interrompu à 40 %, le transfert suivant commencera à 0 % et se terminera à 60 %, ce qui est un peu déroutant. Néanmoins, c'est beaucoup plus clair que la réponse acceptée, à mon avis.

1 votes

Ce projet démarrera lentement, mais il est instructif et peu gourmand en ressources : nice -n 19 ionice -c 2 -n 7 rsync --archive --info=progress2 --no-inc-recursive --human-readable SRC DST

50voto

zerodeux Points 571

Vous pouvez le faire avec 'pv' ( apt-get install pv avec Debian et ubuntu). Je recommande de surveiller le nombre de fichiers transférés, car la quantité de données transférées n'est pas corrélée à la taille des fichiers mais au delta entre la source et la destination. Et en comptant les fichiers, la progression sera la même pour un grand delta et un autre avec un petit delta. Cela signifie que, dans tous les cas, l'estimation de l'ETA peut être très éloignée. L'ETA basée sur la taille ne fonctionne que si votre destination est vide, dans ce cas delta == taille de la source.

L'idée générale est d'émettre une ligne par fichier 'transféré' par rsync, et de compter ces lignes avec 'pv' :

rsync -ai /source remote:/dest | pv -les \[number of files\] >/dev/null

J'ai tendance à sauvegarder des systèmes de fichiers entiers (pour plusieurs raisons), dans ce cas, vous pouvez utiliser le logiciel beaucoup moins cher df pour obtenir le nombre de fichiers (plutôt que du o find qui traversera votre hiérarchie source une autre fois après que rsync l'ait fait). L'option -x semble s'assurer que rsync reste sur le même système de fichiers source (et ne suit pas d'autres montages internes) :

rsync -aix /source remote:/dest | pv -les $(df -i /source | perl -ane 'print $F\[2\] if $F\[5\] =~ m:^/:') >/dev/null

Si vous voulez compter les fichiers dans /source d'une manière générale, utilisez find /source|wc -l (nouvel avertissement : risque de lenteur et de lourdeur des E/S).

1 votes

Comme l'a spécifié zerodeuz, n'utilisez "df" que lorsque vous rsynchronisez la partition entière, comme dans le cas suivant df -i /source récupère le nombre d'inodes (fichiers) de toutes les partitions dans lesquelles réside /source. Sinon, utilisez 'find' pour compter les fichiers à l'intérieur d'un répertoire à l'intérieur de l'expression "$()".

1 votes

Une alternative à du o find - disons que vous terminez une copie incomplète ou que vous effectuez une mise à jour sur place avec des suppressions - est d'utiliser la fonction rsync -ai --dry-run pour obtenir la même liste de fichiers que l'exécution principale transmettra à pv

40voto

David Mackintosh Points 14093

Danakim a raison. Il n'y a pas de moyen trivial d'ajouter un indicateur de progression totale.

La raison en est que lorsque rsync examine une liste de fichiers à synchroniser, il ne sait pas à l'avance quels fichiers devront être modifiés. Si vous effectuez des transferts delta, les deltas eux-mêmes doivent être calculés à l'avance pour donner une image globale du travail à effectuer.

En d'autres termes, le moyen le plus simple de calculer la quantité de travail à accomplir est de le faire.

45 votes

Vous pouvez toujours avoir un indicateur simple comme (données transférées + données ignorées)/(données totales dans la source), ou (# de fichiers transférés ou ignorés)/(# de fichiers dans la source). Ce ne sera pas particulièrement précis, mais cela donnerait une idée. C'est utile lorsque vous effectuez un gros transfert à la fin de la journée et que vous vous demandez si vous devez attendre et éteindre l'ordinateur, ou le laisser tourner toute la nuit...

3 votes

Je ne crois pas que cette conclusion soit juste. Je pense que @naught101 est plus juste par rapport à la question, et je pense que prédire une réponse sur le fait de ne pas utiliser de --size-only ou similaire est encore plus inexacte.

3 votes

À l'époque où j'ai écrit cette réponse, elle était exacte : rsync ne disposait pas d'un mécanisme permettant d'afficher un indicateur de progression totale. Et oui, vous pourriez écrire le vôtre, mais très peu de gens le feraient.

31voto

SDD Points 272

Pour les longs transferts, je suis satisfait de la course à pied. du -s des deux côtés. Même watch -n1 du -s si je me sens vraiment anxieuse.

watch exécute une commande ( du -s ici) périodiquement (toutes les 1 secondes ici) et affiche la sortie en plein écran.

4 votes

Merci pour l'exemple de la watch commandement !

2 votes

// , Astucieux ! Selon linfo.org : "La commande du (i.e., utilisation du disque) indique la taille des arborescences de répertoires, y compris tout leur contenu, ainsi que la taille des fichiers individuels. Elle est donc utile pour repérer les fichiers et les répertoires qui consomment beaucoup d'espace sur un disque dur ou un autre support de stockage."

11 votes

Je ne sais pas quel type de transferts longs vous effectuez, où du est viable. du est très lent quand le résultat est en TB et M de fichiers.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X