Update 2016 : Wenn Sie GNU coreutils> = 8.24 verwenden (Standard in Ubuntu Xenial 16.04 oder höher), finden Sie unter Methode 2 eine alternative Möglichkeit, den Fortschritt anzuzeigen.
Methode 1: Mit pv
Installieren Sie pv
und setzen Sie es zwischen nur Eingabe / Ausgabe- dd
Befehlen.
Hinweis : Sie können es nicht verwenden, wenn Sie bereits gestartet haben dd
.
Aus der Paketbeschreibung :
pv
- Pipe Viewer - ist ein terminalbasiertes Tool zur Überwachung des Datenfortschritts über eine Pipeline. Es kann in jede normale Pipeline zwischen zwei Prozessen eingefügt werden, um visuell anzuzeigen, wie schnell Daten durchlaufen werden, wie lange es gedauert hat, wie kurz es vor der Fertigstellung steht und wie lange es voraussichtlich bis zur Fertigstellung dauern wird.
Installation
sudo apt-get install pv
Beispiel
dd if=/dev/urandom | pv | dd of=/dev/null
Ausgabe
1,74MB 0:00:09 [ 198kB/s] [ <=> ]
Sie können die ungefähre Größe mit angeben, --size
wenn Sie eine Zeitschätzung wünschen.
Beispiel Angenommen, eine 2-GB-Festplatte wird aus / dev / sdb kopiert
Befehl ohne pv
wäre:
sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096
Befehl mit pv
:
sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
Ausgabe:
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
Andere Verwendungen
Sie können pv
die Ausgabe natürlich auch direkt an stdout leiten:
pv /home/user/bigfile.iso | md5sum
Ausgabe
50,2MB 0:00:06 [8,66MB/s] [=======> ] 49% ETA 0:00:06
Beachten Sie, dass in diesem Fall pv
die Größe automatisch erkannt wird.
Methode 2: Neue status
Option hinzugefügt dd
(GNU Coreutils 8.24+)
dd
In GNU Coreutils 8.24+ (Ubuntu 16.04 und neuer) gibt es eine neue status
Option, um den Fortschritt anzuzeigen:
Beispiel
dd if=/dev/urandom of=/dev/null status=progress
Ausgabe
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
funktioniert, verifiziert. @SopalajodeArrierez, Parameter können im zweiten dd angegeben werden.pv < /dev/sda > /dev/sdb
scheint eine bessere Geschwindigkeit zu bekommen ( Quelle )dd if=/dev/urandom | pv | of=/dev/sdb
~ 18 MB / s beim Schreiben,dd if=/dev/zero | pv | of=/dev/sdb
~ 80 MB / s beim Schreiben und ~ 550 MB / s beimdd if=/dev/zero of=/dev/sdb
normalen Schreiben (in der Nähe der maximalen SSD-Schreibgeschwindigkeit). Alle mitbs=4096000
.Von HowTo: Überwachen Sie den Fortschritt von dd
Sie können den Fortschritt von dd mit dem
kill
Befehl überwachen, ohne ihn anzuhalten .dd
Öffnen Sie ein anderes Terminal und geben Sie Folgendes ein, um den Fortschritt zu sehen, sobald es ausgeführt wird:Dies zeigt den
dd
Fortschritt imdd
Terminalfenster an, ohne den Vorgang anzuhalten. Wenn Sie BSD oder OS X verwenden, verwenden SieINFO
stattUSR1
. DasUSR1
Signal endet dd.Wenn Sie regelmäßig über den
dd
Fortschritt informiert werden möchten, geben Sie Folgendes ein:watch
prüft dendd
Prozess alle -n Sekunden (-n5
= 5 Sekunden) und meldet sich, ohne ihn anzuhalten.Beachten Sie die richtigen einfachen Anführungszeichen in den obigen Befehlen.
quelle
kill -INFO $(pgrep ^dd$)
auf BSD-Systemen (wie OSX) verwenden.sudo pkill -usr1 dd
ist leichter zu merken, funktioniert einwandfrei (zumindest unter Ubuntu 14.04) und ist weniger zu tippen.pv
, die Übertragung zu verlangsamen, wie TeddHansen gezeigt hat. Außerdem wette ich, dass viele Leute dies googeln, weil sie bereits mit derdd
Operation begonnen haben;)Ein paar praktische Beispiele mit
pv
weniger Eingabe oder mehr Fortschritt als andere Antworten:Zuerst müssen Sie
pv
mit dem Befehl installieren :Dann sind einige Beispiele:
Hinweis: Das erste Beispiel besteht dann aus 5 Zeichen weniger Eingabe
dd if=/dev/urandom | pv | dd of=/dev/null
.Und mein Favorit zum Klonen eines Laufwerks (ersetze X durch Laufwerksbuchstaben):
Quelle: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/
Auch zum Archivieren.
quelle
dialog
mit dem Befehl installierenapt-get install dialog
dialog
Beispiel. SERENITY JETZT !dialog
diese irrsinnig in Schreiben von Shell - Skripten helfen: Dbrew install pv dialog
für Mac. Auch dieser Herr rechnet mit Stil. Bravo.Verwenden Sie während der Ausführung Ctrl+ Shift+ , um den Fortschritt (in Byte) auszugeben:T
dd
quelle
dd
.^T
auf dem Terminal ausgegeben (mit Ausnahme vieler Terminal-Apps, die Strg-Umschalt-T abfangen und einen neuen Tab öffnen). Viele OSX / BSD-Sucher mögen diese Antwort zu schätzen wissen, aber es sollte klargestellt werden, dass es nicht für Ubuntu (oder GNU / LInux im Allgemeinen?)Der Vollständigkeit halber:
Version 8.24 der GNU-Coreutils enthält einen Patch für dd, der einen Parameter zum Drucken des Fortschritts einführt.
Das Commit, das diese Änderung einführt, enthält den Kommentar:
Viele Distributionen, einschließlich Ubuntu 16.04.2 LTS, verwenden diese Version.
quelle
apt install build-essential
undapt-get build-dep coreutils
, dann Coreutils-8.25.tar.xz herunterladentar xvf coreutils-8.25.tar.xz
configure --prefix=$HOME/usr/local
und ausführenmake
. Neu kompiliertdd
wird untersrc
dir. Sie können es nach / bin kopieren und ein vorhandenes ersetzen oder jus als src / ddDas Beste ist, http://dcfldd.sourceforge.net/ zu verwenden. Die Installation über apt-get ist einfach
quelle
dd
undstatus=on
für Fortschrittsmeldungenstatusinterval=N
(N in Blöcken) für die Häufigkeit der Nachrichtenaktualisierungen undsizeprobe=[if|of]
für einen Prozentindikator zur Verfügung. Ich werde es alias anDD
:)Der native Fortschrittsstatus wurde zu dd hinzugefügt !!!
Die neue Version von Coreutils (8.24) fügt dem
dd
Tool einen Fortschrittsstatus hinzu :Verwendung unter Xubuntu 15.10:
Öffnen Sie ein Terminal und geben Sie die folgenden Befehle ein:
Führen Sie
dd
als root:Sie sehen: Bytes, Sekunden und Geschwindigkeit (Bytes / Sekunde).
So überprüfen Sie die Versionen von
dd
:Eingeborener:
Neu:
quelle
Wenn Sie dd bereits gestartet haben und eine Datei schreiben, z. B. wenn Sie eine Kopie eines Laufwerks auf Festplatte erstellen, können Sie den Befehl watch verwenden, um die Größe der Ausgabedatei ständig zu beobachten, um Änderungen zu sehen und die Fertigstellung zu schätzen.
So sehen Sie nur die Dateigröße (h-Human-Ansicht):
quelle
Die
dd | pv | dd
Triade ließ meine 50-GB-VM-Kopie 800 Sekunden dauern, im Gegensatz zu 260 Sekunden mit nur dd. Zumindest bei dieser Pipeline hat pv keine Ahnung, wie groß die Eingabedatei ist, so dass es nicht in der Lage ist, Ihnen zu sagen, wie weit Sie unterwegs sind. Es ist also kein Nachteil, dies wie folgt zu tun - und Sie erhalten einen schönen Geschwindigkeitsvorteil:Ich würde pv auf irgendetwas Großem vermeiden und (wenn ich Bash benutze):
Control-Z den dd-Prozess
bg
um es in den Hintergrund zu stellen. Beachten Sie,bg
dass Sie eine Ausgabe erhalten,[1] 6011
bei der die letztere Nummer eine Prozess-ID ist. Dann mach's:while true; do kill -USR1 process_id ; sleep 5; done
Dabei ist process_id die von Ihnen beobachtete Prozess-ID. Drücke Control-C, wenn du etwas siehst wie:
Du bist fertig.
Bearbeiten: Dumme Systemadministrator! Automatisieren Sie Ihr Leben, arbeiten Sie nicht! Wenn ich einen langen DD-Prozess habe, den ich überwachen möchte, ist hier ein Einzeiler, der sich für Sie um die gesamte Enchilada kümmert. Schreiben Sie dies alles in eine Zeile:
Sie können natürlich ein Skript erstellen und aus $ 1 Ihre Eingabedatei und aus $ 2 Ihre Ausgabedatei machen. Dies ist eine Übung für den Leser. Beachten Sie, dass Sie ein wenig Schlaf brauchen, bevor der Kill oder Kill abstirbt und versucht, ein Signal an dd zu senden, wenn es noch nicht bereit ist. Stellen Sie Ihren Schlaf wie gewünscht ein (vielleicht entfernen Sie sogar den zweiten Schlaf insgesamt).
Bash-FTW! :-)
quelle
while
Schleife. Verwenden Siewatch
.sudo watch pkill dd
. Dann schauen Sie sichdd
die Statistiken bequem aus.watch pkill -USR1 -x dd
. Da ich auchwatch
für andere ähnliche Aufgaben benutze , kommt diese natürlich.http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html
Grundsätzlich gilt:
quelle
Am einfachsten ist:
oflag=dsync
hält Ihr Schreiben synchron, so dass die Informationenstatus=progress
genauer sind. Es könnte jedoch etwas langsamer sein.quelle
conv=fsync
besserAuf Ubuntu 16.04
Ubuntu 16.04 wird mit dd (coreutils) Version 8.25 ausgeliefert . Daraus ergibt sich die Option
status=progress
wird unterstützt :-)Fügen Sie dazu einfach
status=progress
Ihrendd
Befehl hinzu.Beispiel
Gibt den Status als
quelle
Verwenden Sie die Option
status=progress
, um den Fortschritt während der Übertragung abzurufen.Außerdem
conv=fsync
werden E / A-Fehler angezeigt.Beispiel:
quelle
Ich mag ddrescue sehr, es funktioniert wie dd, gibt aber Ausgaben aus und scheitert nicht an Fehlern, im Gegenteil, es hat einen sehr fortgeschrittenen Algorithmus und ist sehr bemüht, eine erfolgreiche Kopie zu erstellen ... Es gibt auch viele GUIs dafür
Projekt: https://www.gnu.org/software/ddrescue
Wikipedia: https://en.wikipedia.org/wiki/Ddrescue
quelle
Ich habe bash - Wrapper erstellt über
dd
das wird nutzenpv
Fortschritt zu zeigen. Legen Sie es in Ihr.bashrc
und verwenden Siedd
wie gewohnt:Quelle:
quelle
#!/bin/bash
. Unten:tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@"
Oder Sie möchten diedd
Position fest codieren . Dann benutzelocal dd=/usr/bin/dd
. Vergessen Sie nicht ausführbare Bit hinzuzufügen:chmod +x /usr/local/dd
.Daher war ich heute ein wenig frustriert,
kill
während desdd
Laufens in einer Schleife zu laufen, und habe mir diese Methode ausgedacht, um sie einfach parallel laufen zu lassen:Verwenden
vdd
Sie jetzt einfach eine beliebige Stelle, die Sie normalerweise verwenden würdendd
(alle Argumente werden direkt durchgereicht), und Sie erhalten alle fünf Sekunden einen Fortschrittsbericht.Der einzige Nachteil ist, dass der Befehl nicht sofort nach Abschluss von dd zurückgegeben wird. Daher ist es möglich, dass Sie mit diesem Befehl nach der Rückkehr von dd weitere 5 Sekunden warten müssen, bevor es bemerkt und beendet wird.
quelle
Dieser zwingt dd, alle 2 Sekunden Statistiken zu liefern, was für watch voreingestellt ist:
Um zwischen 2 und 5 Sekunden zu wechseln, fügen Sie die Option -n 5 wie folgt hinzu:
quelle
Nur für den Fall, dass jemand aus CentOS Land diesen Thread findet ...
Die Option 'status = progress' funktioniert mit CentOS 7.5 und 7.6
Die obige Antwort von @davidDavidson impliziert, dass die Funktion in Coreutils 8.24 neu hinzugefügt wurde.
Dies kann der Fall sein, aber CentOS folgt möglicherweise nicht demselben Versionsschema.
Die Version von Coreutils, die mit CentOS 7.6.1810 geliefert wird, ist:
Und die installierte Version von dd ist:
Dies zeigt die Versionen 8.22 .
Ich habe jedoch 'status = progress' mit dd auf CentOS 7.5 und CentOS 7.6 (beide mit Version 8.22 von Coreutils) getestet und es funktioniert ordnungsgemäß.
Ich weiß nicht, warum RedHat eine so alte Version von Coreutils verwendet, aber die Funktionalität ist mit 8.22 vorhanden.
quelle
Wie oben erwähnt, reagiert es, zumindest mit dem 'dd' von GNU coreutils oder busybox, auf ein USR1-Signal, indem es Fortschrittsinformationen an stderr ausgibt.
Ich habe ein kleines Wrapper-Skript für dd geschrieben, das eine nette Prozentanzeige zeigt und versucht, den Prozess oder die Funktionsweise von dd in keiner Weise zu beeinträchtigen. Sie finden es auf Github:
http://github.com/delt01/dd_printpercent
Leider funktioniert dieser SIGUSR1-Trick nur mit GNU dd (aus dem Coreutils-Paket) oder im 'dd'-Modus von busybox, wobei diese spezielle Funktion zur Kompilierungszeit aktiviert ist. Es funktioniert nicht mit dem Standard 'dd', der in den meisten BSD-Systemen enthalten ist, einschließlich FreeBSD und OS X ... :(
quelle
Sie können den Fortschritt jedes Coreutils-Programms mit verfolgen
progress - Coreutils Progress Viewer
.Es kann überwachen:
cp mv dd teer cat rsync grep fgrep egrep cut sort md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip bzip2 bunzip2 xz unxz lzma unlzma 7z 7z zcat bzcat lzcat g split
Sie können die Manpage sehen
Sie können es in einem separaten Terminalfenster verwenden, während der Befehl ausgeführt wird, oder mit dem Befehl dd starten:
Hier
&
gabelt den ersten Befehl und setzt sofort statt , bis der Befehl Enden warten.Der Befehl progress wird gestartet mit:
-m
und wartet, bis der überwachte Prozess beendet ist.-p
Er überwacht also eine bestimmte PID und$!
ist die letzte Befehls-PID.Wenn Sie dd mit sudo ausgeben, müssen Sie auch mit progress arbeiten:
quelle