Pv
| Fiche express | |
|---|---|
| Domaine | Suivi de progression sur un flux/pipe |
| Commande | pv
|
| Paquet | pv (dépôts standards Debian/Ubuntu et RHEL/CentOS via EPEL)
|
| Voir aussi | Dd (copie bloc à bloc, souvent combiné avec pv) |
pv (pipe viewer) s'insère dans un pipe pour afficher une barre de progression, le débit
instantané, le temps écoulé et, si la taille totale est connue, une estimation du temps
restant (ETA). Il se comporte comme cat : il lit son entrée standard (ou un
fichier passé en argument) et la recopie sur sa sortie standard, sans modifier les données —
il ne fait qu'observer ce qui transite.
Installation
# Debian / Ubuntu
apt install pv
# RHEL / CentOS (dépôt EPEL requis)
yum install epel-release
yum install pv
Usage de base
Insérer pv au milieu d'un pipe pour suivre un transfert dont on ne connaît pas forcément l'avancement autrement :
pv fichier.sql | mysql -u root basedejournaux
pv archive.tar.gz | tar xz -C /destination
tar czf - /var/www | pv | ssh serveur_distant "cat > backup.tar.gz"
pv affiche par défaut, tant que la commande tourne, la quantité de données déjà transférée,
le débit courant et le temps écoulé. Sans indication de taille totale, il ne peut pas estimer
de pourcentage ni d'ETA — voir l'option -s ci-dessous pour lever cette limite.
Combiné avec dd : suivre une copie de disque
Dd ne fournit par défaut aucune indication de progression pendant une copie de disque ou d'image, ce qui rend un clonage long anxiogène (aucun moyen de savoir où on en est). En insérant pv entre la lecture et l'écriture, on retrouve une barre de progression exploitable :
dd if=/dev/sda bs=4M | pv | dd of=/dev/sdb bs=4M
Le premier dd lit le disque source, pv observe le flux au passage et affiche la
progression, le second dd écrit sur le disque de destination. Le résultat final
est identique à un dd if=/dev/sda of=/dev/sdb direct, mais avec un retour visuel
en continu.
-s : indiquer la taille totale pour un ETA précis
Sans -s, pv affiche uniquement les octets déjà transférés (pas de pourcentage
utile). En précisant la taille totale attendue, il calcule un pourcentage d'avancement et une
estimation du temps restant beaucoup plus fiable :
# Taille connue à l'avance (ex : taille du disque source)
dd if=/dev/sda bs=4M | pv -s 500G | dd of=/dev/sdb bs=4M
# Récupérer automatiquement la taille d'un disque/partition
pv -s "$(blockdev --getsize64 /dev/sda)" /dev/sda | dd of=/dev/sdb bs=4M
-L : limiter le débit
-L (ou --rate-limit) plafonne le débit que pv laisse passer dans le
pipe, ce qui est utile pour éviter de saturer un lien réseau ou un disque partagé avec
d'autres usages pendant un transfert volumineux :
# Limiter à 10 Mo/s pendant une copie vers un serveur distant
tar czf - /var/www | pv -L 10m | ssh serveur_distant "cat > backup.tar.gz"
# Copie de disque bridée à 50 Mo/s pour ne pas saturer le lien vers le NAS
dd if=/dev/sda bs=4M | pv -L 50m | dd of=/dev/sdb bs=4M
Voir aussi
- Dd — copie et conversion bloc à bloc, souvent combiné avec pv pour suivre une progression