Also hier ist was passiert.
Ich habe eine Sicherung eines Laufwerks auf meinem Server über einen Linux-Live-USB-Stick gestartet. Ich begann das erste Laufwerk mit dem Befehl dd
Vanilla zu kopieren. Nur Sudo dd if=/dev/sda of=/dev/sdc1
und dann fiel mir ein, dass die Konsole leer bleibt, bis sie fertig ist.
Ich musste ohnehin ein anderes Backup auf demselben Laufwerk ausführen, also habe ich dieses auch mit Sudo dd if=/dev/sdb of=/dev/sdc3 status=progress
gestartet und dann eine Textzeile mit der aktuellen Übertragungsrate und dem Fortschritt in Byte angezeigt.
Ich hoffte auf eine Methode, die einen Prozentsatz der Sicherung anzeigt, anstatt zu berechnen, wie viele Bytes von 1,8 TB gesichert wurden. Gibt es einen einfacheren Weg als status = progress?
Siehe Antworten auf diese Frage [ 1 ]
pv
Zum Beispiel können Sie pv
verwenden, bevor Sie beginnen
Sudo apt-get install pv # if you do not have it
pv < /dev/sda > /dev/sc3 # it is reported to be faster
pv /dev/sda > /dev/sc3 # it seems to have the same speed of the previous one
#or
Sudo dd if=/dev/sda | pv -s 1844G | dd of=/dev/sdc3 # Maybe slower
Ausgabe [ 2 ]:
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
Anmerkungen:
Insbesondere bei großen Dateien möchten Sie möglicherweise man dd
anzeigen und die Optionen festlegen, die für die Beschleunigung Ihrer gesamten Hardware erforderlich sind, z. bs=100M
zum Einstellen des Puffers, oflag=sync
zum Zählen der effektiven geschriebenen Bytes, möglicherweise direct
...
Die Option -s
akzeptiert nur ganzzahlige Parameter, also 1.8T-->1844G
.
Wie Sie an den ersten Zeilen erkennen können, brauchen Sie dd
überhaupt nicht.
kill -USR1 pid
Wenn Sie den Befehl dd
bereits gestartet haben , haben Sie die PID (Ctrl-Z + bg
und Sie lesen es oder pgrep ^dd
...) Sie können ein Signal senden USR1
(oder SIGUSR1
oder SIGINFO
siehe unten) und die Ausgabe lesen.
Wenn die PID des Programms 1234 mit ist
kill -USR1 1234
dd
antwortet auf dem Terminal seines STDERR mit etwas ähnlichem wie
4+1 records in
4+0 records out
41943040 bytes (42 MB) copied, 2.90588 s, 14.4 MB/s
Warnung: Unter OpenBSD müssen Sie möglicherweise das Verhalten von kill
im Voraus überprüfen.[]: stattdessen verwendenkill -SIGINFO 1234
.
Es existiert die Signatur SIGINFO
. Der SIGUSR1
sollte in diesem Fall das Programm (dd
) beenden ...
Verwenden Sie unter Ubuntu -SIGUSR1
(10
).
Mein Werkzeug für diese Art von Sachen ist progress
:
Dieses Tool kann als Tiny , Dirty, Linux- und OSX-Only C-Befehl beschrieben werden, der nach Coreutils-Grundbefehlen sucht (cp, mv, dd, tar, gzip/gunzip, cat usw.). Wird derzeit auf Ihrem System ausgeführt und zeigt den Prozentsatz der kopierten Daten an. Es kann auch geschätzte Zeit und Durchsatz anzeigen und bietet einen "top-like" -Modus (Überwachung).
Es scannt einfach
/proc
nach interessanten Befehlen und durchsucht dann die Verzeichnissefd
undfdinfo
, um geöffnete Dateien zu finden und Positionen zu suchen, und meldet den Status für die größte Datei.Es ist sehr leicht und mit praktisch jedem Befehl kompatibel.
Ich finde es besonders nützlich, weil:
pv
in pipe oder dcfldd
muss ich nicht daran denken, einen anderen Befehl auszuführen, wenn ich die Operation starte. Ich kann Dinge nachträglich überwachen.kill -USR1
funktioniert es mit praktisch jedem Befehl. Ich muss die Manpage nicht immer noch einmal überprüfen, um sicherzustellen, dass ich die Kopie nicht versehentlich abbringe. Es ist auch schön, dass beim Aufrufen ohne Parameter der Fortschritt für alle gängigen "Datenübertragungs" -Befehle angezeigt wird, die gerade ausgeführt werden, sodass ich nicht einmal die PID nachschlagen muss.pv -d
muss ich die PID nicht nachschlagen.Führen Sie dd
aus und rufen Sie dann in einer separaten Shell den folgenden Befehl auf:
pv -d $(pidof dd) # root may be required
Dadurch erhält pv Statistiken über alle geöffneten Dateideskriptoren des dd
-Prozesses. Es zeigt Ihnen beide, wo sich der Lese- und Schreibpuffer befindet.
Es gibt eine Alternative zu dd
: dcfldd
.
dcfldd ist eine erweiterte Version von GNU dd mit Funktionen, die für die Forensik und Sicherheit nützlich sind.
Statusausgabe - dcfldd kann den Benutzer über den Fortschritt in Bezug auf die übertragene Datenmenge und die Dauer des Vorgangs auf dem Laufenden halten.
dcfldd if=/dev/zero of=out bs=2G count=1 # test file
dcfldd if=out of=out2 sizeprobe=if
[80% of 2047Mb] 52736 blocks (1648Mb) written. 00:00:01 remaining.
http://dcfldd.sourceforge.net/
https://linux.die.net/man/1/dcfldd
Als Prozentsatz müssten Sie ein bisschen rechnen, aber Sie können den Fortschritt eines DDS in einer für Menschen lesbaren Form erhalten, selbst nachdem Sie bereits damit begonnen haben, indem Sie kill -USR1 $(pidof dd)
ausführen.
Der aktuelle dd-Prozess wird folgendermaßen angezeigt:
11117279 Bytes (11 MB, 11 MiB) kopiert, 13,715 s, 811 kB/s