¿Comprobar y corregir errores de la tarjeta SD dentro de Android?

A veces, mi tarjeta SD se "corrompe" y esto provoca muchos errores de lectura/escritura. Por lo general, conectar la tarjeta SD a Windows 7 y seleccionar la opción "Comprobación de errores" (haga clic con el botón derecho en la unidad > Herramientas > Comprobación de errores) encuentra la corrupción y la corrige.

¿Cómo compruebo las tarjetas SD para ver si hay errores en la unidad y los soluciono desde el propio Android ?

También me gustaría mencionar que estoy en rooted froyo con busybox instalado.

Si tiene errores repetidamente en su tarjeta SD, debe asegurarse de que realmente tenga la capacidad indicada utilizando H2testw (enlace solo en alemán, software en alemán e inglés. Creo que esta es la página oficial a pesar de las apariencias en contrario). Las tarjetas SD defectuosas se corromperán automáticamente.

Respuestas (5)

Puede arreglar esto con la ayuda de root y un emulador de terminal (por ejemplo, Android Terminal Emulator (o, alternativamente, usando adb shell). El binario para hacer el trabajo se llama fscky generalmente se encuentra en /system/xbino /system/bin. A veces necesita una variante especial del mismo. , que podría llamarse, por ejemplo, fsck.exfato algo similar. Así que primero asegurémonos de encontrar el binario correcto:

cd /system/xbin
ls fsc*

Si no lo encuentra, repita con /system/bin. Asumiré aquí que se encontró en primer lugar, y simplemente se llama fsck(ajuste lo siguiente correspondientemente si ese no es el caso).

Como fsckviene del "núcleo de Linux", podemos consultar su página de manual para la sintaxis. Aunque puede haber algunas opciones que no funcionen en Android, las más básicas deberían funcionar. Consulte la página de manual vinculada para obtener detalles (o ejecute una máquina virtual Linux y utilícela man fscken caso de que esa página desaparezca). Me limitaré a lo básico aquí:

Primero necesitamos encontrar el dispositivo al que está vinculada su tarjeta SD. Si está montado, el mountcomando nos ayudará:

mount

Eso es todo, básicamente: verifique la salida y vea dónde se encuentra su tarjeta SD. Por lo general, esto es algo que usa vold, pero es diferente entre dispositivos. La salida puede incluir algo como /dev/block/vold/179:17 on /mnt/storage/sdcard: en ese caso, la primera parte de mi cotización es nuestro dispositivo. Para reparar la "unidad", primero debe desmontarla. Esto se puede hacer a través del menú de configuración o, como solo estamos en la terminal, emitiendo

umount /dev/block/vold/179:17

Ahora podemos ir a por el trabajo de reparación. La sintaxis básica es:

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

Entonces, primero probamos el enfoque más simple y esperamos fsckresolver todo por sí mismo:

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

Lo que básicamente significa: mostrar el progreso (-C) y pedir siempre al usuario que repare (-r) cualquier error en /dev/block/vold/179:17. Si esto no funciona, consulte con la página de manual vinculada para obtener más opciones.

También puede ahorrarse los cdpasos si lo desea utilizando ls /system/bin/fsc*y ls /system/xbin/fsc*desde cualquiera que sea su directorio de trabajo actual. Incluso podría combinar los dos en un solo comando con ls /system/xbin/fsc* /system/bin/fsc*.
en algunos sistemas, el comando también puede llamarse e2fsck, como en mi Galaxy Nexus australiano original.
@LieRyan ¿Seguro que no confundes las cosas? e2fsckes el verificador del sistema de archivos para extFS. Entonces, si tiene un nombre diferente, es más bien fsck.fato fsck_msdos(este último es un ejemplo del mundo real de una antigua ROM 2.2 de mi Moto).
No, no confundo las cosas, lo que no sabía es que esta pregunta es en realidad sobre la tarjeta SD. Así que sí, en realidad confundí algunas cosas. Bueno, estrictamente hablando, también puede formatear su tarjeta SD como ext, por lo que podría aplicarse a las personas que hacen eso.
Punto a favor. Aunque el "usuario promedio" (o el que "tiene dudas") podría quedarse con FAT, al menos por interoperabilidad. Al menos hasta que ExtFS sea compatible con la mayoría de los sistemas operativos fácilmente y de forma predeterminada sin necesidad de controladores adicionales (supongo que Windows es y seguirá siendo un escollo aquí, como de costumbre).
Solo obtuve unknown option -- Cpero intenté ejecutarlo con solo fsck.exfat /dev/block/vold/179:9. ¡Trabajado como un encanto!
Gracias por esta respuesta, creo que es lo que necesito. Tengo un error en el umount, tienes que ser root?
@OrganicMarble sí, por supuesto, para todos los comandos anteriores, o no obtiene acceso a los dispositivos (todos los que comienzan con /dev) de esa manera.
¡Gracias! Estaba confundido acerca de la raíz en la PC frente a la tableta (traté de hacerlo adb shell su). Esta respuesta y la de fsck_msdos me ayudaron a reparar mi tableta.

Si bien otras respuestas son correctas (al menos parcialmente), solo para agregar algunas notas adicionales. En las versiones recientes de Android, no necesita ejecutar la verificación del sistema de archivos manualmente, ya que lo voldmaneja automáticamente. Consulte ¿Cuándo debo ejecutar una verificación de coherencia en mi tarjeta MicroSD extraíble?

Si desea hacer esto manualmente, necesita un dispositivo rooteado porque no es posible acceder a dispositivos de bloqueo en dispositivos no rooteados. También debe desmontar el sistema de archivos antes de verificar si hay errores. Dado que la tarjeta SD externa de Android 6 se monta /mnt/media_rw/[UUID]y luego se emula en /mnt/runtime/[VIEW]/[UUID]. A continuación, se monta una VISTA/storage/[UUID] en . Ver detalles en ¿Cómo guardar archivos en una tarjeta SD externa? .

Después de desmontar la tarjeta SD por completo, ejecute fsck.*el binario respectivo en el dispositivo de bloque. Por lo general init, enumera el dispositivo de bloqueo de la tarjeta SD como /dev/block/mmcblk1p*( p*indica el número de partición, generalmente es solo 1) mientras voldcrea otro nodo de dispositivo en /dev/block/vold/[MAJOR:MINOR]. Debe encontrar el dispositivo de bloque correcto (también puede verificarlo mount | grep /mnt/media_rwantes de desmontar el sistema de archivos).

Para la familia de sistemas de archivos FAT[N], puede usar fsck_msdos(o fsck.fat), y fsck.exfatpara exFAT. Si estos no están construidos con su ROM (exFAT era un código cerrado hasta hace poco, por lo que podría haber problemas de licencia), puede usar binarios externos. O compilar a partir del código fuente ( dosfstools o exfat ).

Para ejecutar la verificación del sistema de archivos:

~# fsck.exfat /dev/block/mmcblk1p1

gracias por esto, me salva el día :)

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

Encontré una aplicación llamada AParted en el mercado que puede "reparar algunas tarjetas SD dañadas y buscar bloques defectuosos", etc.

Si no me equivoco, puede obligar a Android a que fsck tanto el almacenamiento interno como el externo al reiniciar haciendo lo siguiente según su ROM.

ejecute la aplicación de terminal y escriba

su
touch /forcefsck

Luego reinicie.

Si su teléfono no está rooteado, esto definitivamente fallará.

Fuente: XDA Forums - [Q]¿Cómo fsck /data o /system?

¿A qué te refieres con "dependiendo de tu ROM"?
Es posible que ese truco no funcione en todos los teléfonos. diferentes teléfonos pueden no hacer nada. Además, su teléfono debe estar rooteado.
Una vez que reinicié, ¿cómo puedo saber si fsckrealmente se ejecutó o no?
No estoy seguro de si Android tiene un /var/log/fsck que puede verificar, pero puede adivinar que funciona si el arranque demora un poco más de lo normal
-1. He votado negativo en tu publicación. He aquí por qué: he pasado más tiempo investigando el asunto. Su técnica sugerida es probablemente 100% errónea. Puede engañar a los lectores haciéndoles pensar que ayuda, pero la técnica en realidad no hace nada.
touch /forcefscksolo funcionará en un dispositivo con un script de inicio que verifique la presencia de un /forcefsckarchivo. No conozco un solo dispositivo Android que tenga una secuencia de comandos de inicio de este tipo. Entonces, aunque su técnica probablemente funcionará en dispositivos Debian, Ubuntu y Mint, dudo mucho que funcione en cualquier dispositivo Android. Si alguien alguna vez encuentra un solo dispositivo Android con un script de inicio que verifica /forcefsck, ¡hágamelo saber! Simplemente responde a este comentario.