Wir testen, wie sich unser System (aktuell läuft es unter Windows 7 Embedded) verhält, wenn ohne Vorwarnung die Stromversorgung unterbrochen wird. Unser PC läuft bewusst nicht über eine USV.
In einem Test haben wir eine einfache Textdatei im Editor erstellt, etwas Text hinzugefügt, die Datei gespeichert und dann einige Sekunden später den Strom ausgeschaltet, es handelte sich also nicht um ein ordnungsgemäßes Herunterfahren.
Als wir den Strom wieder eingeschaltet haben, waren die Änderungen an der Datei NICHT gespeichert.
Bei näherer Untersuchung stellten wir fest, dass bei unserer Crucial MX200 SSD die Option „Schreibcache auf dem Gerät aktivieren“ aktiviert war.
NachDeaktivierenMit dieser Einstellung haben wir unsere Tests erneut durchgeführt und dabei angenommen, dass die Datenträgerschreibvorgänge sofort ausgeführt und nicht zwischengespeichert würden.
Aber wie zuvor wurden die Änderungen an der Datei immer noch nicht gespeichert, wenn wir einige Sekunden nach dem „Speichern“ der Datei die Stromversorgung unterbrachen.
Update – wir haben dieses Verhalten mit zwei verschiedenen SSD-Marken und einer Festplatte getestet und das Verhalten ist das gleiche. Es sieht nur so aus, als würde der Schreibcache nie deaktiviert …
Gibt es sonst noch etwas, das uns fehlt?
Antwort1
Nachdem wir bestätigt hatten, dass unser Problem nicht auf eine bestimmte Marke oder einen bestimmten Laufwerkstyp beschränkt war, vermuteten wir, dass es an einem Windows-Verhalten lag, in unserem Fall an Windows 7.
Nach weiterer Suche fanden wir diesen Beitrag: Wie häufig leert Windows den Schreibcache?
Dies bestätigt, dass es 8 Sekunden dauert, um den internen Dateicache von Windows vollständig zu leeren.
Die Problemumgehung bestand darin, unseren Quellcode wie hier angegeben zu aktualisieren -https://jeffpar.github.io/kbarchive/kb/066/Q66052/.
Beim Öffnen unserer Dateien mit fopen
haben wir die Microsoft-spezifische Modusoption „c“ als letzte Option einbezogen und _flushall()
unmittelbar vor dem Aufruf von verwendet fclose()
.