Der Grund dafür ist, dass das Programm "schreibe diese Daten" sagt und der Linux-Kernel sie in einen Speicherpuffer kopiert, der in die Warteschlange gestellt wird, um auf die Festplatte zu gehen, und dann sagt "ok, fertig". Das Programm glaubt also, alles kopiert zu haben. Dann schließt das Programm die Datei, aber plötzlich lässt sie der Kernel warten, während dieser Puffer auf die Platte geschoben wird.
Leider kann das Programm Ihnen nicht sagen, wie lange es dauern wird, den Puffer zu leeren, weil es es nicht weiß.
Wenn Sie einige Power-User-Tricks ausprobieren möchten, können Sie die Größe des von Linux verwendeten Puffers reduzieren, indem Sie den Kernel-Parameter vm.dirty_bytes
setzen zu etwas wie 15000000
(15MB). Dies bedeutet, dass die Anwendung ihrem tatsächlichen Fortschritt nicht mehr als 15 MB vorauseilen kann. (Mit sudo sysctl vm.dirty_bytes=15000000
können Sie Kernel-Parameter im Handumdrehen ändern aber um sie über einen Neustart hinweg bestehen zu lassen, muss eine Konfigurationsdatei wie /etc/sysctl.conf
geändert werden die für Ihre Distribution spezifisch sein könnten.)
Ein Nebeneffekt ist, dass Ihr Computer mit dieser Einstellung möglicherweise einen geringeren Datenschreibdurchsatz hat, aber im Großen und Ganzen finde ich es hilfreich zu sehen, dass ein Programm lange läuft, während es viele Daten schreibt, im Vergleich zu der Verwirrung, eine zu haben Das Programm scheint mit seiner Arbeit fertig zu sein, aber das System hinkt stark hinterher, da der Kernel die eigentliche Arbeit erledigt. Einstellung dirty_bytes
auf einen relativ kleinen Wert kann auch verhindern, dass Ihr System nicht mehr reagiert, wenn Sie wenig freien Speicher haben und ein Programm ausführen, das plötzlich viele Daten schreibt.
Aber nicht zu klein einstellen! Ich verwende 15 MB als grobe Schätzung, dass der Kernel den Puffer in 1/4 Sekunde oder weniger auf eine normale Festplatte spülen kann. Es verhindert, dass sich mein System "träge" anfühlt.