SD-Kartenfehler in Android selbst überprüfen und beheben?

Manchmal wird meine SD-Karte "beschädigt", was zu vielen Lese-/Schreibfehlern führt. Normalerweise wird die Beschädigung gefunden und behoben, wenn Sie die SD-Karte an Windows 7 anschließen und die Option „Fehlerprüfung“ (Rechtsklick auf das Laufwerk > Extras > Fehlerprüfung) auswählen.

Wie überprüfe ich SD-Karten auf Laufwerksfehler und behebe diese vom Android selbst aus ?

Ich möchte auch erwähnen, dass ich auf gerootetem froyo bin und busybox installiert habe.

Wenn Sie wiederholt Fehler auf Ihrer SD-Karte haben, sollten Sie sich mit H2testw vergewissern, dass sie wirklich die angegebene Kapazität hat (Link nur auf Deutsch, Software auf Deutsch und Englisch. Ich glaube, dies ist die offizielle Heimat trotz des gegenteiligen Anscheins). Schlechte SD-Karten werden automatisch beschädigt.

Antworten (5)

Sie können dies mit Hilfe von root und einem Terminal-Emulator (z. B. Android Terminal Emulator (oder alternativ mit adb shell)) beheben. Die Binärdatei, die den Job erledigt, heißt fsckund befindet sich normalerweise entweder in /system/xbinoder /system/bin. Manchmal benötigen Sie eine spezielle Variante davon , die zB heißen könnte fsck.exfato.ä. Stellen wir also zunächst sicher, dass wir die richtige Binärdatei finden:

cd /system/xbin
ls fsc*

Wenn nicht gefunden, wiederholen Sie mit /system/bin. Ich gehe davon aus, dass es hier überhaupt erst gefunden wurde und einfach aufgerufen wird fsck(falls das nicht der Fall ist, folgendes entsprechend anpassen).

Wie fsckaus dem "Linux-Kern" hervorgeht, können wir die Manpage für die Syntax konsultieren. Obwohl es einige Optionen geben könnte, die auf Android nicht funktionieren, sollten die einfachsten sein. Einzelheiten finden Sie auf der verlinkten Manpage (oder führen Sie eine Linux-VM aus und verwenden Sie man fscksie, falls diese Seite verschwindet) – ich werde mich hier an die Grundlagen halten:

Zuerst müssen wir das Gerät finden, an das Ihre SD-Karte gebunden ist. Wenn es gemountet ist, mounthilft uns der Befehl:

mount

Das ist es im Grunde: Überprüfen Sie die Ausgabe und sehen Sie, wo Ihre SD-Karte sitzt. Normalerweise ist dies etwas, das verwendet wird vold, aber es ist zwischen den Geräten unterschiedlich. Die Ausgabe kann so etwas beinhalten wie /dev/block/vold/179:17 on /mnt/storage/sdcard: In diesem Fall ist der erste Teil meines Zitats unser Gerät. Um das "Laufwerk" zu reparieren, müssen Sie es zuerst aushängen. Dies kann über das Einstellungsmenü oder, da wir gerade im Terminal sind, durch Ausgabe erfolgen

umount /dev/block/vold/179:17

Jetzt können wir uns an die Reparatur machen. Grundsyntax ist:

fsck [options] [-t fstype] <filesystem> [fsoptions]

Also probieren wir erstmal den einfachsten Ansatz und hoffen fsck, dass sich alles selbst herausfindet:

fsck -C -r /dev/block/vold/179:17

Was im Grunde bedeutet: Fortschritt anzeigen (-C) und den Benutzer immer bitten, Fehler zu beheben (-r) auf /dev/block/vold/179:17. Wenn dies nicht funktioniert, finden Sie weitere Optionen auf der verlinkten Manpage.

Sie können sich die Schritte auch sparen cd, wenn Sie möchten, indem Sie ls /system/bin/fsc*und ls /system/xbin/fsc*aus Ihrem aktuellen Arbeitsverzeichnis verwenden. Sie könnten die beiden sogar mit in einem Befehl kombinieren ls /system/xbin/fsc* /system/bin/fsc*.
Auf einigen Systemen kann der Befehl auch e2fsck heißen, wie z. B. auf meinem australischen Galaxy Nexus.
@LieRyan Sicher, dass du die Dinge nicht verwechselst? e2fsckist der Dateisystemprüfer für extFS. Wenn es also einen anderen Namen hat, ist es eher fsck.fatoder fsck_msdos(letzteres ein reales Beispiel aus einem alten 2.2-ROM von meinem Moto).
Nein, ich verwechsle die Dinge nicht, was mir nicht bewusst war, ist, dass es bei dieser Frage tatsächlich um die SD-Karte geht. Also ja, ich habe tatsächlich einige Dinge verwechselt. Genau genommen können Sie Ihre SD-Karte auch als ext formatieren, sodass dies möglicherweise für Personen gilt, die dies tun.
Punkt genommen. Obwohl der "durchschnittliche Benutzer" (oder derjenige, der Zweifel hat) besser bei FAT bleiben sollte, zumindest für die Interoperabilität. Zumindest bis ExtFS auf den meisten Betriebssystemen problemlos und standardmäßig ohne zusätzliche Treiber unterstützt wird (schätze, Windows ist und bleibt hier wie üblich eine Falle).
Ich habe nur unknown option -- Cversucht, es mit nur auszuführen fsck.exfat /dev/block/vold/179:9. Lief wie am Schnürchen!
Vielen Dank für diese Antwort, ich denke, es ist das, was ich brauche. Ich habe einen Fehler auf der umount, müssen Sie root sein?
@OrganicMarble ja, natürlich – für alle oben genannten Befehle, oder Sie erhalten auf diese Weise keinen Zugriff auf Geräte (alle beginnend mit /dev).
Danke! Ich war verwirrt über Root auf dem PC und auf dem Tablet (ich habe es versucht adb shell su). Diese Antwort und die über fsck_msdos haben mir geholfen, mein Tablet zu reparieren.

Während andere Antworten (zumindest teilweise) richtig sind, nur um einige zusätzliche Anmerkungen hinzuzufügen. Bei neueren Android-Versionen müssen Sie die Dateisystemprüfung nicht manuell ausführen, da volddies automatisch erfolgt. Siehe Wann sollte ich eine Konsistenzprüfung auf meiner austauschbaren MicroSD-Karte durchführen?

Wenn Sie dies manuell tun möchten, benötigen Sie ein gerootetes Gerät, da es nicht möglich ist, auf Blockgeräte auf nicht gerooteten Geräten zuzugreifen. Außerdem müssen Sie das Dateisystem aushängen, bevor Sie nach Fehlern suchen. Seit Android 6 wird eine externe SD-Karte auf gemountet /mnt/media_rw/[UUID]und dann auf emuliert /mnt/runtime/[VIEW]/[UUID]. Eine VIEW wird dann per Bind-Mount an /storage/[UUID]. Einzelheiten finden Sie unter Wie speichert man Dateien auf einer externen SD-Karte? .

Führen Sie nach dem vollständigen Deinstallieren der SD-Karte die entsprechende fsck.*Binärdatei auf dem Blockgerät aus. Führt normalerweise das initSD-Kartenblockgerät als auf /dev/block/mmcblk1p*( p*bezeichnet die Partitionsnummer, normalerweise ist es nur 1), während voldein weiterer Geräteknoten in erstellt wird /dev/block/vold/[MAJOR:MINOR]. Sie müssen das richtige Blockgerät finden (können Sie auch überprüfen, mount | grep /mnt/media_rwbevor Sie das Dateisystem aushängen).

Für Dateisysteme der FAT[N]-Familie können Sie fsck_msdos(oder fsck.fat) und fsck.exfatfür exFAT verwenden. Wenn diese nicht mit Ihrem ROM erstellt wurden (exFAT war bis vor kurzem Closed Source, daher könnten Lizenzprobleme auftreten), können Sie externe Binärdateien verwenden. Oder bauen Sie aus ( dosfstools oder exfat ) Quellcode.

Dateisystemprüfung ausführen:

~# fsck.exfat /dev/block/mmcblk1p1

Danke dafür, es rettet meinen Tag :)

root@android:/ # mount | grep -i sdcard
/dev/block/nandk /mnt/sdcard vfat rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0

root@android:/ # /system/bin/fsck_msdos -y /dev/block/nandk

Ich habe eine App namens AParted auf dem Markt gefunden, die "einige beschädigte SD-Karten reparieren und nach fehlerhaften Blöcken suchen" usw. kann.

Wenn ich mich nicht irre, können Sie Android zwingen, beim Neustart sowohl den internen als auch den externen Speicher zu durchsuchen, indem Sie je nach ROM Folgendes tun.

Führen Sie die Terminal-App aus und geben Sie ein

su
touch /forcefsck

Dann neu starten.

Wenn Ihr Telefon nicht gerootet ist, wird dies definitiv fehlschlagen.

Quelle: XDA-Foren - [F]Wie fsck /data oder /system?

Was meinst du mit "je nach ROM"?
Dieser Trick funktioniert möglicherweise nicht auf allen Telefonen. Verschiedene Telefone können möglicherweise nichts tun. Außerdem muss Ihr Telefon gerootet sein.
Wie kann ich nach dem Neustart wissen, ob es fscktatsächlich gelaufen ist oder nicht?
Ich bin mir nicht sicher, ob Android ein /var/log/fsck hat, das Sie überprüfen können, aber Sie können vermuten, dass es funktioniert, wenn das Booten etwas länger als normal dauert
-1. Ich habe deinen Beitrag runtergevotet. Hier ist der Grund: Ich habe mehr Zeit damit verbracht, mich mit der Angelegenheit zu befassen. Ihre vorgeschlagene Technik ist wahrscheinlich zu 100% falsch. Es mag den Leser täuschen, dass es hilft, aber die Technik tut tatsächlich nichts.
touch /forcefsckfunktioniert nur auf einem Gerät mit einem Init-Skript, das das Vorhandensein einer /forcefsckDatei prüft. Ich kenne kein einziges Android-Gerät, das ein solches Init-Skript hat. Obwohl Ihre Technik wahrscheinlich auf Debian-, Ubuntu- und Mint-Geräten funktionieren wird, bezweifle ich stark, dass sie auf jedem Android-Gerät funktioniert. Wenn jemand auch nur ein einziges Android-Gerät mit einem Init-Skript findet, das auf prüft /forcefsck, lassen Sie es mich bitte wissen! Antworten Sie einfach auf diesen Kommentar.