So defragmentieren Sie ein JFFS2-Dateisystem tatsächlich

So defragmentieren Sie ein JFFS2-Dateisystem tatsächlich

Ich habe im gesamten Internet, darunter in zahlreichen StackExchange-Foren, nach einer praktikablen Methode zur Defragmentierung eines JFFS2-Dateisystems gesucht und kann keine Antwort finden.

Das betreffende System verfügt über einen 256 MB großen NAND-Flash-Teil. Der Zugriff erfolgt über ein MTD-Gerät, das in drei Partitionen unterteilt ist. In der dritten Partition wird das Root-Dateisystem als JFFS2-Dateisystem gespeichert. Das Problem besteht darin, dass Schreibvorgänge in das Root-Dateisystem eine nicht deterministische Leistung aufweisen, da der JFFS2-Garbage Collector sich wie üblich dazu entscheidet, zum ungünstigsten Zeitpunkt zu laufen. Wenn das passiert, bleibt das Produkt für eine unbekannte Zeit hängen, während der Garbage Collector (und pdflush) laufen.

Das Ändern des Dateisystems ist keine Option. Die Lösung muss etwas sein, das außerhalb der Arbeitszeiten ausgeführt werden kann und nach der Ausführung eine vorhersehbarere Schreibleistung ergibt. Im Moment arbeite ich an einem Programm, das versucht, den Garbage Collector zum Ausführen zu zwingen und dann die Datei zu löschen, in der Hoffnung, dass alle freigegebenen Knoten plötzlich leichter verfügbar sind und die Schreibleistung verbessert wird.

Gedanken?

Antwort1

Versuchen Sie, Ihren eigenen Garbage Collection-Algorithmus zu implementieren und diesen während der Mount-Zeit auszuführen. Wenn nicht genügend Speicherplatz zum Schreiben vorhanden ist, starten Sie erneut separat einen Garbage Collection-Thread.

Es ist viel einfacher, wenn Sie Ihre Dateien als Fragmente schreiben, so dass Sie, wenn Sie einen Block oder eine Seite mit der Hälfte einer Datei darin löschen, diese immer noch irgendwo hinschreiben und die Seite für die zukünftige Verwendung abrufen können.

Der schwierige Teil besteht darin, eine Datei zu öffnen, die mehrere Fragmente aufweist, die sich über das gesamte Dateisystem erstrecken.

verwandte Informationen