Datenbeschädigung in Binärdateien durch erzwungenes Herunterfahren des Computers

Datenbeschädigung in Binärdateien durch erzwungenes Herunterfahren des Computers

Ich habe mit C++ einige Daten in einer Binärdatei gespeichert. Zwei Minuten nachdem die Daten gespeichert waren, wurde der Computer plötzlich vom Stromnetz getrennt. Als ich den Computer neu startete, waren die Daten beschädigt. Als ich die Binärdatei las, waren alle Werte 0, was sicherlich nicht das ist, was ich in die Datei geschrieben hatte.

Ist es möglich, dass die Daten in meinen Dateien durch das plötzliche Herunterfahren des Computers beschädigt wurden? Oder ist das nicht der Fall, weil einmal geschriebene und auf der Festplatte gespeicherte Daten auch bei einem plötzlichen Herunterfahren nicht beschädigt werden? Wenn Letzteres der Fall ist, muss ich eine detaillierte Untersuchung des Problems einleiten, aber ich vermute wirklich nicht, dass sonst etwas schiefgelaufen sein könnte. Das Programm ist sehr einfach und wird seit 2 Jahren verwendet, und dies ist das erste Mal, dass ich eine Datenbeschädigung von mit dem Programm geschriebenen Dateien feststelle.

PS: Die Datei war tatsächlich fertig gespeichert. Das Programm, das die Datei gespeichert hat, verwaltet die Datei-E/A korrekt – es schließt die Datei, nachdem sie fertig geschrieben wurde. Außerdem lief das Programm nicht einmal, als der Computer ausgeschaltet wurde. Dies geschah unter Windows 8.1.

Antwort1

Vereinfacht ausgedrückt muss das Betriebssystem beim Erstellen einer Datendatei diese drei Dinge tun:

  1. Ordnen Sie die zur Aufnahme der Daten erforderlichen Blöcke zu.
  2. Schreiben Sie Nullen in diese Blöcke oder sorgen Sie auf andere Weise dafür, dass Nullen angezeigt werden, wenn Sie versuchen, sie zu lesen.
  3. Schreiben Sie Ihre Daten in die zugewiesenen Blöcke.

Schritt 2 ist aus Sicherheitsgründen erforderlich. Die zugewiesenen Blöcke könnten zuvor Daten von jemand anderem enthalten haben und es wäre eine Sicherheitsverletzung, wenn das System Ihnen erlauben würde, die alten Daten zu lesen. Sie erhalten also stattdessen Nullen. Wenn zwischen Schritt 2 und 3 die Stromversorgung unterbrochen würde, würden Sie anstelle Ihrer Daten Nullen sehen.

Sofern Sie Ihre Daten nicht explizit in Ihrem Programm mit der Festplatte synchronisieren, kann Schritt 3 je nach zugrundeliegendem Betriebssystem und Dateisystem beliebig lange nach Schritt 2 erfolgen.

Auf POSIX-kompatiblen Systemen rufen Siefsync()um sicherzustellen, dass Ihre Daten dauerhaft gespeichert werden.

verwandte Informationen