FAT32/FAT16 Dateisystem in Go

aligator

Mitglied
Mein neuestes Projekt:
Implementierung vom FAT32 / FAT16 Dateisystem in Go.

Warum?
Weil - Warum nicht? ;)
Mich hat einfach interessiert wie FAT funktioniert.

Warum in Go?
Weil Go eine schöne Sprache ist, ohne viel Schnickschnack und ich aktuell eigentlich alle Bastelprojekte in Go schreibe.

Funktionsweise?
Grundsätzlich habe ich natürlich versucht die Spezifikation zu implementieren.
Als Basis verwende ich das Interface von afero, welches ich einfach implementiere. Das ist eine sehr praktische Dateisystem Abstraktion für Go.
Somit kann es mit allem genutzt werden, was afero verwendet und es werden natürlich die Utility Funktionen von afero unterstützt, wie zum Beispiel afero.Walk(...).

Aktueller Status?
Bis jetzt wird nur lesender Zugriff unterstützt, dieser aber für FAT32 und FAT16.

ToDo?
  • Schreibender Zugriff.
  • Theoretisch wäre dann auch eine Anbindung an Linux per Fuse möglich. Bindings dafür existieren: https://github.com/hanwen/go-fuse
  • Auch wäre es eventuell interessant wenn diese Library mit TinyGo für Microcontroller funktionieren würde. Mein erster Test hierzu hat aber leider noch nicht funktioniert.
  • Die Performance habe ich mir noch nicht angeschaut. Es gibt hier garantiert Verbesserungspotential.
 
Starke sache, ich bin grad endlich mal dazu gekommen, es mir etwas genauer anzusehen, ich kann aber leider kein Go^^

Mich würde interessieren : hat deine Implementierung Unterstützung für VFAT?
 
Ich denke lesen kann man Go auch recht gut wenn mans nicht programmieren kann. Ich hab auch versucht alles unklare zu kommentieren.

Zu VFAT:
Jup, ich hab die langen Dateinahmen implementiert, allerdings erst in einfachster Form. Beispielsweise gibt es noch ne Checksum mit der man prüfen kann ob sich der 8.3 Name geändert hat. Die beachte ich noch nicht.
Konkret finden kannst du das in https://github.com/aligator/GoFAT/blob/main/fs.go in der Funktion parseDir.

Mein Plan ist jetzt erst mal die Tests komplett zu machen und dann will ich mir die VFAT Namen nochmal anschaun und robuster machen.
 
Zuletzt bearbeitet:
Zurück
Oben Unten