diff --git a/content/blog/sdcard-check-android.md b/content/blog/sdcard-check-android.md new file mode 100644 index 0000000..84e9209 --- /dev/null +++ b/content/blog/sdcard-check-android.md @@ -0,0 +1,49 @@ +--- +title: Gugelfrei ist das erste Android Fon das exfat SD-Karten reparieren kann +description: Gugelfrei ist das erste Android Fon das SD-Karten reparieren kann +date: 2023-03-06 +--- + +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](https://en.wikipedia.org/wiki/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](https://gugelfrei.de/) 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](https://github.com/exfatprogs/exfatprogs/) durch die freie Implementierung [exfat](https://github.com/relan/exfat/). Diese enthält einen sehr viel besseren Dateisystemchecker, der unter anderem auch den sogenannten [Boot Sector](https://learn.microsoft.com/en-us/windows/win32/fileio/exfat-specification) reparieren kann. Dazu [hier](https://gitlab.com/LineageOS/issues/android/-/issues/5550) das issue bei lineageos. +Zum anderen wird der exit code des filecheckers von dem Android System Dämon vold falsch interpretiert: [fsck](https://www.linux.org/docs/man8/fsck.html) liefert bei erfolgreicher Reparierung des Dateisystems 1 zurück, kein Grund zu formatieren. [Hier](https://git.gugelfrei.de/gugelfrei/android_system_vold/commit/5f7c9adccfab0704f147ebfc53d2295de1a3bd5f) dazu der gugelfrei commit und [hier](https://gitlab.com/LineageOS/issues/android/-/issues/5551) das issue bei lineageos. +Bei gugelfrei werden diese beiden Änderungen [hier](https://git.gugelfrei.de/gugelfrei/android/commit/86040c79db8bf5b8e71935518fe72d6125c5a699) 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](https://www.wxhexeditor.org/) 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 +``` diff --git a/layouts/partials/custom_head.html b/layouts/partials/custom_head.html index a0e06db..e61baee 100644 --- a/layouts/partials/custom_head.html +++ b/layouts/partials/custom_head.html @@ -3,3 +3,17 @@ {{ end }} + diff --git a/layouts/shortcodes/fsck-probs-img.html b/layouts/shortcodes/fsck-probs-img.html new file mode 100644 index 0000000..731ce39 --- /dev/null +++ b/layouts/shortcodes/fsck-probs-img.html @@ -0,0 +1,7 @@ +
+
+ + + +
+
diff --git a/static/images/fsck/Screenshot_sdcard-format.png b/static/images/fsck/Screenshot_sdcard-format.png new file mode 100755 index 0000000..83cc2f9 Binary files /dev/null and b/static/images/fsck/Screenshot_sdcard-format.png differ diff --git a/static/images/fsck/Screenshot_sdcard-howtouse.png b/static/images/fsck/Screenshot_sdcard-howtouse.png new file mode 100755 index 0000000..95ee4bd Binary files /dev/null and b/static/images/fsck/Screenshot_sdcard-howtouse.png differ diff --git a/static/images/fsck/Screenshot_sdcard-problem.png b/static/images/fsck/Screenshot_sdcard-problem.png new file mode 100755 index 0000000..f6b05de Binary files /dev/null and b/static/images/fsck/Screenshot_sdcard-problem.png differ