USB-Datenträger verhalten sich insbesondere an veralteten USB-2.0-Ports bei der Datenübertragung großer Dateien tückisch.
Auf einem Linux-System transferieren die Daten nur auf den ersten Blick schnell auf das Medium.
Ein ähnliches Szenario bietet sich bei vermeintlich schnellen USB-Sticks mit 3.x Standard von No-Name Herstellern.
Fakt ist, dass der Kernel die Daten vorläufig erst ins RAM schreibt. Bis alle Schreibaktionen auf langsamen USB-Sticks endgültig abgeschlossen sind, dauert es jedoch noch eine ganze Weile, auch wenn der verwendete Dateimanager bzw. das Tool dd den erfolgreichen Abschluss der Aktion vermeldet.
Aus dem Cache werden die Daten unter Linux erst dann geschrieben, wenn der Datenträger ausgehängt wird, oder der Befehl sync im Terminal erteilt wird. Das kann bei sehr großen Dateien eine gefühlte Ewigkeit dauern, zumal eine Statusanzeige fehlt. Um die verbleibende Zeit besser abschätzen zu können, helfen zwei Kommandos, die zunächst sync im Hintergrund aufrufen und dieser per watch die Bytes im Cache anzeigen, die noch nicht physisch auf den verwendeten Datenträger geschrieben wurden:
sync & watch -n 1 grep -e Dirty: /proc/meminfo
Nun kann man im Terminal die stets aktualisierte Zeile Dirty verfolgen, mit einem Wert an Daten, der fortlaufend kleiner wird. Sobald hier der Wert 0 erreicht wird, ist die Übertragung garantiert abgeschlossen.
Damit bei Übertragungen von mehreren hundert Megabyte oder mehr Volumen beispielsweise mit dd oder ähnlichen Tools die Imagedateien auf USB-Sticks u. ä. nicht zum uneinschätzbaren Geduldsspiel ausarten, kann diese Methode Abhilfe schaffen.
Erstveröffentlichung von beluga » So 12. Jun 2022, 09:29
2 Reaktionen
Danke für den interessanten Hinweis. Lässt sich das watch auch mit rsync kombinieren?
Das habe ich noch nicht ausprobiert, versuch mal – während des Vorganges im Terminal: rsync & watch -n 1 grep -e Dirty: /proc/meminfo