Comment suivez-vous la progression de dd?

dd c'est une merveille. Il vous permet de dupliquer un disque dur sur un autre, de supprimer complètement un disque dur, etc. Mais une fois que vous lancez un dd cependant, rien ne vous dit de sa progression. Il reste juste là au niveau du curseur jusqu'à ce que la commande se termine enfin. Alors, comment surveille-t-on les progrès de dd?

Mise à jour 2016>: Si vous utilisez GNU coreutils = 8.24 (par défaut dans Ubuntu Xenial à partir de 16.04), reportez-vous à la méthode 2 ci-dessous pour une autre façon d'afficher la progression.


Méthode 1: En utilisant pv

Installer pv et le mettre entre entrée / sortie uniquement dd commande.

Note: vous ne pouvez pas l'utiliser lorsque vous avez déjà commencé dd.

De la description du paquet:

pv - Pipe Viewer - est un outil basé sur un terminal pour surveiller la progression des données dans un pipeline. Il peut être inséré dans n'importe quel pipeline normal entre deux processus pour donner une indication visuelle de la rapidité avec laquelle les données transitent, du temps qu'il a fallu, de la proximité de leur achèvement et d'une estimation du temps qu'il faudra jusqu'à l'achèvement.

Installation

sudo apt-get install pv

Exemple

dd if=/dev/urandom | pv | dd of=/dev/null

Sortie

1,74MB 0:00:09 [ 198kB/s] [      <=>                               ]

Vous pouvez spécifier la taille approximative avec le --size si vous voulez une estimation du temps.


Exemple En supposant qu'un disque de 2 Go est copié à partir de /dev / sdb

Commande sans pv serait:

sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096

Commande avec pv:

sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096

Sortie:

440MB 0:00:38 [11.6MB/s] [======>                             ] 21% ETA 0:02:19

Autres utilisations

Vous pouvez bien sûr utiliser pv directement pour diriger la sortie vers stdout:

pv /home/user/bigfile.iso | md5sum

Sortie

50,2MB 0:00:06 [8,66MB/s] [=======>         ] 49% ETA 0:00:06

Notez que dans ce cas, pv reconnaît la taille automatiquement.


Méthode 2: Nouveau status option ajoutée à dd (GNU Coreutils 8.24+)

dd dans GNU Coreutils 8.24+ (Ubuntu 16.04 et plus récent) a obtenu un nouveau status option pour afficher la progression:

Exemple

dd if=/dev/urandom of=/dev/null status=progress

Sortie

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

De HowTo: Suivre les progrès de dd

Vous pouvez surveiller la progression de dd une fois qu'il est en cours d'exécution sans l'arrêter en utilisant le kill commande pour envoyer un signal au processus.

Après avoir commencé dd, ouvrez un autre terminal et entrez soit:

sudo kill -USR1 $(pgrep ^dd$)

Ou, si vous êtes sur BSD ou OS X:

sudo kill -INFO $(pgrep ^dd$)

Cela affichera la progression dans le dd fenêtre du terminal sans arrêter le processus (en imprimant dans son flux stderr). Exemple:

# dd if=/dev/urandom of=rando bs=1024 count=1048576335822+0 records in335821+0 records out343880704 bytes (344 MB, 328 MiB) copied, 6.85661 s, 50.2 MB/s

Si vous souhaitez obtenir des mises à jour régulières de la dd progrès, puis entrez:

watch -n5 'sudo kill -USR1 $(pgrep ^dd$)'

watch sondera le dd traiter toutes les n secondes (-n5 = 5 secondes) et le rapport sans l'arrêter.

Notez les guillemets simples appropriés dans les commandes ci-dessus.

Quelques exemples d'utilisations pratiques avec pv et moins de frappe ou plus de progrès que d'autres réponses:

Vous devrez d'abord installer pv, avec la commande:

sudo apt-get install pv

Ensuite, quelques exemples sont:

pv -n /dev/urandom | dd of=/dev/nullpv -tpreb source.iso | dd of=/dev/BLABLA bs=4096 conv=notrunc,noerror

Remarque: le premier échantillon est de 5 caractères de moins que la saisie dd if=/dev/urandom | pv | dd of=/dev/null.

Et mon préféré pour cloner un lecteur de disque (remplacer X par des lettres de lecteur):

(pv -n /dev/sdX | dd of=/dev/sdX bs=128M conv=notrunc,noerror) 2>&1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0

screenshot

source: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/

Aussi pour m'archiver.

Par souci d'exhaustivité:

Version 8.24 de la GNU coreutils inclut un patch pour dd introduisant un paramètre pour imprimer la progression.

L'engagement l'introduction de ce changement a le commentaire:

dd: nouveau statut=progrès niveau pour imprimer les statistiques périodiquement

De nombreuses distributions, y compris Ubuntu 16.04.2 LTS utilisez cette version.

Utiliser Ctrl+Shift+T alors dd est en cours d'exécution, et il affichera la progression (en octets):

load: 1.51  cmd: dd 31215 uninterruptible 0.28u 3.67s321121+0 records in321120+0 records out164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)

Le mieux est d'utiliser http://dcfldd.sourceforge.net/ il est facile à installer via apt-get

Le statut de progression natif a été ajouté à dd!!!

La nouvelle version de Coreutils (8.24) ajoute un statut de progression à la dd outil:

Utilisation sur Xubuntu 15.10:

Ouvrez un terminal et tapez ces commandes:

wget ftp://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.24.tar.xztar -xf coreutils-8.24.tar.xzcd coreutils-8.24./configure && make -j $(nproc)

Exécuter dd en tant que racine:

sudo sucd src./dd if=/dev/sdc of=/dev/sda conv=noerror status=progress

Vous verrez: Octets, secondes et vitesse (octets / seconde).

Pour vérifier les versions de dd:

Natif:

dd --version

Nouveau:

cd coreutils-8.24/src./dd --version

Si vous avez déjà commencé dd et que vous écrivez un fichier, par exemple lors de la création d'une copie d'une clé USB sur un disque, vous pouvez utiliser la commande watch pour observer en permanence la taille du fichier de sortie afin de voir les modifications et d'estimer l'achèvement.

watch ls -l /pathtofile/filename

Pour voir uniquement la taille du fichier (vue h-humaine):

watch ls -sh /pathtofile/filename

Le dd | pv | dd triad a fait en sorte que ma copie de machine virtuelle de 50 Go prenne 800 secondes, par opposition à 260 secondes en utilisant uniquement dd. Avec ce pipeline, au moins, pv n'a aucune idée de la taille du fichier d'entrée, il ne sera donc pas en mesure de vous dire à quelle distance vous vous trouvez, il n'y a donc aucun inconvénient à le faire comme suit - et vous obtenez un bel avantage de vitesse:

J'éviterais les pv sur tout ce qui est volumineux, et (si vous utilisez Bash):

Contrôle - Z le processus dd

bg pour le mettre en arrière-plan. Observez que bg vous donnera une sortie comme [1] 6011 où ce dernier numéro est un identifiant de processus. Alors, fais:

while true; do kill -USR1 process_id ; sleep 5; done

où process_id est l'ID de processus que vous avez observé. Appuyez sur Control-C lorsque vous voyez quelque chose comme:

[1]+  Done dd if=/path/file.qcow2 of=/dev/kvm/pxetest bs=4194304 conv=sparse-bash: kill: (60111) - No such process

Vous avez terminé.

Edit: Administrateur système idiot! Automatisez votre vie, ne travaillez pas! Si j'ai un long processus de dd que je veux surveiller, voici un one-liner qui s'occupera de toute l'enchilada pour vous; mettez tout cela sur une seule ligne:

 dd if=/path/to/bigimage of=/path/to/newimage conv=sparse bs=262144 & bgid=$!; while true; do sleep 1; kill -USR1 $bgid || break; sleep 4; done

Vous pouvez, bien sûr, le scripter, peut-être faire de $1 votre fichier d'entrée et de $2 votre fichier de sortie. Ceci est laissé comme un exercice pour le lecteur. Notez que vous avez besoin de ce peu de sommeil avant la mise à mort ou la mise à mort peut mourir en essayant d'envoyer un signal à dd quand il n'est pas encore prêt. Ajustez vos sommeils comme vous le souhaitez (peut-être même supprimez complètement le deuxième sommeil).

Bash-FTW! :-)

http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html

Fondamentalement:

kill -USR1 < dd pid >