1. Flash-basierter Speicher
Kommt es auf den Festplattentyp an (herkömmliche Festplatten im Vergleich zu Solid-State-Festplatten) oder auf eine andere Variable, die mir möglicherweise nicht bekannt ist? Kommt es (wenn ja) nur unter Linux vor oder ist dies in anderen Betriebssystemen vorhanden?
Wenn Sie die Wahl haben, sollten Sie nicht zulassen, dass der Flash-basierte Speicher ohne ein sauberes Herunterfahren an Leistung verliert.
Bei kostengünstigem Speicher wie SD-Karten können Sie damit rechnen, dass ganze Löschblöcke (mehrmals größer als 4 KB) verloren gehen und Daten verloren gehen, die zu verschiedenen Dateien oder wesentlichen Strukturen des Dateisystems gehören können.
Einige teure SSDs bieten möglicherweise bessere Garantien für Stromausfälle. Tests von Drittanbietern deuten jedoch darauf hin, dass viele teure SSDs dies nicht tun. Die Ebene, die Blöcke für den "Verschleißausgleich" neu abbildet, ist komplex und urheberrechtlich geschützt. Mögliche Fehler sind der Verlust aller Daten auf dem Laufwerk.
Unter Anwendung unseres Test-Frameworks testen wir 17 Standard-SSDs von sechs verschiedenen Anbietern mit insgesamt mehr als dreitausend Fehlerinjektionszyklen. Unsere experimentellen Ergebnisse zeigen, dass 14 der 17 getesteten SSD-Geräte ein überraschendes Fehlerverhalten bei Stromausfällen aufweisen, einschließlich Bit-Korruption, Shorn-Writes, unserialisierbaren Schreibvorgängen, Metadaten-Korruption und vollständigem Geräteausfall.
2017: https://dl.acm.org/citation.cfm?id=2992782&preflayout=flat
2013: https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf?wptouch_preview_theme=enabled
2. Festplatten drehen
Drehende Festplatten haben unterschiedliche Eigenschaften. Aus Gründen der Sicherheit und Einfachheit empfehle ich, davon auszugehen, dass sie die gleichen praktischen Unsicherheiten aufweisen wie flashbasierte Speicher.
Es sei denn, Sie haben konkrete Beweise, die Sie eindeutig nicht haben. Ich habe keine Vergleichszahlen für drehende Festplatten.
Eine Festplatte hinterlässt möglicherweise einen unvollständig geschriebenen Sektor mit einer schlechten Prüfsumme, was später zu einem netten Lesefehler führt. Allgemein gesagt wird dieser Ausfallmodus von Festplatten voll und ganz erwartet. native Linux-Dateisysteme sind darauf ausgelegt. Sie zielen darauf ab, den Vertrag fsync()
angesichts dieser Art von Stromausfallfehler zu bewahren . (Wir möchten dies wirklich auf SSDs garantiert sehen).
Ich bin mir jedoch nicht sicher, ob Linux-Dateisysteme dies in allen Fällen erreichen oder ob dies überhaupt möglich ist.
Der nächste Start nach diesem Fehlertyp erfordert möglicherweise eine Reparatur des Dateisystems. Da dies Linux ist, ist es möglich, dass die Dateisystemreparatur einige Fragen stellt, die Sie nicht verstehen. Dort können Sie nur Y drücken und hoffen, dass es sich von selbst regelt.
2.1 Wenn Sie nicht wissen, was der Vertrag mit fsync () ist
Der Vertrag fsync () ist sowohl eine Quelle für gute als auch für schlechte Nachrichten. Sie müssen die guten Nachrichten zuerst verstehen.
Gute Nachricht: fsync()
Ist gut dokumentiert als die richtige Art, Dateidaten zu schreiben, zB wenn Sie auf "Speichern" klicken. Und es ist allgemein bekannt, dass z. B. Texteditoren vorhandene Dateien atomar ersetzen müssen, indem sie verwenden rename()
. Dies soll sicherstellen, dass Sie immer entweder die alte Datei behalten oder die neue Datei erhalten (die fsync()
vor dem Umbenennen bearbeitet wurde). Sie möchten nicht mit einer halbgeschriebenen Version der neuen Datei belassen werden.
Schlechte Nachrichten: Seit vielen Jahren kann der Aufruf von fsync () auf dem beliebtesten Linux-Dateisystem dazu führen, dass das gesamte System einige zehn Sekunden lang hängen bleibt. Da Anwendungen nichts dagegen tun können, war es üblich, rename () ohne fsync () zu verwenden, was auf diesem Dateisystem relativ zuverlässig zu sein schien.
Daher gibt es Anwendungen, die fsync () nicht korrekt verwenden.
Die nächste Version dieses Dateisystems hat im Allgemeinen das Aufhängen von fsync () vermieden - zur gleichen Zeit, als es begann, sich auf die korrekte Verwendung von fsync () zu verlassen.
Das ist alles ziemlich schlimm. Das Verständnis dieser Geschichte wird wahrscheinlich nicht durch den abweisenden und beleidigenden Ton unterstützt, der von vielen der widersprüchlichen Kernel-Entwickler verwendet wurde.
Die aktuelle Auflösung ist das derzeit beliebteste Linux-Dateisystem Standardmäßig wird das rename () -Muster unterstützt, ohne dass fsync () erforderlich ist.implementiert "Bug-for-Bug-Kompatibilität" mit der vorherigen Version. Dies kann mit der Mount-Option deaktiviert werden noauto_da_alloc
.
Dies ist kein vollständiger Schutz. Grundsätzlich wird die ausstehende E / A beim Umbenennen () gelöscht, es wird jedoch nicht gewartet, bis die E / A abgeschlossen ist, bevor die Umbenennung erfolgt. Dies ist jedoch viel besser als zB ein 60 Sekunden langes Gefahrenfenster! Siehe auch die Antwort auf Welche Dateisysteme benötigen fsync () zur Absturzsicherung, wenn eine vorhandene Datei durch rename () ersetzt wird?
Einige weniger beliebte Dateisysteme bieten keinen Schutz. XFS lehnt dies ab. Und UBIFS hat es auch nicht implementiert, anscheinend könnte es akzeptiert werden, erfordert aber viel Arbeit, um dies zu ermöglichen. Dieselbe Seite weist darauf hin, dass UBIFS mehrere andere "TODO" -Probleme in Bezug auf die Datenintegrität aufweist, einschließlich Stromausfall. UBIFS ist ein Dateisystem, das direkt im Flash-Speicher verwendet wird. Ich stelle mir vor, dass einige der Schwierigkeiten, die UBIFS mit Flash-Speichern anführt, für die SSD-Bugs relevant sein könnten.