zusätzliche Fortschrittsanzeige im Linux-Terminal

Datum

Der eine oder andere wird es kennen, man kopiert eine sehr große Datei mit cp oder dd, aber kann nicht erkennen wann der Vorgang abgeschlossen ist.
Leider beinhalten viele „alte“ Tools keine entsprechende Funktion um eine Fortschrittsanzeige anzuzeigen.

Man muss allerdings dazu sagen, dass es mittlerweile auch neuere Tools gibt, welche die gleichen Funktionen wie die alten Tools haben und auch eine Fortschrittsanzeige an Board haben. So sollte man in der heutigen Zeit anstatt cp lieber rsync nutzen, welches die Option —progress anbietet um einen zusätzlichen Statusbalken beim kopieren anzuzeigen. Bei dd ist das schon etwas schwieriger.

Tools

  • pv

pv (pipe viewer) ermöglicht es, den Fortschritt einer Aktion oder Aufgabe durch eine sog. „Pipe“ zu überwachen.

Ich persönlich finde die Syntax nicht besonders stimmig und selber immer erst schauen wie ich pv jetzt passend in den Befehl einbaue.

Einige Beispiele:

Eine Datei kopieren (mit Fortschrittsanzeige):
pv QUELLDATEI > ZIELDATEI

Mit dd aus /dev/urandom lesen und nach /dev/null schreiben. Dabei werden 100 MiB als 100% definiert:
dd if=/dev/urandom bs=1M count=100 | pv -petra -s 100m | dd of=/dev/null

Die Gerätedatei /dev/zero verwenden, um einen Datenträger mit Nullen zu überschreiben (die Option -S ist erst ab Version 1.4.x vorhanden):
dd if=/dev/zero conv=noerror,notrunc,sync bs=10240 | pv -S > /dev/sdb

pv übergibt eine 2 GiB große Datei wichtiges_backup.img an dd, das diese auf das (nicht-existente) Gerät „festplatte“ schreibt:
dd if=/media/externe_festplatte/wichtige_backup.img | pv -s 2g | dd of=/dev/festplatte

  • progress (ehemals cv (Coreutils Viewer))

auf Github: github.com

Das bauen der Binärdatei geschieht mit make && sudo make install.
Wenn dieses Tool mit dem Monitormodus progress -M gestartet wird, wird kontinuierlich geprüft ob eines der folgenden Programme ausgeführt wird:
cp mv dd tar cat rsync grep fgrep egrep cut sort md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip bzip2 bunzip2 xz unxz lzma unlzma 7z 7za zcat bzcat lzcat split gpg

sollte es einen dieser Prozesse finden, zeigt progress:

  • PID
  • den entsprechenden Befehl, welcher gerade ausgeführt wird
  • %-Angabe
  • Einzelheiten zur Dateigröße
  • den Datendurchsatz
  • die verbleibende Restzeit

Auf der Github-Seite wird die Funktionsweise folgendermaßen erklärt:
It simply scans /proc for interesting commands, and then looks at directories fd and fdinfo to find opened files and seek positions, and reports status for the largest file.

Beispiel:

Es macht sich recht einfach, wenn das Terminal per tmux_oder _screen geteilt ist, in einem Panel progress -M ausgeführt wird und im zweiten panel dann der entsprechende zeitaufwändige Befehl (z.B. dd)

  • buffer

das Tool buffer sollte sich in den Paketquellen befinden und lässt sich entsprechend apt install buffer installieren.
buffer ist ein reblocking Programm, es liest von stdin, ändert die Datenblöcke auf die angegebene Blockgröße und schreibt diese dann nach stdout.
Bei diesem Vorgang werden KB angezeigt, sowie der Datendurchsatz.

Beipspiel:

dd if=/dev/sda conv=noerror,notrunc,sync | buffer -S 100k | dd of=/dev/sdb

Autor
Kategorien Linux, Server

PRTG Map