Wie verwende ich JFFS2 oder UBIFS, um Datenkorruption zu vermeiden und die Lebensdauer der SD-Karte zu verlängern?

7

Der Pi verwendet ein EXT4- oder EXT3- oder FAT-Dateisystem, das nicht für Low-Level-Flash-Geräte gedacht ist. Es funktioniert möglicherweise sehr gut auf Flash-Geräten, die interne (und versteckte) Verschleißausgleichstechniken verwenden (wie heutzutage SSD), aber nicht auf einfachen Flash-Geräten, in die keine fortgeschrittenen Verschleißausgleichstechniken eingebettet sind.

Bei einfachen Flash-Geräten sind Dateisysteme wie JFFS2 oder UBIFS so konzipiert, dass sie die Verschleißnivellierung auf Dateisystemebene durchführen und sicherstellen, dass die Verschleißnivellierung angewendet wird und etwas effektiv ist. Diese Dateisysteme werden üblicherweise auf eingebetteten Plattformen verwendet, bei denen das Flash-Laufwerk ein auf der Leiterplatte des Systems montierter Flash-Chip ist. Solche Flash-Chips haben nichts eingebettet: Die von Ihnen angegebene Adresse ist die Adresse der Zelle. Keine Magie! JFFS2 erledigt die Aufgabe, den Verschleiß auszugleichen und die Schreibvorgänge usw. zu verzögern. Aber mehr als das: Es lügt das System nicht an. Wenn JFFS2 sagt, dass die Daten auf das Medium geschrieben und gelöscht werden, ist dies der Fall!

Meine Frage ist: Ist es möglich, eine Root-Partition zu haben, die JFFS2 oder UBIFS anstelle von EXT4 verwendet, was hier nicht sehr gut funktioniert?

Ich weiß, dass die Boot-Partition in FAT sein muss, aber das ist kein Problem, da sie schreibgeschützt ist. Aber wo ist das Problem, die Root-Partition in JFFS2 oder UBIFS zu haben?

Es gibt viele Leute, die sich über die Beschädigung von Daten beschweren und dass das Tragen der SD-Karte nicht unter Kontrolle ist, aber ein Teil der Lösung besteht darin, das richtige Dateisystem für das richtige Medium auszuwählen.

Was ist das Problem damit? Ich habe keine Leute gesehen, die ein geeignetes Dateisystem verwendet haben. Gibt es irgendwo eine Einschränkung?

Blup1980
quelle
4
SD-Karten der Top-Marke verfügen über eine integrierte Verschleißabgleichung.
Gerben
1
@Gerben Ich verstehe, aber was ist mit dem Ansatz, kostengünstige SD-Karten zu verwenden und den Verschleiß in der Software auszugleichen? Ich habe viele Posts über Leute gesehen, die sich über Korruption beschwert haben, und ich glaube nicht, dass sie alle Low-Cost-Karten verwendet haben, einige haben High-End-Karten verwendet. Aber sie müssen immer noch einige Tricks wie den Befehl "TRIM" in regelmäßigen Abständen ausführen usw. Ein FS sollte autonom genug sein, damit Sie solche Aufgaben auf niedriger Ebene nicht selbst in einem Cron-Job verwalten müssen. Das würde niemals passieren, wenn wir einen FS verwenden würden, der für Flash-Speicher ausgelegt ist.
Blup1980
Ich bin mir nicht sicher, wie viele Beschädigungen auf Stromausfall / falsches Herunterfahren zurückzuführen sind. Es scheint, dass das Laufen von einem externen USB-Speicherstick etwas robuster ist. Ich kann dir mit J2FS und dergleichen nicht wirklich helfen. Ich dachte, ich denke, Sie müssen den Kernel neu kompilieren, da J2FS von ihm nicht unterstützt wird (ohne Mods).
Gerben
1
Entschuldige Nein. Der Pi beschädigt immer noch SD-Karten, wenn ein Server wie MySQL gehostet wird.
Blup1980

Antworten:

7

Es ist möglich. Und ich lasse meinen Pi damit laufen.

[root@rasp-rodhome ~]# grep jffs2 /proc/mounts 
/dev/root / jffs2 rw,noatime 0 0
[root@rasp-rodhome ~]# cat /proc/version 
Linux version 3.19.0-rc7.17.rf ([email protected]) (gcc version 4.7.1 20120402 (prerelease) (crosstool-NG 1.15.2) ) #3 Sun Feb 8 21:14:52 BRST 2015

Zunächst jedoch ein großer fetter roter Hinweis: Bitte lesen Sie die JFFS2-FAQ sorgfältig durch . Lesen Sie weiter, nachdem Sie es gelesen und vollständig verstanden haben und immer noch der Meinung sind, dass es Ihren Anforderungen entspricht.

  1. Sie müssen Ihren Kernel neu kompilieren. Die JFFS2-Unterstützung wird als Modul in Raspbian kompiliert . Wir brauchen es im Kernel kompiliert . Möglicherweise möchten Sie den Kernel von Raspbian neu kompilieren oder einen Upstream-Kernel verwenden. Informationen zum Upstream-Kernel finden Sie in diesem eLinux-Artikel . Als FYI habe ich den Upstream-Kernel verwendet.

  2. Damit JFFS2 auf einer SD-Karte ausgeführt werden kann, müssen Sie einen Kernel-Trick mit dem Namen verwenden block2mtd. block2mtdemuliert ein mtd-Gerät basierend auf einem Blockgerät (reguläre Blockgerätepartition).

    • WICHTIGER HINWEIS: Der block2mtdBall wird im Kernel erst ab Version 4.0 auf Raspberry Pi während des Startvorgangs gut gespielt. Wenn Sie versuchen, einen Kernel zu kompilieren, der gleich oder kleiner als 4.0 ist, müssen Sie diesen Patch anwenden . Wenn Sie die wichtigsten Details erfahren möchten, lesen Sie die ausführliche Diskussion unter lkml .
  3. Nachdem Sie Ihren neuen Kernel erfolgreich erstellt und gestartet haben , müssen Sie Ihre JFFS2-Daten erstellen. Erstellen Sie Ihr Image und stellen Sie sicher, dass Sie das hinzufügen EBS(Blockzusammenfassung löschen; beschleunigt das Mounten). Verwenden Sie eine Blockgröße von 64 KB . So erstellen Sie das JFFS2- Image : Bitte lesen Sie dies . Ich empfehle dringend, diesen Schritt auf einem PC auszuführen.

  4. Um das Image zu schreiben, führen Sie einfach den dd if=<jffs2 image> of=/dev/mmcblk0p<JFFS partition number> Pro-Tipp aus : Behalten Sie Partition 1 zum Booten, 2 bis ext4(Fallback) und 3 bis JFFS2.

  5. Nachdem Ihre SD-Karte einsatzbereit ist, bearbeiten Sie Ihre boot.scr(vorausgesetzt, Sie verwenden einen Upstream-Kernel und damit u-boot) und definieren Sie Ihre Boot-Cmdline wie folgt:

    setenv bootargs earlyprintk block2mtd.block2mtd=/dev/mmcblk0p3,65536 root=/dev/mtdblock0 rootfstype=jffs2
    
  6. Erstellen Sie Ihren neu boot.scr(überprüfen Sie den Abschnitt Erstellen Ihres Bootloaders ).

  7. Und schließlich starten Sie Ihren Pi neu.

Randnotizen:

F: Wie lange führen Sie ein solches Setup aus? A: 7 Monate; Arbeiten wie ein Zauber.

F: Was ist mit der Geschwindigkeit? A: Wenn Sie Geschwindigkeit benötigen, ist JFFS2 nicht Ihre Lösung. Schließen Sie eine Festplatte an, verwenden Sie die SD-Karte als Bootloader und booten Sie stattdessen von der Festplatte.

F: Die Montage meines Bildes dauert ewig! A: Haben Sie die EBSOption hinzugefügt ? Auch für einen Baseballstadion; Eine 2-GB-Partition benötigt ca. 110 Sekunden auf meinem Pi zu montieren.

Viel Glück!

Rodrigo Freire
quelle
4

Aus Wikipedia:

In der Praxis werden Flash-Dateisysteme nur für Speichertechnologiegeräte (MTDs) verwendet, bei denen es sich um eingebettete Flash-Speicher ohne Controller handelt. Abnehmbare Flash-Speicherkarten und USB-Flash-Laufwerke verfügen über integrierte Controller zur Durchführung von Verschleißausgleich und Fehlerkorrektur, sodass die Verwendung eines bestimmten Flash-Dateisystems keinen Vorteil bringt.

Quelle: http://en.wikipedia.org/wiki/Flash_memory#Flash_file_systems

USB-Sticks, MMCs, SDs, CompactFlashes und andere beliebte Wechselmedien sollten nicht mit MTDs verwechselt werden. Obwohl sie Flash-Speicher enthalten, ist dieser mithilfe einer Flash-Übersetzungsschicht hinter einer Blockgeräteschnittstelle verborgen.

Quelle: http://en.wikipedia.org/wiki/Memory_technology_device

Nein, es gibt keinen Anwendungsfall für JFFS2 oder UBIFS auf der SD-Karte, die Sie in den Pi eingelegt haben.

Es gibt andere Lösungen, um den Verschleiß der SD-Karte zu verringern, z. B. die Montage mit Option relatimeoder noatime.

Amedee Van Gasse
quelle
Würde Ihre Antwort zutreffen, wenn Sie das RPi-Computermodul mit 4 GB integriertem eMMC verwenden oder nicht?
MikeSchinkel
1
Sie müssten die technischen Daten des integrierten eMMC nachschlagen: Handelt es sich um ein MTD-Gerät? Dann haben Sie Ihre Antwort.
Amedee Van Gasse