23 votos

¿Recuperar el contenido borrado de la partición userdata?

Así que sucedió, que Amanda tuvo un momento de rubia y borró todos sus hilos en la aplicación de SMS por error. Sí, "Eliminar todos los hilos" probablemente no debería ser tan fácil de invocar.

El teléfono es un ZTE Blade, con todos sus datos de usuario almacenados inconvenientemente en un sistema de archivos YAFFS2.

Tengo una copia de seguridad antigua, pero los SMS que necesito recuperar son de entonces. Probablemente haya algunos en la tarjeta SIM, así que he pedido un lector de SIM. Sospecho que la veintena que contiene son en su mayoría spam del operador de red, de todos modos.

Así que maldigo mi ineficaz plan de copias de seguridad y me comprometo a hacer copias de seguridad de los SMS en GMail en el futuro.

Mientras tanto, resuelvo recuperar mmssms.db, o lo que queda de él.

En primer lugar, conecto adb y compruebo los montajes, luego intento copiar el bloque a una imagen en la tarjeta SD:

dd if=/dev/block/mtdblock6 of=/sdcard/data.img 

No hubo suerte. Razono que desmontar a la fuerza sería una mala idea, y probablemente no funcione en ningún caso.

Entonces, subo una copia de busybox enlazada estáticamente a la tarjeta SD y uso la opción conv=noerror.

Lo que obtuve fue un archivo que fue aumentando de tamaño hasta que la tarjeta SD se llenó.

¿Qué estoy haciendo mal? ¿ClockworkMod toma una imagen en el verdadero sentido o simplemente hace una copia de seguridad de los archivos y los empaqueta en una imagen? ¿Existe un programa de recuperación de YAFFS2? (Los dos artículos que he leído lo hacen parecer factible pero no he visto ni siquiera el código PoC)

Cualquier pista se agradece/

Edición: El teléfono está rooteado. Muy rooteado :)

Editar más:

La mayoría de los mensajes que se encuentran en mmssms.db-wal:

ls -al /data/data/com.android.providers.telephony/databases
drwxrwx--x    1 radio    radio         2048 Jul 17 20:16 .
drwxr-xr-x    1 radio    radio         2048 Oct 26  2011 ..
-rw-rw----    1 root     root         60416 Jul 17 20:16 mmssms.db
-rw-rw----    1 radio    radio        32768 Jul 17 16:18 mmssms.db-shm
-rw-rw----    1 radio    radio       628832 Jun 30 19:23 mmssms.db-wal
-rw-rw-rw-    1 root     root         60416 Jul 17 20:16 mmssms.db.xxx
-rw-rw----    1 radio    radio       132096 Jun 18 13:25 telephony.db
-rw-rw----    1 radio    radio        32768 Jul 16 22:14 telephony.db-shm
-rw-rw----    1 radio    radio       106928 Jul 16 22:14 telephony.db-wal

Con un poco de suerte, SMS Backup & Restore permitirá una fusión.

0 votos

¿Su hoja está enraizada?

0 votos

@Mandy: Respecto a tu otra pregunta: Yaffs2 es un sistema de archivos flash que tiene protección de nivelación de desgaste para el almacenamiento flash subyacente (tiene un modelo de datos con estructura de registro donde las escrituras no están en su lugar sino que van siempre a la cola del "log" y el espacio antiguo no utilizado se recupera de la cabeza. Explicado de forma muy sencilla). Si no has escrito demasiado, probablemente puedas encontrar instancias de archivos más antiguas. Ignorando la parte de la cola desde justo antes del borrado podrías tener suerte. Hasta ahora no he hecho el tallado de archivos para YAFFS2.

0 votos

19voto

Nick Pierpoint Puntos 7976

La base de datos de sms se almacena en /data/data/com.android.providers.telephony/databases/mmssms.db que es lo que quieres hacer.

Lo mejor que se puede hacer es esto, no conectar el cable USB todavía:

  1. Reinicie la recuperación de ClockWorkmod.
  2. Ir a Montajes y Almacenamiento
  3. Seleccione mount /data
  4. Conecte el USB
  5. Desde el shell de comandos o el terminal de Windows, adb shell
  6. Como estás en el ClockworkMod Recovery, eres Root por defecto, ahora haz esto cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/MySmsDatabase.db
  7. salir de la adb shell escribiendo esto: exit
  8. Ahora su base de datos está copiada en la tarjeta SD.
  9. Salga de la recuperación de ClockworkMod y simplemente reinicie, la recuperación unmount /data para ti.

En esta fase, su base de datos se ha copiado. Y puede ser extraída de forma segura usando algo como SqliteMan . HTH.

Editar: El OP estaba interesado en saber cómo se puede hacer un volcado. - Sigue leyendo :)

Al invocar esto (con el USB conectado y dentro del adb shell )

sh-4.1# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00500000 00020000 "recovery"
mtd1: 00500000 00020000 "boot"
mtd2: 00120000 00020000 "splash"
mtd3: 00080000 00020000 "misc"
mtd4: 02580000 00020000 "cache"
mtd5: 0d700000 00020000 "system"
mtd6: 0cb80000 00020000 "userdata"
mtd7: 00020000 00020000 "oem"
mtd8: 00180000 00020000 "persist"

Saber qué partición es la clave.. Así que por ejemplo desde mi Blade, puedo ver que datos del usuario está en la partición mtd6 en el que la información de la partición real se puede encontrar dentro de /dev/mtd/mtdX por lo que se trata de hacer esto usando cat :

cat /dev/mtd/mtd6 > /sdcard/myuserdata.dump

Y a partir de ahí, tomar la /sdcard/myuserdata.dump Dependiendo del sistema de archivos que se utilice en esa partición, se puede montar a través de loop-back. El kilometraje variará y, por supuesto, es una situación de huevo y gallina, con el fin de hacer todo eso, el teléfono tiene que ser rooteado.

0 votos

Eso fue muy útil, todos (o al menos la mayoría) de los SMS borrados estaban en mmssms.db-wal: Muchas gracias por la útil indicación.

0 votos

Sin embargo, mi pregunta sigue en pie: ¿es posible volcar una imagen si la situación lo exige?

0 votos

Sí, voy a modificar la respuesta... :)

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X