Hallo Besucher, der Thread wurde 931 mal aufgerufen und enthält 3 Antworten

letzter Beitrag von Unseen am

FAT-Dateisystem korrumpieren

  • Heute kam in lustiger Runde die Frage auf, ob oder wie man bei sd2iec das FAT-Dateisystem korrumpieren kann. Speziell ging es dabei um die Frage, ob man die IEC-Reset-Leitung an den AVR-Reset legen darf, kann oder soll.


    Wenn man das Bus-Reset an das SD2IEC-AVR-Reset angeschlossen hat, eine offene Datei hat (also noch kein CLOSE abgeschickt) und dann den C64 resettet, was passiert dann? Datei-System korrumpiert, oder nur ungesicherter Buffer-Inhalt verloren und Datei mit zu kleiner Größe und fehlendem Inhalt oder... ?


    Hat jemand aus der Bus-Reset-an-AVR-Reset-Fraktion schon Probleme mit dem Dateisystem gehabt und musste diese auf dem PC reparieren lassen?


    Macht es einen Unterschied, ob man plain-FAT oder Disk-Images benutzt?

  • Im Prinzip ist das auch nichts anderes, wie wenn man am PC auf den Reset-Knopf drückt während eines Schreibzugriffes. Also wird auch das Gleiche passieren:


    - Beim Zugriff auf die FAT ist hinterher zumindest eine FAT-Kopie korrupt
    - Beim schreiben eines Verzeichniseintrags ist die Datei verwaist
    - Beim schreiben in die Datei ist der Dateiinhalt korrupt


    Auf jeden Fall ist das Filesystem als "unclean" markiert und wird am PC eine Überprüfung auslösen.


    Wenn beide FAT-Kopien kaputtgehen sollten, hilft u.U. nur noch neu formatieren, dann wäre alles weg. Ist aber eher selten, dass reparieren ganz fehlschlägt.


    Bei einem Diskimage ist ggf. die Struktur des Images beschädigt und der Schaden automatisch größer als wenn die Dateien direkt auf der Karte liegen.

  • Wenn man das Bus-Reset an das SD2IEC-AVR-Reset angeschlossen hat, eine offene Datei hat (also noch kein CLOSE abgeschickt) und dann den C64 resettet, was passiert dann? Datei-System korrumpiert, oder nur ungesicherter Buffer-Inhalt verloren und Datei mit zu kleiner Größe und fehlendem Inhalt oder... ?


    Wenn im Augenblick des Resets gerade keine Daten aktiv geschrieben werden verliert man natürlich den Inhalt der Buffer ("CBM-DOS"-Buffer und FatFS-Sektorbuffer). Die beiden FAT-Kopien sollten aber auf jeden Fall konsistent sein. Der Directoryeintrag wird erst beim Schliessen oder bei expliziten Syncs aktualisiert, die da angegebene Dateigrösse ist also auf jeden Fall falsch. Die in der FAT eingetragene Clusterkette wird von FatFS aber immer bei Bedarf verlängert und der Eintrag sofort geschrieben, so dass ein Tool wie chkdsk zumindest eine Überabschätzung der Länge rekonstruieren könnte.


    Ich könnte die Verluste zwar durch Einstreuen von f_sync-Aufrufen reduzieren, aber das würde natürlich Schreibzugriffe verlangsamen und mehr Schreibzyklen auf der SD-Karte erzeugen.


    Zitat

    Macht es einen Unterschied, ob man plain-FAT oder Disk-Images benutzt?


    Diskimages haben den Vorteil, dass bei denen nur Daten in einer schon komplett allokierten Datei geändert werden - bei diesen sollte daher IMHO das Risiko einer FAT-Korruption sehr gering sein.