Also hier ist was passiert.
Ich habe eine Sicherung eines Laufwerks auf meinem Server über einen Linux-Live-USB-Stick gestartet. Ich fing an, das erste Laufwerk mit dem dd
Befehl vanilla zu kopieren . nur sudo dd if=/dev/sda of=/dev/sdc1
ich und dann erinnerte , dass dies nur die Konsole leer läßt , bis es fertig ist .
Ich musste ohnehin ein anderes Backup auf demselben Laufwerk ausführen, also habe ich auch dieses mit gestartet sudo dd if=/dev/sdb of=/dev/sdc3 status=progress
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?
quelle
dd
dass bereits allewrite()
Systemaufrufe abgeschlossen waren undfsync
oderclose
blockiert wurde, bis die Schreibvorgänge die Festplatte erreichen. Bei einem langsamen USB-Stick führen die standardmäßigen Schwellenwerte für den Linux-E / A-Puffer dafür, wie groß schmutzige Schreibpuffer sein können, zu einem qualitativ anderen Verhalten als bei großen Dateien auf schnellen Datenträgern, da die Puffer so groß sind, wie Sie und es kopieren dauert noch merklich lange.dd
ist wirklich eine großartige information, besonders für server, auf denen man nicht installieren kann / willpv
Mein Werkzeug für diese Art von Sachen ist
progress
:Ich finde es besonders nützlich, weil:
pv
in pipe oderdcfldd
muss ich nicht daran denken, einen anderen befehl auszuführen, wenn ich die operation starte, ich kann sachen 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 beendet habe. Außerdem ist es 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.quelle
--command <command-name>
.Führen Sie
dd
dann in einer separaten Shell den folgenden Befehl aus:Dadurch erhält pv Statistiken über alle geöffneten Dateideskriptoren des
dd
Prozesses. Es zeigt Ihnen beide, wo sich der Lese- und Schreibpuffer befindet.quelle
/proc/$PID/fdinfo
und/proc/$PID/fd
nach welchen Dateien (und damit nach der Größe). Also ja, sehr cool und eine gute Idee für ein Feature, aber ich würde es nicht als "erstaunlich" bezeichnen, da es Linux-APIs gibt, mit denen die Dateipositionen eines anderen Prozesses abgefragt werden können.pv
Pipelines im Voraus sorgfältig vorzubereiten .) Natürlich ging ich davon aus, als ich sah, dass dies funktioniert.Es gibt eine Alternative zu
dd
:dcfldd
.http://dcfldd.sourceforge.net/
https://linux.die.net/man/1/dcfldd
quelle
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
kill -USR1 $(pidof dd)
Der aktuelle dd-Prozess wird folgendermaßen angezeigt:
11117279 Bytes (11 MB, 11 MiB) kopiert, 13,715 s, 811 kB / s
quelle
status=progress
gibt