Veröffentlichung des fehlersicheren Dateisystems LittleFS 2.10

Die Ausgabe des Projekts LittleFS 2.10 wurde veröffentlicht, das ein kompaktes Dateisystem für eingebettete Geräte und Mikrocontroller entwickelt. Zunächst wurde das Dateisystem von der Firma ARM für das Betriebssystem Mbed OS erstellt, später jedoch als separates Projekt ausgegliedert. Der FS-Code ist in C geschrieben und wird unter der BSD-Lizenz verbreitet. Die Referenzimplementierung von LittleFS wird als C-Bibliothek bereitgestellt, auf deren Grundlage ein FUSE-Modul und Bindungen für verschiedene Programmiersprachen erstellt wurden.

Eigenschaften von LittleFS:

  • Geringe Ressourcenanforderungen und Unterstützung für den Betrieb bei begrenzter RAM-Größe. In der Implementierung von LittleFS werden nur statisch definierte Puffer verwendet (ohne dynamische Speicherzuweisung) und es kommen keine rekursiven Aufrufe zum Einsatz, wodurch der Verbrauch von Arbeitsspeicher und die Hilfsstruktur von LittleFS auf dem Speichergerät immer konstant bleibt, unabhängig davon, was im FS gespeichert wird und wie groß der Speicher ist.
  • Werkzeuge zur Abnutzungsanpassung von Flash-Devices (wear leveling), die eine wiederholte Nutzung von Blöcken minimieren und die Blocklöschvorgänge gleichmäßig auf dem Flash-Speicher verteilen, dessen Controller diese Aufgabe nicht von sich aus löst.
  • Sehr hohe Ausfallsicherheit – das FS betrachtet das plötzliche Beenden (Abschaltung durch Stromausfall) als Normalfall und garantiert, dass die Speicherinhalte zu jedem Zeitpunkt in einem konsistenten Zustand auf der Festplatte sind. Um eine Integritätsverletzung und Datenverluste zu vermeiden, wird der Mechanismus copy-on-write (COW) angewendet, bei dem Änderungen nicht die Informationen überschreiben, sondern an einem neuen Ort gespeichert werden.
  • Atomarität bei Operationen wie Löschen und Umbenennen, selbst im Falle eines Stromausfalls während ihrer Ausführung. Änderungen an einer Datei werden erst nach dem Aufruf von sync oder close auf die Festplatte geschrieben. Inkonsistenzen, die durch nicht-atomar ausführbare Operationen verursacht werden, werden von einem speziellen Deorphan-Handler gelöst, der nach dem Laden des FS den gesamten Baum durchläuft.
  • Unterstützung von POSIX-ähnlichen Funktionen für die Arbeit mit Dateien und Verzeichnissen.

Der Inhalt der Dateien in LittleFS wird durch COW-Listen von CTZ dargestellt, die eine Komplexität von O(1) beim Hinzufügen und O(nlogn) beim Lesen gewährleisten. Die Zuweisung von Blöcken erfolgt durch das Scannen des Dateisystems nach genutzten Blöcken in einem festen Bereich, der als Bitvektor gespeichert wird. Um das Scannen zu vereinfachen, sind alle Verzeichnisse Teil einer verketteten Liste, die das gesamte Dateisystem abdeckt. Wenn beim Schreiben eines Blocks ein Fehler festgestellt wird, wird ein neuer Block zugewiesen und die Daten werden dorthin verschoben.

Zu den Änderungen in der neuen Version von LittleFS gehören:

  • Der Code zur Analyse von Dateipfaden wurde überarbeitet, was das Verhalten des Dateisystems den POSIX-Systemen und den Erwartungen der Nutzer in Situationen wie dem Auftreten eines abschließenden Schrägstrichs, der Verarbeitung leerer Pfade und der Navigation außerhalb des Wurzels des Dateisystems nähergebracht hat.
  • Zwei neue Beispiele für Blockgeräte, ramcrc32bd und ramrsbd, wurden hinzugefügt, die einen fehlerkorrekturmechanismus implementieren, der mit LittleFS kompatibel ist. In der aktuellen Version unterstützt LittleFS selbst keine Fehlererkennung und -korrektur, diese Operationen werden auf die Ebene der Blockgeräte verlagert.
  • Die Funktion lfs_mkdir unterstützt nun abschließende Schrägstriche, d.h. der Aufruf lfs_mkdir("a/") führt nun nicht mehr zu einem Fehler.
  • In den Funktionen lfs_stat und lfs_getattr wird jetzt ein Fehler zurückgegeben, wenn abschließende Schrägstriche verwendet werden, wenn der im Dateisystem vorhandene Pfad kein Verzeichnis ist.
  • Der Versuch, eine Datei über die Funktion lfs_file_open mit einem abschließenden Schrägstrich im Namen zu öffnen, führt jetzt zu einem Fehler LFS_ERR_NOTDIR, wenn die Datei im Dateisystem kein Verzeichnis ist, LFS_ERR_ISDIR, wenn der Name auf ein Verzeichnis im Dateisystem verweist, und LFS_O_CREAT, wenn die Datei nicht existiert.
  • Der Versuch, außerhalb des Wurzels des Dateisystems zuzugreifen, z.B. lfs_stat("/../a"), führt jetzt zu einem Fehler.
  • Das Angeben eines leeren Pfades ist jetzt kein Synonym für den Zugriff auf das Wurzelverzeichnis mehr, d.h. der Aufruf lfs_stat("") führt zu einem Fehler.

Quelle: opennet.ru

60GB SSD 8Gb DDR4