PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dd Fortschritt anzeigen lassen



blubbersuelze
06.05.12, 21:49
Hallo,

ich habe einen dd-Befehl wie folgt ausgeführt und in den Hintergrund geschoben.

dd if=/dev/sda of=/dev/sdb &

Nun würde ich gerne herausfinden wie weit dd ist.
Ich habe folgendes probiert:

kill -USR1 <processid von dd>

ebenso

killall -USR1 <processid von dd>

aber keiner dieser Befehle gibt mir irgend etwas zurück.
Wo liegt der Fehler, bzw. wie könnte ich alternativ an Fortschrittsdaten kommen?

mfg.
blubbersuelze :p

kreol
06.05.12, 22:09
kill -USR1 `pidof dd`funktioniert hier. Die Ausgabe erfolgt in dem Terminal, in dem das dd läuft, nicht in dem, in dem das kill abgesetzt wurde.

Kreol

Iluminat23
06.05.12, 22:11
der kill befehl gibt dir auch nix zurück, sondern der dd-prozess bekommt dasd signal und unterbricht kurzzeitig das kopieren und gibt den akteullen status aus.

achja, killall will den namen des prozesses haben nicht die prozessid.

folgendes funktioniert hier ohne probleme:

$ dd if=/dev/urandom of=/dev/null &
[1] 11145
$ kill -USR1 11145
$ 264922+0 records in
264921+0 records out
135639552 bytes (136 MB) copied, 9,82997 s, 13,8 MB/s

Gruß
iluminat23

blubbersuelze
07.05.12, 17:27
Danke für die Antworten,

Aber wie mache ich das wenn man dd gestartet hat, in den Hintergrund geschoben hat und dann die Shell geschlossen hat und dann eine andere Shell wieder öffnet um den Status zu erfragen?

Gibt es da eine Möglichkeit die Anzeige des Status auch zu bekommen?
DAS ist nämlich das Problem.

mfg.
blubbersuelze :p

kreol
07.05.12, 17:37
Wenn Du die shell schliesst, in der das dd läuft, stirbt dd doch mit, weil der Elternprozess fehlt.

Deswegen ja wohl das bg (&), damit Du im gleichen Terminal das kill absetzen kannst. Ich mache das allerdings meistens mit einem weiteren Terminal und ohne das bg.

Kreol

blubbersuelze
07.05.12, 17:43
*grmpf*

also nochmal von vorne und zusammen gefasst:



ich habe einen dd-Befehl wie folgt ausgeführt und in den Hintergrund geschoben.

dd if=/dev/sda of=/dev/sdb &

Anschließend Shell geschlossen !!

Nun würde ich gerne herausfinden wie weit dd ist.

Also Shell auf gemacht und:

kill -USR1 <processid von dd>

ebenso

killall -USR1 <processid von dd>

aber keine Statusrückmeldung ...

also WIE bekomme ich die Statusanzeige trotzdem angezeigt?

mfg.
blubbersuelze :p

kreol
07.05.12, 17:47
Nochmal zusammengefasst: Wenn Du die Shell, in der dd läuft, beendest, beendest Du auch das dd. Dann gibt es keinen Fortschritt mehr, da es kein dd mehr gibt...

P.S.
Und iluminat23 hat bereits darauf hingewiesen: killall erwartet die Bezeichnung des Prozesses, nicht die PID. Das hat mit Deinem Problem aber nichts zu tun, s.o.. kill oder killall findet kein dd mehr, da es nicht mehr läuft...

P.P.S.
Prüf das doch mal mit `pidof dd` oder ps aux | grep dd, ob ein dd nach dem Beenden der Muttershell noch läuft.

Kreol

blubbersuelze
07.05.12, 17:52
Falsch .. dd gibt es noch .. in der Backgroundshell ...

wenn man es wie ich es beschrieben habe starte ..

aber der Aussage entnehme ich das ich nach Schließung der Shell keine Statusanzeige mehr bekommen kann .. zumindest nicht auf direktem Wege ...

kreol
07.05.12, 17:54
Hier nicht. Wenn ich dd mit & starte liefert eine 2. shell mir die PID (mit pidof oder ps aux). Beende ich die Shell vom dd ist auch das dd weg.

Eben gerade ausprobiert...

Kreol

Aqualung
07.05.12, 18:03
Du suchst evtl. "pv".


dd if=/dev/sda | pv -f 2>dd.log | dd of=/dev/sdb

An die dd.log kannst Du Dich jederzeit mit


tail -f dd.log

dranhängen.

blubbersuelze
07.05.12, 18:09
ah Danke @Aqualung...

endlich mal was sinnvolles an Aussage.

Werde das in Zukunft dann wohl so machen müssen, das ich an den Status komme.

mfg.
blubbersuelze :p

buzz768
08.05.12, 08:22
Oder dd in einem Screen laufen lassen


screen -dmS name dd if=/dev/urandom of=/dev/null
kill -USR1 $(pidof dd)
screen -r name

Mit 'Strg-a' und danach 'd' verlässt man den Screen wieder. -S name ist nur nötig bzw. komfortabler, wenn mehrere Screens laufen.