23 votes

Récupérer le contenu supprimé de la partition userdata ?

Il s'est avéré qu'Amanda a eu un moment de blondeur et a supprimé par erreur tous ses messages dans l'application SMS. Ouais, "Supprimer tous les fils" ne devrait probablement pas être aussi facile à invoquer.

Le téléphone est un ZTE Blade, dont toutes les données utilisateur sont stockées sur un système de fichiers YAFFS2.

J'ai une ancienne sauvegarde, mais les SMS que je dois récupérer datent d'après cette date. Il y en a probablement sur la carte SIM, j'ai donc commandé un lecteur SIM. Je soupçonne que la vingtaine de SMS qu'il contient sont pour la plupart des spams de l'opérateur réseau, de toute façon.

Je maudis donc mon plan de sauvegarde inefficace et je fais le serment de sauvegarder les SMS vers GMail à l'avenir.

Pendant ce temps, je me résous à récupérer mmssms.db, ou ce qu'il en reste.

Tout d'abord, je connecte adb et vérifie les montages, puis j'essaie de copier le bloc vers une image sur la carte SD :

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

Pas de chance. Je pense que le démontage forcé serait une mauvaise idée, et ne fonctionnera probablement pas dans tous les cas.

Donc, je télécharge une copie liée statiquement de busybox sur la carte SD et j'utilise l'option conv=noerror.

Je me suis retrouvé avec un fichier dont la taille augmentait jusqu'à ce que la carte SD soit pleine.

Qu'est-ce que je fais de mal ? ClockworkMod prend-il une image au sens propre du terme ou se contente-t-il de sauvegarder les fichiers et de les emballer dans une image ? Existe-t-il un programme de récupération YAFFS2 ? (Les deux articles que j'ai lus le font paraître faisable mais je n'ai même pas vu de code PoC).

Tout indice est le bienvenu/

Edit : Le téléphone est rooté. Très rooté :)

Autre édition :

La plupart des messages trouvés dans 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

Avec un peu de chance, SMS Backup & Restore permettra une fusion.

19voto

Nick Pierpoint Points 7976

La base de données sms est stockée dans /data/data/com.android.providers.telephony/databases/mmssms.db ce qui est ce que vous voulez faire.

La meilleure chose à faire est la suivante : ne branchez pas encore le câble USB :

  1. Redémarrez dans ClockWorkmod Recovery.
  2. Allez dans Montages et stockage
  3. Sélectionnez mount /data
  4. Branchez l'USB
  5. À partir du shell de commande ou du terminal Windows, adb shell
  6. Puisque vous êtes dans ClockworkMod Recovery, vous êtes Root par défaut, faites maintenant ceci cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/MySmsDatabase.db
  7. sortir de la adb shell en tapant ceci : exit
  8. Maintenant votre base de données est copiée sur la carte SD.
  9. Sortez de la récupération de ClockworkMod et redémarrez, la récupération va unmount /data pour vous.

A ce stade, votre base de données est maintenant copiée. Et peut être extraite en toute sécurité en utilisant quelque chose comme SqliteMan . HTH.

Editar: Le PO souhaitait savoir comment effectuer une vidange. - Lisez la suite :)

Lorsque vous l'invoquez (avec l'USB branché et dans le cadre de l'application 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"

Savoir quelle partition est la clé Donc par exemple à partir de ma lame, je peux voir que données utilisateur est sur la partition mtd6 dans lequel l'information de partition réelle peut être trouvée dans le fichier /dev/mtd/mtdX Il s'agit donc de faire cela en utilisant cat :

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

Et à partir de là, prendre le /sdcard/myuserdata.dump En fonction du système de fichiers utilisé sur cette partition, elle peut être montée en boucle. Le kilométrage variera et bien sûr, c'est une situation de l'œuf et de la poule, afin de faire tout cela, le combiné doit être enraciné.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X