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
.
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
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 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 >