Wie können Sie den Fortschritt von dd überwachen?

654

ddist ein Wunder. Sie können eine Festplatte auf eine andere duplizieren, eine Festplatte auf Null setzen usw. Sobald Sie einen ddBefehl starten , können Sie jedoch nichts mehr über den Fortschritt des Befehls erfahren. Es befindet sich dort nur am Cursor, bis der Befehl schließlich beendet ist. Wie überwacht man den Fortschritt von dd?

James
quelle

Antworten:

728

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 pvund setzen Sie es zwischen nur Eingabe / Ausgabe- ddBefehlen.

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, --sizewenn Sie eine Zeitschätzung wünschen.


Beispiel Angenommen, eine 2-GB-Festplatte wird aus / dev / sdb kopiert

Befehl ohne pvwä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 pvdie 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 pvdie Größe automatisch erkannt wird.


Methode 2: Neue statusOption hinzugefügt dd(GNU Coreutils 8.24+)

ddIn GNU Coreutils 8.24+ (Ubuntu 16.04 und neuer) gibt es eine neue statusOption, 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
Phoibos
quelle
76
pv bigfile.iso | dd von = / dev / yourdevice
Ion Br.
18
Beachten Sie, dass die Parameter für „dd“ in der ersten Hälfte geeignet sind (der Eingangsteil des Rohres) dd if=/dev/zero bs=1M count=35000 | pv | dd of=VirtualDisk.raw.
Sopalajo de Arrierez
6
pv bigfile.iso | dd of=VirtualDisk.raw bs=1M count=35000funktioniert, verifiziert. @SopalajodeArrierez, Parameter können im zweiten dd angegeben werden.
SiddharthaRT
11
mit pv < /dev/sda > /dev/sdbscheint eine bessere Geschwindigkeit zu bekommen ( Quelle )
Nicola Feltrin
14
Zu Ihrer Information: Geschwindigkeit. Tests auf meinem Computer mit Samsung 840 PRO SSD: 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 beim dd if=/dev/zero of=/dev/sdbnormalen Schreiben (in der Nähe der maximalen SSD-Schreibgeschwindigkeit). Alle mit bs=4096000.
Tedd Hansen
461

Von HowTo: Überwachen Sie den Fortschritt von dd

Sie können den Fortschritt von dd mit dem killBefehl ü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:

sudo kill -USR1 $(pgrep ^dd)

Dies zeigt den ddFortschritt im ddTerminalfenster an, ohne den Vorgang anzuhalten. Wenn Sie BSD oder OS X verwenden, verwenden Sie INFOstatt USR1. Das USR1Signal endet dd.

Wenn Sie regelmäßig über den ddFortschritt informiert werden möchten, geben Sie Folgendes ein:

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

watchprüft den ddProzess alle -n Sekunden ( -n5= 5 Sekunden) und meldet sich, ohne ihn anzuhalten.

Beachten Sie die richtigen einfachen Anführungszeichen in den obigen Befehlen.

James
quelle
19
Das hat funktioniert, aber ein paar Kommentare. Zunächst bin ich mir nicht sicher, warum Sie Ihren Backticks entkommen sind (wenn es für den SO-Editor ist, haben Sie es falsch gemacht). Zweitens würde ich empfehlen, ^ dd $ zu verwenden, nur für den Fall, dass etwas anderes mit dem Präfix dd ausgeführt wird. Schließlich benötigen Sie kein sudo, um das USR1-Signal zu senden. Ansonsten gute Antwort, +1.
Gsingh2011
22
NB! Auf diese Weise unterbricht dd die Arbeit unter OSX.
Maxim Kholyavkin
26
@Speakus Sie müssen kill -INFO $(pgrep ^dd$)auf BSD-Systemen (wie OSX) verwenden.
Torben,
20
sudo pkill -usr1 ddist leichter zu merken, funktioniert einwandfrei (zumindest unter Ubuntu 14.04) und ist weniger zu tippen.
Phizes
21
Ich mag das, weil ich befürchte pv, die Übertragung zu verlangsamen, wie TeddHansen gezeigt hat. Außerdem wette ich, dass viele Leute dies googeln, weil sie bereits mit der ddOperation begonnen haben;)
sudo
104

Ein paar praktische Beispiele mit pvweniger Eingabe oder mehr Fortschritt als andere Antworten:

Zuerst müssen Sie pvmit dem Befehl installieren :

sudo apt-get install pv

Dann sind einige Beispiele:

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

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):

(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

Bildschirmfoto

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

Auch zum Archivieren.

JSBach
quelle
3
Sie müssen auch dialogmit dem Befehl installierenapt-get install dialog
k7k0
7
LIEBE das dialogBeispiel. SERENITY JETZT !
Gray
Können Sie diesen Dialog nur mit Python aufrufen?
Mikeymop
1
Dank dieser Antwort, entdeckte dialogdiese irrsinnig in Schreiben von Shell - Skripten helfen: D
Halligen
2
brew install pv dialogfür Mac. Auch dieser Herr rechnet mit Stil. Bravo.
EvilSnobu
62

Verwenden Sie während der Ausführung Ctrl+ Shift+ , um den Fortschritt (in Byte) auszugeben:Tdd

load: 1.51  cmd: dd 31215 uninterruptible 0.28u 3.67s
321121+0 records in
321120+0 records out
164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)
01010101
quelle
5
Funktioniert bei mir nicht auf Kubuntu Trusty. Möglicherweise widersprüchliche Tastenkombinationen?
Jamadagni
14
Toller Weg. Es funktioniert unter OSX, aber nicht unter Ubuntu 14.04
Maxim Kholyavkin
1
Die erste Zeile wird von OS X generiert, nur die letzten 3 Zeilen stammen von dd.
Itay Grudev
3
Sie sollten in der Lage sein, kill -INFO auf einem BSD wie OS X zu verwenden
macshome
3
Dies funktioniert unter Ubuntu nicht. Strg-T / Strg-Umschalt-T werden nur ^Tauf 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?)
Ist
60

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:

dd: Neuer Status = Fortschrittsstufe , um Statistiken regelmäßig zu drucken

Viele Distributionen, einschließlich Ubuntu 16.04.2 LTS, verwenden diese Version.

davidDavidson
quelle
Ich möchte nur hinzufügen, wie ich Coreutils 8.24 kompiliert habe: apt install build-essentialund apt-get build-dep coreutils, dann Coreutils-8.25.tar.xz herunterladen tar xvf coreutils-8.25.tar.xz configure --prefix=$HOME/usr/localund ausführen make. Neu kompiliert ddwird unter srcdir. Sie können es nach / bin kopieren und ein vorhandenes ersetzen oder jus als src / dd
holms 19.08.16
2
Cool! Ich mag diese Funktion. Und es dauerte nur etwa 30 Jahre, um dd das Drucken von Fortschrittsausgaben beizubringen. :-)
Johannes Overmann
Was für eine Erleichterung! Ich werde dieses Argument sofort in einen dd-Shell-Alias ​​einfügen.
Stephan Henningsen
Beachten Sie, dass der Status manchmal mit zwei Zahlen gedruckt wird, eine in SI-Einheiten und der entsprechende Wert in binären Einheiten (z. B. 10 MB, 9,5 MiB).
Palswim
33

Das Beste ist, http://dcfldd.sourceforge.net/ zu verwenden. Die Installation über apt-get ist einfach

TheNano
quelle
3
danke für den zeiger auf dcfldd, sehr kompatibel mit dd, aber einige gute neue funktionen. Besonders gut gefällt mir der Standardfortschritt.
Floyd
4
Warum dcfldd nicht bekannter ist, ist mir ein Rätsel.
Freedom_Ben
28
wahrscheinlich für seinen Namen.
Giovanni Toraldo
Standardmäßig stehen die Optionen ddund status=onfür Fortschrittsmeldungen statusinterval=N(N in Blöcken) für die Häufigkeit der Nachrichtenaktualisierungen und sizeprobe=[if|of]für einen Prozentindikator zur Verfügung. Ich werde es alias an DD:)
Kavadias
25

Der native Fortschrittsstatus wurde zu dd hinzugefügt !!!

Die neue Version von Coreutils (8.24) fügt dem ddTool einen Fortschrittsstatus hinzu :

Verwendung unter Xubuntu 15.10:

Öffnen Sie ein Terminal und geben Sie die folgenden Befehle ein:

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

Führen Sie ddals root:

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

Sie sehen: Bytes, Sekunden und Geschwindigkeit (Bytes / Sekunde).

So überprüfen Sie die Versionen von dd:

Eingeborener:

dd --version

Neu:

cd coreutils-8.24/src
./dd --version
user3394963
quelle
18

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.

watch ls -l /pathtofile/filename

So sehen Sie nur die Dateigröße (h-Human-Ansicht):

watch ls -sh /pathtofile/filename
Hersteller4
quelle
Auch eine praktikable Methode ...
ζ--
3
Nützlich, obwohl dies nicht unbedingt funktioniert, wenn Sie die dd-Ausgabe an etwas anderes als eine Datei weiterleiten (z. B. gzip'ing, bevor Sie sie auf die Festplatte schreiben).
Ponkadoodle
Funktioniert nicht bei speziellen Dateien.
Johannes Overmann
13

Die dd | pv | ddTriade 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

bgum es in den Hintergrund zu stellen. Beachten Sie, bgdass Sie eine Ausgabe erhalten, [1] 6011bei 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:

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

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:

 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

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! :-)

Mike S
quelle
1
Komprimiere die whileSchleife. Verwenden Sie watch.
muru
1
@muru es kommt darauf an. Ich kenne Ihr System nicht, aber auf CentOS7 * ist die Ausgabe etwas verstümmelt. es ist lesbar, sieht aber nicht ordentlich aus. Außerdem stampft es über Ihre vorherige Ausgabe, sodass Sie den Verlauf der Geschwindigkeit Ihres dd verlieren. meins variiert zwischen 20 MB / s und 300 MB / s. Es ist interessant zu beobachten, wie die Zahlen variieren und auch lehrreich sind. Ich denke, ein Teil der großen Varianz ist auf LVM-Thin-Pools zurückzuführen, die die Zuweisung für eine LV erhöhen, an die ich schreibe. * Ja, dies ist ein Ubuntu-Forum, aber ich habe hier nach "dd monitor progress" gesucht. Es ist das erste Ergebnis bei Google.
Mike S
Oh, ich meinte, in einem anderen Terminal oder Bildschirmfenster laufen sudo watch pkill dd. Dann schauen Sie sich dddie Statistiken bequem aus.
muru
Wird SIGTERM nicht standardmäßig gesendet? Ich möchte nicht einmal experimentieren, da pgrep dd beim Ausführen einer einzelnen dd drei pid-Werte hat: kthreadd, oddjob und dd. Ich habe Angst davor, was pkill tun wird. Sie könnten das -USR1-Signal mit pkill senden, aber ich weiß auch nicht, ob es sicher ist, es an den Kernel-Thread oder an obbjob zu senden. Der watch-Befehl sieht sauberer aus, aber es scheint eine Menge zusätzlicher Schritte zu sein, nur um eine while-Schleife zu vermeiden. Wenn ich in einem Fenster eine dd mache, mache ich im Allgemeinen gleich danach etwas in derselben Shell. Die while-Schleife ist sicher: Sie wissen GENAU, welche PID das Signal erhält.
Mike S
meistens ist es mir egal welche pids das signal bekommen, da ich benutze watch pkill -USR1 -x dd. Da ich auch watchfür andere ähnliche Aufgaben benutze , kommt diese natürlich.
muru
11

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

Grundsätzlich gilt:

kill -USR1 < dd pid >
hnasarat
quelle
1
"pkill -USR1 dd" ist die einfachste Version, die mir bekannt ist (sofern Sie ohnehin nur eine Instanz von dd ausführen). Auf meinem System benötige ich sudo: "sudo pkill -USR1 dd". Funktioniert, nachdem Sie den Befehl dd eingegeben haben und nichts Neues installieren müssen.
Fred Hamilton
7

Am einfachsten ist:

 dd if=... of=... bs=4M status=progress oflag=dsync

oflag=dsynchält Ihr Schreiben synchron, so dass die Informationen status=progressgenauer sind. Es könnte jedoch etwas langsamer sein.

zevero
quelle
1
Laut gnu.org/software/coreutils/manual/html_node/dd-invocation.html ist die Verwendung conv=fsyncbesser
Chen Deng-Ta
Danke dafür! Ich mache dd zu einem entfernten lvm2 und der bs = 4M erhöhte meine Übertragung um den Faktor 20 und die Fortschrittsanzeige ist wunderbar.
Lonnie Best
6

Auf 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=progressIhren ddBefehl hinzu.

Beispiel

dd bs=4M if=/media/severus/tools-soft/OperatingSystems/ubuntu-16.04-desktop-amd64.iso of=/dev/null status=progress && sync

Gibt den Status als

1282846183 bytes (1.2 GiB, 1.1 GiB) copied, 14.03 s, 101.9 MB/s

Bildbeschreibung hier eingeben

Severus Tux
quelle
5

Verwenden Sie die Option status=progress, um den Fortschritt während der Übertragung abzurufen.

Außerdem conv=fsyncwerden E / A-Fehler angezeigt.

Beispiel:

sudo dd if=mydistrib.iso of=/dev/sdb status=progress conv=fsync
MUY Belgien
quelle
4

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

Bildbeschreibung hier eingeben

SuperMau
quelle
3

Ich habe bash - Wrapper erstellt über dddas wird nutzen pvFortschritt zu zeigen. Legen Sie es in Ihr .bashrcund verwenden Sie ddwie gewohnt:

# dd if=/dev/vvg0/root of=/dev/vvg1/root bs=4M
    2GB 0:00:17 [ 120MB/s] [===========================================================>] 100%            
0+16384 records in
0+16384 records out
2147483648 bytes (2.1 GB) copied, 18.3353 s, 117 MB/s

Quelle:

dd()
{
    local dd=$(which dd); [ "$dd" ] || {
        echo "'dd' is not installed!" >&2
        return 1
    }

    local pv=$(which pv); [ "$pv" ] || {
        echo "'pv' is not installed!" >&2
        "$dd" "$@"
        return $?
    }

    local arg arg2 infile
    local -a args
    for arg in "$@"
    do
        arg2=${arg#if=}
        if [ "$arg2" != "$arg" ]
        then
            infile=$arg2
        else
            args[${#args[@]}]=$arg
        fi
    done

    "$pv" -tpreb "$infile" | "$dd" "${args[@]}"
}
midenok
quelle
Guter Weg, aber es funktioniert nicht mit Befehlen wie sudo oder time.
Maxim Kholyavkin
1
Legen Sie es in / usr / local / bin / dd mit diesem oben: #!/bin/bash. Unten: tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@"Oder Sie möchten die ddPosition fest codieren . Dann benutze local dd=/usr/bin/dd. Vergessen Sie nicht ausführbare Bit hinzuzufügen: chmod +x /usr/local/dd.
Midenok
2

Daher war ich heute ein wenig frustriert, killwährend des ddLaufens in einer Schleife zu laufen, und habe mir diese Methode ausgedacht, um sie einfach parallel laufen zu lassen:

function vdd {
    sudo dd "$@" &
    sudo sh -c "while pkill -10 ^dd$; do sleep 5; done"
}

Verwenden vddSie jetzt einfach eine beliebige Stelle, die Sie normalerweise verwenden würden dd(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.

robru
quelle
2

Dieser zwingt dd, alle 2 Sekunden Statistiken zu liefern, was für watch voreingestellt ist:

watch killall -USR1 dd

Um zwischen 2 und 5 Sekunden zu wechseln, fügen Sie die Option -n 5 wie folgt hinzu:

watch -n 5 killall -USR1 dd
Kostyantyn
quelle
2

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.

Version 8.24 der GNU-Coreutils enthält einen Patch für dd, der einen Parameter zum Drucken des Fortschritts einführt.

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:

coreutils-8.22-23.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts

Und die installierte Version von dd ist:

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

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.

J Hauss
quelle
1

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

geschlafen
quelle
Der Link ist tot.
Ishmael
1

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:

dd if=/dev/sda of=file.img & progress -mp $!

Hier &gabelt den ersten Befehl und setzt sofort statt , bis der Befehl Enden warten.

Der Befehl progress wird gestartet mit: -mund wartet, bis der überwachte Prozess beendet ist. -pEr überwacht also eine bestimmte PID und $!ist die letzte Befehls-PID.

Wenn Sie dd mit sudo ausgeben, müssen Sie auch mit progress arbeiten:

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
Labsin
quelle