web-dev-qa-db-fra.com

rsync --info = progress2 Pourcentage de la copie d'un répertoire volumineux non uniforme?

rsync --info = progress2 pour cent de la copie d'un répertoire volumineux n'est pas uniforme en ce sens que les derniers 10% semblent prendre plus de temps que les premiers 90%.

Pourquoi s'agit-il et existe-t-il un moyen d'en faire un indicateur de progrès plus uniforme?

1
eyn

La raison du comportement observé est probable a cache du système de fichiers:

Lorsque des fichiers sont écrits (comme le fait rsync), les données sont généralement d'abord écrites dans un cache (en mémoire) et l'opération d'écriture est presque instantanément renvoyée. Les données sont ensuite écrites sur le disque en arrière-plan, tandis que l'utilisateur peut déjà faire autre chose.

Si le cache est assez grand pour contenir les données à écrire, cela suppose une vitesse d'écriture énorme.

Si les données à écrire ne rentrent pas dans le cache du système de fichiers, les données excédentaires sont réellement écrites sur le disque avant la fin de l'opération d'écriture, et l'écriture sur le disque est plus lente que l'écriture dans le cache en mémoire.

Les données excédentaires ne ne contournent pas le cache, mais attendent que le contenu précédent ait été déplacé du cache sur le disque, ce qui laisse un peu d'espace libre dans le cache. , afin que les nouvelles données puissent être écrites dans le cache.

Ainsi, la première partie des données (90% dans votre cas) semble être écrite en un instant (pour la mise en cache), tandis que les 10% restants prennent plus de temps, car le fonctionnement réel du disque commence.

2
PerlDuck

En plus de la réponse de PerlDuck, il convient de noter que l'écriture d'un seul fichier volumineux est plus rapide que l'écriture d'un très grand nombre de fichiers ayant la même taille.

Par exemple: Vous copiez un fichier de 4 Go et un répertoire contenant 100 000 fichiers qui ajoutent jusqu'à 1 Go. Si le fichier unique est transféré en premier, les 80 premiers% seront bien plus rapides que les 20% précédents.

1
danzel