Vor kurzem hatten wir eine ziemlich unangenehme Situation mit unserem Kunden - Raspberry Pi-basierter "Kiosk", der zur Anzeige von Fernerkundungsdaten verwendet wurde (nichts Besonderes als ein Kioskmodus-Browser, der eine sich selbst aktualisierende Webseite vom Datenerfassungsserver anzeigt), konnte aufgrund von nicht gestartet werden Beschädigung des Dateisystems. Ext4, Manual fsck erforderlich, das System wird Teil der wichtigen Präsentation von morgen sein, Service sofort erforderlich. Natürlich können wir nicht verlangen, dass der Kunde das System ordnungsgemäß herunterfährt, wenn er es über Nacht ausschaltet. Das System muss einer solchen Misshandlung einfach standhalten.
Ich möchte solche Situationen in Zukunft vermeiden und das Betriebssystem auf ein Dateisystem verschieben, das dies verhindert. Es gibt eine Reihe von Dateisystemen, die für MTD-Geräte vorgesehen sind. Um sie auf einer SD-Karte (einem Standard-Block-Gerät) auszuführen, ist ein schwerwiegendes Hüpfen erforderlich. Es gibt auch einige andere Dateisysteme (Journale usw.), die sich einer guten Beständigkeit gegen Korruption rühmen. Ich brauche noch einen vernünftigen Vergleich ihrer Vor- und Nachteile.
Welches in Linux verfügbare Dateisystem bietet den besten Schutz gegen Korruption bei unerwarteten Stromausfällen und erfordert nicht, dass Sie durch unmögliche Rahmen wie yaffs2 springen , um auf SD zu installieren.
Verschleißausgleich ist ein Plus, aber keine Voraussetzung - SD-Karten haben normalerweise ihre eigenen Mechanismen, wenn auch nicht perfekt, obwohl das System "blitzschonend" sein sollte (Systeme wie NTFS können eine SD-Karte innerhalb eines Monats ermorden).
Antworten:
Die beste Beständigkeit gegen Korruption auf einer einzelnen SD-Karte bietet BTRFS im RAID1- Modus mit automatischem Scrub-Lauf für jeden vordefinierten Zeitraum.
Die Vorteile:
So geht's:
Ich führe mein RaspberryPi unter ArchARM Linux aus und meine Karte befindet sich im SD-Reader. Ändern Sie diese Anweisungen daher entsprechend für andere Distributionen und / dev-Schnittstellen.
Hier ist ein Beispiel für ein Partitionslayout:
Um btrfs in RAID1 zu bekommen, erstellen Sie das Dateisystem wie folgt:
Dann hast du
rsync -aAXv
dazu dein zuvor gesichertes System.Um von BTRFS in raid1 zu booten, müssen Sie initramfs ändern . Daher müssen Sie die folgenden Schritte ausführen, während Ihr System noch auf Ihrem alten Dateisystem ausgeführt wird.
Raspberry verwendet normalerweise kein mkinitcpio, daher müssen Sie es installieren. Anschließend müssen Sie dem MODULES-Array in der Datei mkinitcpio.conf "btrfs" hinzufügen und initramfs mit neu erstellen
Führen Sie Folgendes aus, um zu erfahren, was anstelle von YOUR_KERNEL_VERSION eingegeben werden soll
Wenn Sie den Kernel aktualisieren, MÜSSEN Sie initramfs vor dem Neustart neu erstellen.
Anschließend müssen Sie die Startdateien von RPi ändern.
In cmdline.txt müssen Sie haben
und in config.txt müssen Sie hinzufügen
Sobald Sie das alles erledigt und Ihr btrfs RAID1-System erfolgreich gebootet haben, müssen Sie nur noch ein periodisches Scrub (alle 3-7 Tage) mit systemd timer (bevorzugt) oder cron (dcron) wie folgt einrichten:
Es wird auf Ihrem Dateisystem ausgeführt, das die Prüfsummen aller Dateien vergleicht und diese repariert (durch die richtige Kopie ersetzt), wenn es eine Beschädigung feststellt.
Die Kombination von BTRFS RAID1, Single Medium und Raspberry Pi macht dieses ziemlich arkane Zeug. Es dauerte einige Zeit und Arbeit, um alle Teile zusammenzufügen, aber hier ist es.
quelle
/boot
initramfs noch ändern, wenn ich eine fette Partition behalte ?Ein Flash-Speicher ist aus mehreren Gründen wünschenswerter als ein magnetischer Speicher, aber für diese Anwendung würde ich hauptsächlich sagen, weil es keine beweglichen Teile gibt. Abgesehen davon glaube ich nicht, dass es da draußen ein "korruptionssicheres" Dateisystem gibt, aber es gibt einige robuste Dateisysteme (ext4 ist eines davon) sowie einige Taktiken, die helfen, Korruption abzumildern.
RAM Disk
Wenn das Bild des RPi nicht haben zu ändern, und es klingt wie es nicht der Fall ist, wenn nichts versuchen , (oder sollte zu versuchen) auf die Festplatte schreiben, dann versuchen , ein Root - Dateisystem unter Verwendung erstellt werden in den RAM entpackt . Die Idee dabei ist, dass Sie beim Booten ein komprimiertes Root-Dateisystem haben, das in den RAM entpackt wird. Alle Änderungen werden an der RAM-Disk vorgenommen, sodass praktisch keine Daten auf die SD-Karte geschrieben werden, sondern nur beim Booten gelesen werden. Dies sollte die Lese- / Schreibvorgänge auf Ihrem Laufwerk verringern und die Lebensdauer des Laufwerks erhalten. Dies ist ähnlich wie beim Booten von Linux von einer CD und eines der ersten Dinge, die beim Booten von Linux passieren .
quelle
Ich würde einen anderen Weg gehen und nur ein schreibgeschütztes Dateisystem verwenden. Ich bekomme mein Himbeer-Pi nie stabil genug, wenn ich ein Lese- / Schreib-Root-Dateisystem auf der SD-Karte verwende. Sie können entweder einfach Ihren Root über den Kernel cmdline (ro) booten oder ein initramfs mit Piggyback verwenden, einschließlich Ihres gesamten Systems.
Beides ist mit meinem hausgemachten Build-System OpenADK möglich. ( http://www.openadk.org )
quelle
Nun, das Problem, das Sie hier haben, ist, dass die Verwendung eines "modernen" Dateisystems wie ext * wahrscheinlich Ihre SD-Karte zermürbt. Aus meiner Erfahrung geschieht das innerhalb eines Jahres oder im nächsten Jahr, wenn Sie das höhere Ende nehmen.
Das Problem ist, dass moderne Dateisysteme immer Blöcke verschieben, um eine Fragmentierung der Daten zu verhindern. Das ist eine gute Sache bei sich drehenden Festplatten, bei denen Sie alle Ihre Daten zusammenstellen möchten, wenn Sie sie in den Cache laden. Der Nachteil ist, dass es mehr Schreibvorgänge gibt, die nicht zwischengespeichert werden können, da das Aufräumen erledigt wird, wenn nicht viel I / O passiert.
Dies passiert auch, wenn Sie viel protokollieren, was Sie möglicherweise beim Debuggen Ihres eingebetteten Geräts tun möchten. Die Protokollierungsschreibvorgänge sind die schlechtesten Schreibvorgänge, da viele kleine Schreibvorgänge regelmäßig stattfinden, was zu einer starken Fragmentierung führt.
Wie Sie sagen, verarbeitet Ihr System auch Sensordaten. Es ist sehr wahrscheinlich, dass Sie diese auf dem Flash speichern, sobald sie verfügbar sind. Und sie sind so schlecht wie die Protokolldaten.
Ich bin auf dasselbe Problem gestoßen, auf das Sie gestoßen sind, und hier sind meine Schlussfolgerungen. Ich habe versucht, nach SD-Karten zu suchen, die als "robuster" verkauft werden, dh mit mehr Schreibvorgängen als die anderen, aber ich habe im Gegensatz zu den Benchmarks auf der SSD keinen Benchmark auf dem Markt gefunden, der sich darauf konzentriert. Da sich alle nur auf die Geschwindigkeit konzentrieren, ist es unmöglich, die Anzahl der Schreibvorgänge pro Speicherblock und die auf der SDCard verwendete Technologie zu kennen.
Ich habe jedoch bemerkt, dass die Sandisken mit "industrieller" Qualität eine längere Lebensdauer hatten, als sie namenlos sind. Was nicht überrascht, wenn Sie mehr bezahlen, bekommen Sie mehr.
Bei aktivierter intensiver Protokollierung fand ich jedoch keine SD-Karte mit einer Lebensdauer von mehr als ein paar Jahren. In einem Jahr ist der Tod am größten.
Die Lösung, die ich mir ausgedacht habe, sind die Lösungen von @ BigHomie und @ wbx: Verwenden Sie ein schreibgeschütztes extX-Dateisystem (da keine Journalerstellung mehr erforderlich ist, können Sie sogar auf das gute alte ext2 zurückgreifen). Und wenn Sie Protokolle in der Sitzung behalten oder temporäre Dateien schreiben möchten, können Sie immer eine RAMDISK verwenden.
Es gibt nur Tutorials und Skripte, mit denen Sie die Ramdisk mit Daten aus den schreibgeschützten Bereichen füllen können, damit Sie sie für die Sitzung bearbeiten können.
NB: Meine Erfahrung bestand darin, Angstrom Linux auf einem Beaglebone zu verwenden, während 20 Sensorgeräte ausprobiert wurden. Die Protokollierung dieses Systems war unter Verwendung des Journal-Systems von systemd sehr ausführlich.
quelle
Linux bietet viele Dateisysteme. ext4 ist diejenige , die ich in mehr Vertrauen haben. Im Zweifelsfall sollte ext4 für jede Partition verwendet werden , die Lese- und Schreibsystem eingebunden werden.
Das ext2- Dateisystem ist viel zerbrechlicher. Es ist ein perfektes Dateisystem für Systeme, die es schreibgeschützt bereitstellen oder die Bereitstellung ordnungsgemäß aufheben können. Bei einem Stromausfall auf ext2 ist Korruption jedoch sehr wahrscheinlich .
Die andere Option könnte jfs in Betracht ziehen , obwohl das jfs-Dateisystem in einigen Linux-Versionen nicht zuverlässig ist. Korruption ist bei jfs weniger wahrscheinlich als bei ext4 . JFS hat auch eine schnelle Ladezeit und Dateisystemprüfzeit.
quelle