yvwntr

Gugelfrei ist das erste Android Fon das exfat SD-Karten reparieren kann

Vielleicht hast du es auch schon einmal bemerkt. Android möchte gerne SD-Karten formatieren. Nach einem Absturz aufgrund Energiemangels entstehen leicht Fehler auf dem Dateisystem. Vor allem das neue Standard Dateisystem auf neuen SD-Karten exFat ist dafür anfällig. Gerade wenn Apps mit regelmäßigen Schreiboperationen auf die SD-Karte zugreifen, was zB passiert wenn der Telegram Cache auf der SD-Karte eingerichtet ist passiert dies leicht.

Android meldet dann ein Problem mit der SD-Karte, fragt wie sie genutzt werden soll, und möchte sie dann formatieren:



Das ist natürlich nicht so schön, wenn man denn die vielen lieben angesammelten Daten auf der SD-Karte noch nutzen will. Mit den Änderungen bei dem besten Fon aus Witzenhausen gugelfrei passiert das nicht, die SD-Karte wird fein repariert, wie man in den logs findet:

03-06 19:55:31.843   233   238 D vold    : /dev/block/vold/public:179,65: LABEL="disk" UUID="6BFF-3689" TYPE="exfat"
03-06 19:55:31.844   233   238 D vold    : /system/bin/fsck.exfat
03-06 19:55:31.844   233   238 D vold    :     -a
03-06 19:55:31.844   233   238 D vold    :     /dev/block/vold/public:179,65
03-06 19:55:31.877   233   238 D vold    : exfatfsck 1.4.0
03-06 19:55:31.877   233   238 D vold    : Checking file system on /dev/block/vold/public:179,65.
03-06 19:55:31.959   233   238 D vold    : Fix (Y/N)? Y
03-06 19:55:31.959   233   238 D vold    : File system version           1.0
03-06 19:55:31.959   233   238 D vold    : Sector size                 512 bytes
03-06 19:55:31.959   233   238 D vold    : Cluster size                 32 KB
03-06 19:55:31.960   233   238 D vold    : Volume size                1857 MB
03-06 19:55:31.960   233   238 D vold    : Used space                 6256 KB
03-06 19:55:31.960   233   238 D vold    : Available space            1851 MB
03-06 19:55:31.960   233   238 D vold    : Totally 14 directories and 9 files.
03-06 19:55:31.960   233   238 D vold    : File system checking finished. ERRORS FOUND: 1, FIXED: 1.
03-06 19:55:31.960   233   238 E vold    : Process exited with code: 1
03-06 19:55:31.960   233   238 I vold    : Check OK

Dazu waren zwei Änderungen notwendig: Zum einen der Austausch von den AOSP exfatprogs durch die freie Implementierung exfat. Diese enthält einen sehr viel besseren Dateisystemchecker, der unter anderem auch den sogenannten Boot Sector reparieren kann. Dazu hier das issue bei lineageos.
Zum anderen wird der exit code des filecheckers von dem Android System Dämon vold falsch interpretiert: fsck liefert bei erfolgreicher Reparierung des Dateisystems 1 zurück, kein Grund zu formatieren. Hier dazu der gugelfrei commit und hier das issue bei lineageos.
Bei gugelfrei werden diese beiden Änderungen hier eingebunden.

Reproduzierbarkeit

Um den Dateisystemchecker zu testen ist ein kaputtes Dateisystem nötig. Am einfachsten lässt sich das Dateisystem einer SD-Karte mit einem Hex-Editor korrumpieren. Da der “Boot Sector” bei exfat mit einer Prüfsumme gesichert ist, wirft eine Änderung in einem ungenutztem Bereich sofort einen Fehler. Eine Änderung kann zum Beispiel bei Offset 160 durchgeführt werden.
Bei Benutzung von Linux kann dafür gut der wxHexEditor verwendet werden. Dabei sollte nicht vergessen werden, die SD-Karte vorher zu unmounten, da ansonsten die Änderungen auf der Karte evtl. nicht ankommen. Eine Kommandoreihenfolge nach Einstecken der Karte wäre also zum Beispiel:

$ sudo umount /dev/sdj1
$ sudo wxHexEditor /dev/sdj1
$ sudo eject /dev/sdj1