Welches Dateisystem bietet den besten Schutz zum Schutz von Daten vor Beschädigung durch Stromausfall?

9

Ich verwende ein kleines uClibcund busyboxbasiertes eingebettetes System auf einem x86-Gerät. Ich verwende ein initramfs, aber ich mounte auch ein benutzerdefiniertes ext3Verzeichnis auf einem CompactFlash-Gerät im IDE-Modus, das ich zum Speichern persistenter Messprotokolldaten verwende, die von einer benutzerdefinierten geschriebenen C ++ - Anwendung erstellt wurden. Ich habe das ext3Dateisystem gewählt, da es aus Sicherheitsgründen bei der Verwendung von CF-Laufwerken im IDE-Modus in einigen von mir gelesenen Büchern empfohlen wird ( Building Embedded Linux Systems von Karim Yaghmour und Embedded Linux Primer von Christopher Hallinan). Dies ist besonders wichtig und die Daten sind kritisch.

Aufgrund einiger Kommentare in meiner vorherigen Frage Verwirrung darüber, wie beschädigte ext3-Dateien wiederhergestellt werden können, wenn während eines Dateischreibvorgangs ein Stromausfall auftritt, scheint dieses Dateisystem tatsächlich keine Garantie für die Sicherheit gegen Datenbeschädigung aufgrund von Strom zu bieten Verlust. Also würde ich gerne wissen ob

  1. Ist ext3eigentlich die beste Wahl für dieses Setup?
  2. Beschädigt ein Stromausfall während eines Disc-Schreibvorgangs nur den Teil der Daten, den ich regelmäßig an die Datei anhänge, oder kann er die gesamte Datei beschädigen?
  3. Sind Daten, die zum Zeitpunkt des Stromausfalls nicht geschrieben werden, völlig sicher? Besteht insbesondere das Risiko, dass meine initramfs.cpioDatei auch beschädigt wird?
  4. Gibt es eine Methode, die ich in meinem Anwendungscode zum Schutz der Daten verwenden kann (z. B. Erstellen einer zusätzlichen Partition und Schreiben meiner Daten in Spiegelbilder, sodass immer 2 Kopien vorhanden sind)? Geschwindigkeit ist für meine Anwendung kein wirkliches Problem, daher sind teure Kopiervorgänge erforderlich sind akzeptabel.

Ich habe die Antworten auf diese verwandte Frage gesehen und gelesen: Garantieren Journaling-Dateisysteme eine Beschädigung nach einem Stromausfall? , aber es deckt einige der Dinge, die mich verwirren, nicht ganz ab.

Mir ist klar, dass ich viele Fragen stelle, aber es scheint, dass ich trotz des Lesens von viel Material die Risiken für meine Daten im Falle eines Stromausfalls grundlegend nicht verstanden habe.

Mathematiker 1975
quelle

Antworten:

11

Wie bei allen Sicherheitsaspekten gibt es keine Garantien, aber Sie müssen auch Risiko (und Kosten) gegen Wahrscheinlichkeit abwägen. Aus Erfahrung (und ich habe seit dem dunklen Zeitalter Dutzende von * nix-Boxen ausgeführt) hatte ich nie wirklich eine signifikante, durch Strom verursachte Dateisystembeschädigung.

Einige dieser Computer liefen sogar auf nicht-journalisierten Dateisystemen (normalerweise ufs und ext2). Einige von ihnen waren eingebettet, und einige waren Mobiltelefone wie das Nokia N900 - eine gute Stromversorgung war also überhaupt nicht garantiert.

Es ist nicht so, dass eine Beschädigung des Dateisystems nicht passieren kann, es ist nur so, dass die Wahrscheinlichkeit, dass es passiert, gering genug ist, dass es Sie nicht beunruhigen sollte. Dennoch kein Grund, Ihre Wetten nicht abzusichern.

Als Antwort auf Ihre wörtlichen Fragen:

  1. Zumindest das erste Buch, auf das Sie verwiesen haben, wurde zuvor geschrieben. ext4Wenn der Autor die Verwendung vorschlägt, ext3heißt es wirklich: "Verwenden Sie keine instabilen oder nicht journalisierten Dateisysteme wie ext2". Versuchen Sie ext4, es ist ziemlich ausgereift und bietet einige anständige Optionen für nicht drehende Festplatten, die die Lebenserwartung Ihres Flash-Geräts verlängern können.
  2. Wahrscheinlich verlieren Sie den letzten oder zweiten Block, nicht die gesamte Datei. Bei einem Journalled-Dateisystem ist dies der einzige Verlust. Es gibt Fehlerszenarien, in denen zufällige Daten über die Datei gesprüht werden, aber sie scheinen ungefähr so ​​wahrscheinlich zu sein wie ein Mikrometeorit, der direkt durch Ihr eingebettetes Gerät schlägt.
  3. Siehe 2. Nichts ist 100,00% sicher.
  4. Wenn Sie einen zweiten IDE-Kanal haben, stecken Sie dort eine zweite CF-Karte ein und sichern Sie regelmäßig das Dateisystem. Es gibt ein paar Möglichkeiten , dies zu tun: rsync, cp dump, dd, auch die Verwendung von md(4)(Software - RAID) Gerät (Sie das zweite Laufwerk gelegentlich hinzufügen, lassen Sie es synchronisieren, dann entfernen - wenn beide Geräte sind Live die ganze Zeit, sie laufen das gleiche Risiko der Dateisystembeschädigung). Wenn Sie LVM verwenden, können Sie sogar Schnappschüsse erstellen. Für ein eingebettetes Datenerfassungsgerät würde ich nur eine Ad-hoc-Lösung verwenden, die das zweite Dateisystem bereitstellt, über das Datenprotokoll kopiert und es sofort wieder aufhebt. Wenn Sie sich Sorgen machen, dass das Gerät ein gutes Startabbild hat, kleben Sie eine zweite Kopie des Startmanagers und alle erforderlichen Startabbilder auf das zweite Gerät und konfigurieren Sie den Computer so, dass er von einer der beiden CF-Karten startet.

    Ich würde einer zweiten Kopie auf demselben Gerät nicht vertrauen , da Speichergeräte häufiger ausfallen als stabile Dateisysteme. Nach meiner bisherigen Erfahrung viel häufiger (bei der Arbeit gab es einen bitteren Scherz über die unheimlich hohen Chancen von Festplattenfehlern am Freitagnachmittag. Es war für eine Weile fast ein wöchentliches Ereignis). Unabhängig davon, ob sich die Festplatte dreht oder nicht, kann dies fehlschlagen. Bewahren Sie Ihre Eier also in zwei Körben auf, wenn Sie können, und Sie schützen Ihre Daten besser.

    Wenn die Daten besonders vertraulich sind, würde ich das Gerät regelmäßig besuchen, die Backup-CF gegen eine neue austauschen und neu starten, damit fsckalle Dateisysteme für ein gutes Maß erhalten bleiben.

Alexios
quelle
+1, jedoch weist die Replikation dieselben Probleme auf wie die primäre Kopie. Wenn Sie mit der Synchronisierung von zwei Geräten beginnen (sei es über RAID oder ein Dienstprogramm höherer Ebene) und der Strom ausfällt (während ständig Daten an die Daten angehängt werden), treten Probleme auf wieder Müll holen. Was helfen könnte, ist RAID1, das von Zeit zu Zeit eines der Geräte physisch ändert und ein Offline-Backup des entfernten Geräts erstellt. Sie müssen den FS jedoch einfrieren, bevor Sie ihn entfernen, um sicherzustellen, dass er konsistent ist (dh Snapshots erstellen). XFS ist eines der Dateisysteme, die dies unterstützen.
Peterph
Tatsächlich. Wie ich geschrieben habe, gibt es keine Garantien. Jedes Mal, wenn Sie Daten schreiben, kann es zu Beschädigungen kommen. Die Mitarbeiter von electronic.stackexchange.com haben mit Superkondensatoren und Brown-Out-Erkennung herumgespielt, bei denen das eingebettete System eine Benachrichtigung erhält, dass der Strom ausfällt, und immer noch genug Saft erhält, um Schreibvorgänge abzubrechen. Vielleicht. :) Es kommt darauf an, wie wahrscheinlich die potenzielle Gefahr ist und wie viel Geld / Aufwand Sie aufwenden möchten, um das vorliegende Problem zu beheben (und über das nächste nachzudenken).
Alexios
Danke für diese Antwort. Das klärt die Dinge für mich erheblich.
Mathematiker
4

Es scheint mir, dass das, was eine Dateisystemimplementierung im Falle eines plötzlichen Stromausfalls erreichen kann, begrenzt ist - schließlich ist sie tatsächlich mit der Hardware verbunden, also was passiert zwischen dem Zeitpunkt, an dem Daten / Anweisungen an die Hardware gesendet werden, und dem Zeitpunkt, an dem sie gesendet wird erhält eine Antwort ist außerhalb seiner Kontrolle. Wenn es ein Dateisystem gäbe, das dieses Problem umgehen könnte, hätten Sie davon gehört.

Aus diesem Grund profitiert eine Strategie zum Schutz kritischer Daten am meisten von Entscheidungen auf Hardwareebene , z. B. durch die Verwendung einer unterbrechungsfreien Stromversorgung. Wahrscheinlich ist dies in Ihrer Situation nicht so machbar.

Sie haben gesagt, Leistung ist nicht wirklich ein großes Problem, also nutzen Sie es mit Bedacht fsync().

Beschädigt ein Stromausfall während eines Disc-Schreibvorgangs nur den Teil der Daten, den ich regelmäßig an die Datei anhänge, oder kann er die gesamte Datei beschädigen?

Ich benutze extN-Dateisysteme seit Jahren persönlich und auf Internet-Servern mit geringem bis mittlerem Datenverkehr und habe wie Alexios nicht viel Korruption aufgrund eines Stromausfalls gesehen (obwohl die Server fairerweise über eine USV verfügen und ich mich nicht erinnern kann einer von ihnen geht tatsächlich so runter). Ein viel schwerwiegenderes Problem ist die Beschädigung durch Hardwarefehler, die von verschiedenen Dateisystemen (wieder) mehr und weniger in der Lage sein können, das Problem zu lösen. Dies liegt jedoch (wieder) grundsätzlich außerhalb ihrer Kontrolle und kann nicht verhindert werden.

Ich habe gelegentlich gesehen, dass Dateien verloren gingen oder auf die Größe Null gekürzt wurden. Ich nehme an, es besteht eine gute Chance, dass diese irgendwie wiederhergestellt werden können. Dies war für mich nicht notwendig, da sie gesichert wurden. Die meiste Zeit, wenn überhaupt etwas nicht stimmt, fsckscheint sich damit zu befassen.

Sind Daten, die zum Zeitpunkt des Stromausfalls nicht geschrieben werden, völlig sicher? Besteht insbesondere das Risiko, dass meine Datei initramfs.cpio ebenfalls beschädigt wird?

Ich denke, dass das Risiko nur durch einen Stromausfall wirklich sehr gering ist, mit Ausnahme der Art der Beschädigung, die Flash-Speicher aufgrund des Stromausfalls verursachen können, der mit Stromausfällen einhergehen kann - mit denen ich keine Erfahrung habe, aber hoffentlich haben Sie darüber nachgedacht und recherchierte dies.

Gibt es eine Methode, die ich in meinem Anwendungscode verwenden kann, um die Daten zu schützen?

Es lohnt sich, den Punkt über fsync () zu wiederholen . C ++ / iostream-Objekte haben hierfür keine Methode (:: flush und :: sync sind nicht fsync), aber Sie benötigen lediglich einen Dateideskriptor.

Goldlöckchen
quelle
Vielen Dank für diese Antwort, es ist auch sehr hilfreich. Ich mounte die Partition, auf die über die syncOption in der /etc/fstabDatei geschrieben wird, da ich verstehe, dass dies das synchrone Schreiben erzwingt. Ich gehe davon aus, dass dies bedeutet, dass die Daten physisch auf die Disc geschrieben wurden, wenn mein Dateischreibcode zurückgegeben wird. Ich habe verstanden, dass das Mounten mit im syncWesentlichen dasselbe bedeutet wie das Aufrufen fsync(my_filedescriptor)nach einem Schreibvorgang. Ist mein Verständnis davon richtig?
Mathematiker
@ mathematician1975 Ich würde davon ausgehen, dass dies nicht etwas ist, was ich erforscht habe. IMO, solange es nicht irgendwie unpraktisch ist, schadet es nicht, fsync()an Stellen zu werfen, die Sie für angemessen halten , und macht das System robuster (z. B. wenn das Gerät gelegentlich ohne Synchronisierungssatz usw. montiert wird).
Goldlöckchen
1

ZFS ist definitiv ein Dateisystem, das durch Design vor Korruption geschützt ist und möglicherweise das einzige. Ich bin mir jedoch nicht sicher, ob ZFS-Implementierungen (entweder fusebasiert oder nativ) für uClinux-basierte Plattformen verfügbar sind.

jlliagre
quelle
0

Es gibt mindestens ein kommerzielles Dateisystem, das hervorragende Arbeit leistet und sicherstellt, dass das Dateisystem aufgrund von Stromausfällen nahezu nicht beschädigt werden kann und dass die einzigen Daten, die Sie verlieren könnten, Daten sind, die beim Stromausfall hinzugefügt wurden.

Der Nachteil ist, dass es sehr teuer ist, auf der anderen Seite bieten sie großartige Unterstützung. Aufgrund der Kosten ist es wirklich nur eine Option für High Stakes und / oder Produkte mit hohem Volumen. Wie kritische eingebettete Geräte in der Öl- und Gasförderung, die die Systemintegrität unter "unsicheren" Betriebsbedingungen (z. B. häufige Stromausfälle usw.) sicherstellen müssen.

Schauen Sie sich DataLight (Firma) und / oder Produkt " Reliance NITRO " an. (Reliance ist ihr Vermächtnis und eine sichere, aber nicht sehr effektive Lösung, die von Reliance NITRO abgelöst wird .) Selbst wenn Sie kein Geld haben, um dieses System zu verwenden, haben sie einige ziemlich gute Artikel darüber, wie ihr System funktioniert und warum es zuverlässiger ist als z. B. ext3 und ext4.

Ich entschuldige mich, wenn dies wie eine Anzeige gelesen wurde, wollte nur auf Optionen hinweisen.

QFang
quelle
Hallo und willkommen auf der Seite. Wenn Sie Produkte vorschlagen, geben Sie bitte i) einen Link zu dem betreffenden Produkt an; ii) erklären, warum es besser ist als Alternativen (Sie behaupten nur, dass es einen enormen Job macht, erklären aber nicht, warum es besser ist als alles andere); iii) Wenn Sie mit dem Unternehmen verbunden sind, das dies vornimmt, müssen Sie dies explizit angeben oder des Spam beschuldigt werden (ohne zu sagen, dass Sie es sind, nur ein Heads-up).
Terdon