J'ai copié un gros fichier sur un disque USB monté sur un système Linux avec async. Cela renvoie à une invite de commande assez rapidement, mais lorsque je tape sync
, bien sûr, tout doit aller sur le disque, et cela prend beaucoup de temps.
Je comprends que ça va être lent, mais y a-t-il un endroit où je peux regarder un compteur descendre à zéro? Regarder buffers
dans top
n'aide pas.
Regarder /proc/meminfo
affichera le nombre Dirty
diminuant avec le temps à mesure que toutes les données se mettent en file d'attente; une partie peut également se répandre dans Writeback
. Ce sera un résumé de tous les appareils, mais dans les cas où un appareil sur le système est beaucoup plus lent que les autres, vous vous retrouverez généralement là où tout dans cette file d'attente lui est lié. Vous trouverez probablement le nombre Dirty
grand lorsque vous démarrez et le sync
se termine à peu près au même moment où il approche de 0. Essayez ceci pour obtenir un affichage interactif:
watch -d grep -e Dirty: -e Writeback: /proc/meminfo
Avec des disques normaux, je peux normalement ignorer Writeback
, mais je ne sais pas s'il est impliqué plus souvent dans le chemin de transfert USB. S'il rebondit de haut en bas sans tendance claire, vous pouvez probablement simplement regarder le nombre Dirty
.
Vous pouvez consulter le /sys/block/<device>/stat
fichier pour l'appareil approprié pendant la synchronisation. Le 9e La colonne indiquera le nombre de demandes en vol sur l'appareil, qui devrait descendre à zéro lorsque la synchronisation est terminée.
Je ne sais pas comment traduire cela en un certain nombre d'octets, mais cela devrait vous donner une idée approximative de la quantité de "trucs" en attente.
Voir le fichier stat.txt dans la documentation du noyau pour un peu plus d'informations. (Il y a aussi un fichier inflight
dans ce répertoire sur mon système qui semble pouvoir contenir des demandes de lecture et d'écriture en vol, mais je ne trouve pas de documentation pour cela.)
En utilisant la réponse de Greg, vous pouvez simplement exécuter sync
en arrière-plan tout en affichant l'état du bloc Dirty en mémoire.
Pour ce faire, exécutez simplement cette commande:
sync & watch -n 1 grep -e Dirty: /proc/meminfo
Cela appellera sync
en arrière-plan lors de l'exécution de watch
en avant. Lorsque la commande sync
sera terminée (environ lorsque la taille du bloc Dirty a atteint 0), vous aurez une sortie qui ressemble à ceci:
1] + 27260 done sync
Cela signifie que la commande est terminée et vous pouvez tuer la commande watch
avec Ctrl+C.