add fsck.exfat blog article

main
yova 1 year ago
parent 8ee287fa23
commit 18bd1cee44

@ -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:
{{<fsck-probs-img>}}
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
```

@ -3,3 +3,17 @@
<script src="/contact-form/form.js"></script>
{{ end }}
<script src="https://cdnjs.cloudflare.com/ajax/libs/medium-zoom/1.0.6/medium-zoom.min.js" integrity="sha512-N9IJRoc3LaP3NDoiGkcPa4gG94kapGpaA5Zq9/Dr04uf5TbLFU5q0o8AbRhLKUUlp8QFS2u7S+Yti0U7QtuZvQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<style>
.full-width {
width: 100vw;
position: relative;
left: 50%;
right: 50%;
margin-left: -50vw;
margin-right: -50vw;
display: flex;
padding:5px;
}
.images{ width:100%; height:100%;background:#ccc;}
</style>

@ -0,0 +1,7 @@
<br>
<div class="full-width">
<img src = "/images/fsck/Screenshot_sdcard-problem.png" class="images">
<img src = "/images/fsck/Screenshot_sdcard-howtouse.png" class="images">
<img src = "/images/fsck/Screenshot_sdcard-format.png" class="images">
</div>
<br>

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Loading…
Cancel
Save