Mise à jour 2016 : Si vous utilisez GNU coreutils> = 8.24 (par défaut à partir de Ubuntu Xenial 16.04), reportez-vous à la méthode 2 ci-dessous pour obtenir un autre moyen d'afficher la progression.
Méthode 1: en utilisant pv
Installez-le pv
et mettez-le entre les commandes d'entrée / sortie uniquement dd
.
Remarque : 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 permettant de surveiller la progression des données via un pipeline. Il peut être inséré dans tout pipeline normal entre deux processus pour donner une indication visuelle de la vitesse à laquelle les données transitent, de la durée de leur acheminement, de son achèvement et de son estimation, ainsi que de sa durée approximative.
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 soit 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 automatiquement la taille.
Méthode 2: nouvelle status
option ajoutée à dd
(GNU Coreutils 8.24+)
dd
dans GNU Coreutils 8.24+ (Ubuntu 16.04 et plus récente) a une nouvelle 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
dd if=/dev/zero bs=1M count=35000 | pv | dd of=VirtualDisk.raw
.pv bigfile.iso | dd of=VirtualDisk.raw bs=1M count=35000
fonctionne, vérifié. @SopalajodeArrierez, les paramètres peuvent être donnés dans le deuxième jour.pv < /dev/sda > /dev/sdb
semble avoir une meilleure vitesse ( source )dd if=/dev/urandom | pv | of=/dev/sdb
donne environ 18 Mo / s en écriture,dd if=/dev/zero | pv | of=/dev/sdb
environ 80 Mo / s, et tout à fait anciendd if=/dev/zero of=/dev/sdb
donne environ 550 Mo / s (vitesse d’écriture maximale proche du SSD). Tous avecbs=4096000
.De HowTo: Surveiller la progression de jj
Vous pouvez surveiller la progression de dd sans l'arrêter à l'aide de la
kill
commande.Pour voir la progression de
dd
son exécution, ouvrez un autre terminal et entrez:Cela affichera la
dd
progression dans ladd
fenêtre du terminal sans interrompre le processus. Si vous utilisez BSD ou OS X, utilisezINFO
plutôt queUSR1
. LeUSR1
signal fin dd.Si vous souhaitez recevoir des mises à jour régulières sur les
dd
progrès, entrez:watch
analysera ledd
processus toutes les -n secondes (-n5
= 5 secondes) et signalera sans l’arrêter.Notez les guillemets simples appropriés dans les commandes ci-dessus.
la source
kill -INFO $(pgrep ^dd$)
sur des systèmes BSD (comme OSX).sudo pkill -usr1 dd
est plus facile à retenir, fonctionne parfaitement (du moins sur Ubuntu 14.04) et est moins facile à taper.pv
ralentir le transfert, comme l'a montré TeddHansen. Aussi, je parie que beaucoup de gens sont en train de googler ça parce qu'ils ont déjà commencé l'dd
opération;)Quelques exemples d’utilisations pratiques avec
pv
moins de dactylographie ou plus de progrès que d’autres réponses:Tout d'abord, vous devrez installer
pv
, avec la commande:Voici quelques exemples:
Remarque: le premier échantillon contient 5 caractères moins la frappe
dd if=/dev/urandom | pv | dd of=/dev/null
.Et mon préféré pour cloner un lecteur de disque (remplacez X par des lettres de lecteur):
source: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/
Aussi pour m'archiver moi-même.
la source
dialog
avec la commandeapt-get install dialog
dialog
exemple. SÉRÉNITÉ MAINTENANT !dialog
cela aidera incroyablement à écrire des scripts shell: Dbrew install pv dialog
pour Mac. Aussi ce monsieur calcule avec style. Bravo.Utilisez Ctrl+ Shift+ tant Tqu’il
dd
est en cours d’exécution, et il affichera la progression (en octets):la source
dd
.^T
sur le terminal (à l'exception de nombreuses applications pour terminaux qui interceptent Ctrl-Maj-T et ouvrent un nouvel onglet). Beaucoup de chercheurs sur OSX / BSD apprécieront peut-être cette réponse, mais il faut préciser que ce n'est pas pour Ubuntu (ou GNU / LInux en général?)Par souci d'exhaustivité:
La version 8.24 de GNU coreutils inclut un correctif pour dd introduisant un paramètre permettant d’imprimer la progression.
Le commit introduisant ce changement a le commentaire suivant:
De nombreuses distributions, y compris Ubuntu 16.04.2 LTS, utilisent cette version.
la source
apt install build-essential
etapt-get build-dep coreutils
, puis téléchargez coreutils-8.25.tar.xz,tar xvf coreutils-8.25.tar.xz
configure --prefix=$HOME/usr/local
puis lancezmake
. Nouvellement compilédd
sera soussrc
dir. Vous pouvez le copier dans / bin et remplacer unLe mieux est d'utiliser http://dcfldd.sourceforge.net/, il est facile à installer via apt-get
la source
dd
et optionstatus=on
par défaut pour les messages de progressionstatusinterval=N
(N en blocs) pour la fréquence de mise à jour des messages etsizeprobe=[if|of]
pour un indicateur de pourcentage. Je vais alias it toDD
:)Le statut de progression natif a été ajouté au jj !!!
La nouvelle version de Coreutils (8.24) ajoute un statut de progression à l'
dd
outil:Utilisation sur Xubuntu 15.10:
Ouvrez un terminal et tapez ces commandes:
Exécuter en
dd
tant que root:Vous verrez: octets, secondes et vitesse (octets / seconde).
Pour vérifier les versions de
dd
:Originaire de:
Nouveau:
la source
Si vous avez déjà lancé dd et si vous écrivez un fichier, par exemple lors de la création d'une copie d'une clé USB sur 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.
Pour ne voir que la taille du fichier (vue h-humaine):
la source
Le
dd | pv | dd
trio a fait ma copie de 50 Go vm prendre 800 secondes, par opposition à 260 secondes en utilisant seulement dd. Avec ce pipeline, au moins, pv n'a aucune idée de la taille du fichier d'entrée et ne peut donc pas vous dire jusqu'à quel point vous êtes, il n'y a donc aucun inconvénient à le faire comme suit, et vous obtenez un bel avantage en termes de vitesse:Je voudrais éviter pv sur quelque chose de grand, et (si vous utilisez Bash):
Control-Z le processus DD
bg
pour le mettre en arrière-plan. Observez que vousbg
obtiendrez une sortie comme[1] 6011
où ce dernier numéro est un identifiant de processus. Alors faites:while true; do kill -USR1 process_id ; sleep 5; done
où id_processus est l'identificateur de processus que vous avez observé. Appuyez sur Control-C lorsque vous voyez quelque chose comme:
Vous avez terminé.
Edit: Administrateur de systèmes stupide! Automatise ta vie, ne travaille pas! Si j'ai un long processus que je veux surveiller, voici un guide qui se chargera de toute l'enchilada pour vous; mettez tout cela sur une seule ligne:
Vous pouvez, bien sûr, le scripter, peut-être créer $ 1 votre fichier d'entrée et $ 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 le kill ou le kill peut mourir en essayant d'envoyer un signal à dd quand il n'est pas encore prêt. Ajustez votre sommeil comme vous le souhaitez (peut-être même supprimez-vous complètement le deuxième sommeil).
Bash- FTW! :-)
la source
while
boucle. Utilisezwatch
.sudo watch pkill dd
. Ensuite, regardezdd
les statistiques confortablement.watch pkill -USR1 -x dd
. Puisque j'utilise aussiwatch
pour d'autres tâches similaires, celle-ci est naturelle.http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html
Fondamentalement:
la source
Le plus simple est:
oflag=dsync
maintiendra votre écriture synchronisée afin que les informations destatus=progress
soient plus précises. Cependant, cela pourrait être un peu plus lent.la source
conv=fsync
mieux vaut utiliserSur Ubuntu 16.04
Ubuntu 16.04 est fourni avec dd (coreutils) version 8.25 . Par conséquent, l'option
status=progress
est prise en charge :-)Pour l'utiliser, il suffit d'ajouter
status=progress
avec votredd
commande.Exemple :
Donne le statut de
la source
Utilisez l'option
status=progress
pour obtenir l'avancement pendant le transfert.En outre,
conv=fsync
affichera les erreurs d'E / S.Exemple:
la source
J'aime beaucoup ddrescue, cela fonctionne comme dd mais donne une sortie et n’échoue pas sur les erreurs, au contraire il a un algorithme très avancé et essaie vraiment de faire une copie réussie ... Il y a aussi beaucoup d’interfaces graphiques pour cela.
Projet: https://www.gnu.org/software/ddrescue
Wikipedia: https://en.wikipedia.org/wiki/Ddrescue
la source
J'ai créé le wrapper bash
dd
qui servirapv
à montrer les progrès. Mettez-le dans votre.bashrc
et utilisezdd
comme d'habitude:La source:
la source
#!/bin/bash
. En bas:tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@"
ou vous pouvez souhaiter coder en dur l'dd
emplacement. Alors utilisezlocal dd=/usr/bin/dd
. Ne pas oublier d'ajouter peu exécutable:chmod +x /usr/local/dd
.Alors aujourd’hui, j’étais un peu frustré d’essayer de courir
kill
en boucle pendant que jedd
courais, et j’ai trouvé cette méthode pour les exécuter en parallèle, facilement:Maintenant, utilisez
vdd
n’importe où vous le feriez normalementdd
(tous les arguments sont passés directement) et vous obtiendrez un rapport d’avancement imprimé toutes les 5 secondes.Le seul inconvénient est que la commande ne retourne pas immédiatement lorsque dd est terminé; il est donc possible que cette commande vous laisse attendre 5s de plus après que dd soit revenu avant de s'en rendre compte.
la source
Celui-ci oblige dd à fournir des statistiques toutes les 2 secondes, valeur par défaut pour watch:
Pour passer de toutes les 2 secondes à toutes les 5 secondes, ajoutez l'option -n 5 comme ceci:
la source
Juste au cas où quelqu'un de CentOS Land trouverait ce fil ...
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é ajoutée récemment dans Coreutils 8.24.
Cela peut être le cas, mais CentOS pourrait ne pas suivre le même schéma de gestion de versions.
La version de Coreutils fournie avec CentOS 7.6.1810 est la suivante:
Et la version de dd installée est la suivante:
Cela montre les versions 8.22 .
Cependant, j'ai testé le 'status = progress' avec dd sur CentOS 7.5 et CentOS 7.6 (les deux avec la version 8.22 de Coreutils) et tout fonctionne correctement.
Je ne sais pas pourquoi RedHat a choisi d’utiliser une version aussi ancienne de Coreutils, mais la fonctionnalité existe avec la version 8.22.
la source
Comme mentionné ci-dessus, au moins avec le "dd" de GNU coreutils, ou busybox, il répondra à un signal USR1 en imprimant des informations de progression à stderr.
J'ai écrit un petit script de wrapper pour dd qui affiche un indicateur de pourcentage complet et tente de ne pas interférer avec le processus ou le mode de fonctionnement de dd. Vous pouvez le trouver sur github:
http://github.com/delt01/dd_printpercent
Malheureusement, cette astuce SIGUSR1 ne fonctionne qu'avec GNU dd (du paquet coreutils) ou le mode "dd" de busybox avec cette fonctionnalité spécifique activée au moment de la compilation. Cela ne fonctionne pas avec le 'stock' fourni avec la plupart des systèmes BSD, y compris FreeBSD et OS X ... :(
la source
Vous pouvez regarder la progression de n’importe quel programme coreutils en utilisant
progress - Coreutils Progress Viewer
.Il peut surveiller:
cp mv dd tar chat rsync grep fgrep egrep coupe trier md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip
Vous pouvez voir la page de manuel
Vous pouvez l'utiliser dans une fenêtre de terminal séparée pendant l'exécution de la commande ou le lancer avec la commande dd:
Ici,
&
forks la première commande et continue immédiatement au lieu d'attendre la fin de la commande.La commande progress est lancée avec:
-m
afin qu’elle attende jusqu’à la fin du processus surveillé,-p
elle surveille un pid donné et$!
est la dernière commande pid.Si vous publiez dd avec sudo, vous devez aussi progresser:
la source