theHacker's Blog
– It's just a glitch in the Matrix –

USB-Stick beim Unmounten zusehen

Wer einen USB-Stick abziehen möchte, muss vorher sicherstellen, dass er ordentlich unmounted wurde. Das geht entweder mit dem umount-Befehl oder per grafischer Oberfläche – je nach Linux-Distribution ein wenig anders.

Im Bild unten ist die Geräteüberwachung von Kubuntu gezeigt, mit der ein Speichermedium sicher getrennt werden kann:

Grafische Oberfläche: USB-Gerät sicher trennen

umount scheint zu hängen

Wer jedoch schon mal eine größere Menge an Daten, z. B. riesige Videodateien, auf einen USB-Stick kopiert hat und ihn unmounten wollte, wird sich gewundert haben, wieso das ewig dauert. Mit der grafischen Oberfläche erhält man einen Ladekringel, wo nicht klar ist, ob alles ok is oder sich der Vorgang aufgehängt hat. Auf der Konsole ist es ähnlich, es tut sich nix und man bekommt kein Prompt mehr.

Das ist normal, da beim Kopieren der Daten diese nicht wirklich direkt auf den USB-Stick geschrieben werden, sondern Linux diese in einem Write-Cache hält. Drum geht das Kopieren auch so irre schnell. Erst beim Unmounten werden die Daten aus dem Write-Cache wirklich auf den USB-Stick geschrieben und das dauert seine Zeit. Zieht man den Stick ohne ordentliches Unmounten in diesem Zustand ab, so sind die Daten nicht drauf.

Leider erhält man weder mit der grafischen Oberfläche, noch mit dem umount-Befehl auf der Konsole einen Indikator, wie weit der Vorgang fortgeschritten ist. Es gibt aber einen kleinen Trick… 🙂

Mit dem proc-Dateisystem dem USB-Stick zusehen

Linux stellt im proc-Dateisystem allerhand nützliche Informationen zur Verfügung. In der Datei /proc/meminfo befinden sich diverse Statistiken über den Speicherverbrauch. Die zwischengespeicherten Dateien – die wir vorher auf den USB-Stick „kopiert“ haben – befinden sich im Write-Cache und der ist im Speicher. Da die Dateien aus dem Write-Cache noch nicht geschrieben worden sind, sind sie in der /proc/meminfo als „Dirty“ bezeichnet:

thehacker@ares:~$ grep -e Dirty: /proc/meminfo
Dirty:           1246400 kB

Hier sehen wir die Ausgabe, wenn wir mit grep nur die relevante Zeile ausgeben, die uns interessiert. Im Beispiel sind etwa 1,2 GiB noch nicht geschrieben. Nachdem der umount-Befehl abgeschickt wurde, können wir beobachten, wie die Dirty-Zahl immer kleiner wird.

Wir können den watch-Befehl nutzen, um regelmäßig die Ausgabe zu aktualisieren. Damit haben wir einen Echtzeit-Indikator, wie lange es noch dauert, bis der USB-Stick sicher abgezogen werden darf:

watch -d -n0,5 grep -e Dirty: /proc/meminfo

-d highlightet die Veränderungen. Das macht das Lesen etwas einfacher bzw. ist wohl auch Geschmackssache. Du kannst diesen Parameter auch einfach weglassen. -n gibt an, wie oft die Anzeige aktualisiert wird. Im obigen Beispiel sind das 0,5 Sekunden.

Konsolen-Fenster mit watch-Befehl

Die Dirty-Zahl wird niemals ganz auf Null gehen. Auch kann es sein, dass gerade andere Speicherbereiche dirty sind und deshalb die Zahl erhöhen. Sie ist allerdings ein guter Indikator, wo man ansonsten gar keine Information hat.

6. November 2018

Schreib einen Kommentar hierzu

Deine eMail-Adresse wird nicht veröffentlicht.