Ich verwende ein kleines uClibc
und busybox
basiertes eingebettetes System auf einem x86-Gerät. Ich verwende ein initramfs, aber ich mounte auch ein benutzerdefiniertes ext3
Verzeichnis 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 ext3
Dateisystem 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
- Ist
ext3
eigentlich die beste Wahl für dieses Setup? - 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?
- Sind Daten, die zum Zeitpunkt des Stromausfalls nicht geschrieben werden, völlig sicher? Besteht insbesondere das Risiko, dass meine
initramfs.cpio
Datei auch beschädigt wird? - 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.
quelle
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()
.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,
fsck
scheint sich damit zu befassen.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.
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.
quelle
sync
Option in der/etc/fstab
Datei 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 imsync
Wesentlichen dasselbe bedeutet wie das Aufrufenfsync(my_filedescriptor)
nach einem Schreibvorgang. Ist mein Verständnis davon richtig?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).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.
quelle
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.
quelle