2011-01-07 1 views
0

OK, ist diese Frage eigentlich eine Folgefrage von meinem vorherigen: What would happen if I abruptly close my script while it's still doing file I/O operations?Was passiert, wenn ein Stromausfall auftritt, während das Betriebssystem gerade Datei-E/A-Operationen ausführt?

So kann es nicht eine unvollständige Zeile in eine Datei geschrieben, um zu sehen, wann immer Sie Ihr Skript/Programm sofort zu beenden, da das O wird mach ihren Job. Aber was ist, wenn es einen Stromausfall gibt und das OS gerade dabei ist, eine Zeile wie "Dies ist ein Test" (oder sogar größere Strings) an eine Datei anzuhängen, bekomme ich eine unvollständige Zeile angehängt oder nichts angehängt oder gerade schlechter, vorherige Inhalte verloren? Ich bin wirklich neugierig zu wissen, und diese Art von Situation würde definitiv auf der Serverseite passieren. Kann mir jemand helfen?

+1

Warum versuchst du es nicht und lass es uns wissen? – erjiang

+0

Wenn Sie sich darüber Sorgen machen, schreiben Sie in eine Datenbank, die Transaktionen unterstützt. – chrisaycock

+0

@erjiang: Was denkst du, wofür ich hier bin? – Shane

Antwort

2

Regel 1. Es gibt keine Magie. Keine Garantie. Keine Zusicherung. Stromausfall bedeutet, dass die Schaltung Zustände durchläuft, die außerhalb ihrer Konstruktionstoleranzen liegen. Alles könnte passieren. Keine Garantien.

was passiert, wenn ein Stromausfall gibt es, und das Betriebssystem ist nur in der Mitte ... in eine Datei anhängen, muss ich eine unvollständige Linie

angehängt bekommen

Möglicherweise. Es gibt keine Magie. Die E/A könnte zwei physikalische Blöcke enthalten. Eine geschrieben, eine ungeschrieben.

oder nichts beigefügten

Möglicherweise. Es gibt keine Magie. Der E/A-Puffer wurde möglicherweise nicht mit dem Gerät synchronisiert.

oder noch schlimmer, vorherige Inhalte verloren?

Möglicherweise. Es gibt keine Magie. Ein Blockschreiben auf das Gerät könnte - bei einem Stromausfall - fatal verfälschte Bits auf dem Gerät.

Ich bin wirklich neugierig zu wissen, und diese Art von Situation würde definitiv auf der Serverseite passieren.

"Definitiv"? Bei einem unkontrollierbaren Ereignis wie einem Stromausfall ist nichts definitiv. Alles könnte passieren.

Es gibt eine wirklich kleine Möglichkeit, dass die zufälligen verschlüsselten Bits der Text von Lincolns Gettysburg-Adresse sein könnten und das ist, was auf dem Gerät erscheint.

+2

Klingt wie jemand hat ihren Schalter auf "mehr Magie" eingestellt ... – detly

+0

Er meint, Stromausfälle können definitiv auf der Serverseite passieren. Das ist tatsächlich eine definitive Möglichkeit. – erjiang

+0

@ S.Lott: Bedeutet dies, wenn Sie ein TXT-Dokument schreiben, bereits 10.000 Zeilen abgeschlossen, und es gibt einen Stromausfall, während Sie die Speichern-Taste drücken, und starten Sie das Betriebssystem nur finden Sie alle Ihre geschriebene weg oder Datei beschädigt? OK, ich denke, ich weiß, wie wichtig Datensicherungen sind. – Shane

1

Es ist abhängig von FileSystem (und seinen Optionen), Hardware (Caches/Puffer, Medien, etc.), Anwendungsverhalten und vielen anderen Leckerbissen.

Sie können lose data, sogar Daten, die Sie sicher zuvor geschrieben hatten. Sie können ganze Partitionen korrumpieren. Sie können Müll für Dateien bekommen. Sie können eine Zeile halb geschrieben, halb beladen mit Müll oder was auch immer. Mit der richtigen Kombination von Faktoren können Sie ziemlich genau jedes Ergebnis erzielen, das Sie sich vorstellen, Dateien mit gemischten Inhalten, alte Teile gelöschter Dateien, die zusammenleben, Hunde und Katzen, die zusammenleben ... Massenhysterie!

Mit einer richtigen (Journaled? Versioned?) FS und vernünftige Hardware, Sie verringern die Menge an Chaos möglich.