该电话是ZTE Blade,它的所有用户数据不方便地存储在YAFFS2文件系统中。
我的备份很旧,但是我需要恢复的SMS却来自自那以后。 SIM卡上可能有一些,所以我订购了SIM卡读取器。无论如何,我怀疑它持有的大约二十个垃圾邮件都是网络运营商造成的。
所以,我诅咒我无效的备份计划,并誓言将来将SMS备份到GMail。
同时,我决定恢复mmssms.db或它的剩余空间。
首先,我连接adb并检查安装,然后尝试将块复制到SD卡上的映像:
dd if=/dev/block/mtdblock6 of=/sdcard/data.img
没有这种运气。我认为强行拆卸将不是一个好主意,并且在任何情况下都可能无法正常工作。
因此,我将busybox的静态链接副本上载到SD卡,并使用conv = noerror选项。
我最后得到的是一个不断增大的文件,直到SD卡装满为止。
我在做什么错了?
ClockworkMod是真正拍摄图像还是只是备份文件并将其打包为图像?
是否有YAFFS2恢复程序? (我读过的两篇论文似乎很可行,但我什至都没看过PoC代码)。
很高兴收到任何线索/
编辑:电话扎根了。非常扎根:)
进一步编辑:
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
如果有运气,SMS备份和还原将允许合并。
#1 楼
短信数据库存储在您要执行的/data/data/com.android.providers.telephony/databases/mmssms.db
中。最好的方法是这样,还没有插入USB电缆:
重新启动ClockWorkmod Recovery。
进入安装和存储
选择
mount /data
插入USB
从Windows命令外壳或终端中,
adb shell
由于您处于ClockworkMod Recovery中,因此默认情况下您是root用户,现在请输入以下内容来执行此操作:
cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/MySmsDatabase.db
现在,请输入以下内容:数据库已复制到SD卡。
退出ClockworkMod恢复并重新启动,恢复将为您提供便利。
现在,您的数据库现在已复制到整个数据库。并且可以使用SqliteMan之类的方法安全地提取。 HTH。
编辑:OP很想知道如何完成转储。 -继续阅读:)
调用此命令时(插入USB并插入
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"
知道哪个分区是关键..例如,从我的Blade中,我可以看到userdata在分区
exit
上,可以在unmount /data
内找到实际的分区信息,因此使用adb shell
可以做到这一点:cat /dev/mtd/mtd6 > /sdcard/myuserdata.dump
从那里开始,根据分区上使用的文件系统,使用
mtd6
,可以通过环回挂载它。里程会有所不同,当然这是鸡和蛋的情况,要做到所有这些,手机必须扎根。评论
这很有用,所有(或至少大部分)已删除的SMS都位于mmssms.db-wal中:非常感谢您提供了有用的指针!
– Mandy
2012年7月17日19:32
我的问题仍然存在-如果情况需要,是否可以转储图像?
– Mandy
2012年7月17日19:32
是的,我将修改答案... :)
– t0mm13b
2012年7月17日在19:42
@ t0mm13b现在这是一个很好的答案:) +1
– Zuul
2012年7月17日在21:48
先生,您好!踢自己不坚持使用find -iname和grep,但是恐慌会对您造成伤害。另外,我还想找一个合适的eejit,将我所有的SMS都传送到字符串中,而少读一些字符串,所以再次感谢;)
– Mandy
2012年7月18日在21:52
评论
您的刀片是否扎根?@Mandy:关于您的另一个问题:Yaffs2是一个闪存文件系统,具有对基础闪存存储的磨损均衡保护(它具有日志构造的数据模型,其中没有适当的写操作,但始终位于“ log”的末尾)并从头部回收旧的未使用空间(非常简单的解释)。如果您没有写太多,您可能会找到较旧的文件实例。通过忽略删除之前的尾巴部分,您可能会很幸运。到目前为止,尚未完成YAFFS2的文件雕刻。
可能会有帮助:如何从/ data分区恢复已删除的文件?