dd
est une merveille. Il vous permet de dupliquer un disque dur sur un autre, de remettre complètement à zéro un disque dur, etc. Mais une fois que vous lancez un dd
commande, il n'y a rien pour vous informer de sa progression. Il reste juste à côté du curseur jusqu'à ce que la commande se termine. Alors comment suivre la progression de dd ?
Réponses
Trop de publicités?Juste au cas où quelqu'un du pays de CentOS trouverait ce fil de discussion...
L'option "status=progress" fonctionne avec CentOS 7.5 et 7.6.
La réponse ci-dessus de @davidDavidson implique que la fonctionnalité a été nouvellement ajoutée dans Coreutils 8.24.
La version 8.24 des GNU coreutils inclut un correctif pour dd introduisant un paramètre pour imprimer la progression.
C'est peut-être le cas, mais CentOS pourrait ne pas suivre le même schéma de versionnement.
La version de Coreutils fournie avec CentOS 7.6.1810 est la suivante :
coreutils-8.22-23.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts
Et la version de dd qui est installée est :
[root@hostname /]# dd --version
dd (coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Paul Rubin, David MacKenzie, and Stuart Kemp.
Cela montre les versions 8.22 .
Cependant, j'ai testé 'status=progress' avec dd sur CentOS 7.5 et CentOS 7.6 (tous deux avec la version 8.22 de Coreutils) et cela fonctionne correctement.
Je ne sais pas pourquoi RedHat choisit d'utiliser une si vieille version de Coreutils mais la fonctionnalité existe bel et bien avec la 8.22.
Alors aujourd'hui, j'ai été un peu frustré d'essayer de faire fonctionner kill
dans une boucle pendant que dd
et j'ai trouvé cette méthode pour les faire fonctionner en parallèle, facilement :
function vdd {
sudo dd "$@" &
sudo sh -c "while pkill -10 ^dd$; do sleep 5; done"
}
Maintenant, il suffit d'utiliser vdd
là où vous utiliseriez normalement dd
(il passe tous les arguments directement à travers) et vous aurez un rapport de progression imprimé toutes les 5s.
Le seul inconvénient est que la commande ne revient pas immédiatement après la fin de dd ; il est donc possible que cette commande vous fasse attendre 5 secondes de plus après le retour de dd avant qu'il ne s'en aperçoive et se retire.
Vous pouvez surveiller la progression de n'importe quel programme coreutils en utilisant progress - Coreutils Progress Viewer
.
Il peut surveiller :
cp mv dd tar cat rsync grep fgrep egrep cut sort md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip bzip2 bunzip2 xz unxz lzma unlzma 7z 7za zcat bzcat lzcat split gpg
Vous pouvez voir le page d'accueil
Vous pouvez l'utiliser dans une fenêtre de terminal distincte pendant l'exécution de la commande ou le lancer avec la commande dd :
dd if=/dev/sda of=file.img & progress -mp $!
Aquí &
bifurque la première commande et continue immédiatement au lieu d'attendre que la commande se termine.
La commande de progression est lancée avec : -m
il attend donc que le processus surveillé se termine, -p
pour qu'il surveille un pid donné et $!
est le pid de la dernière commande.
Si vous faites dd avec sudo, vous devez aussi faire des progrès :
sudo dd if=/dev/sda of=file.img &
sudo progress -m
# with no -p, this will wait for all coreutil commands to finish
# but $! will give the sudo command's pid
Sur mon système ubuntu 20.04 j'utilise, dcfldd
sudo dcfldd if=20210708.img status=on of=/dev/sdd bs=1M sizeprobe=if
[46% of 3814Mb] 1792 blocks (1792Mb) written. 00:00:28 remaining.
Ici dans sizeprobe nous avons 3 options, if,of,BYTES qui est de déterminer la taille de l'entrée, la sortie ou une quantité de BYTES pour l'utilisation avec les messages d'état.
status est par défaut 'on', je l'ai juste utilisé explicitement.
- Réponses précédentes
- Plus de réponses