Восстановить удаленный контент из раздела пользовательских данных?

Так и случилось, что у Аманды действительно был момент блондинки, и она по ошибке удалила все свои темы в приложении SMS. Да, «Удалить все темы», вероятно, не должно быть так просто вызвать.

Телефон ZTE Blade, все его пользовательские данные неудобно хранятся в файловой системе YAFFS2.

У меня есть старая резервная копия, но SMS, которые мне нужно восстановить, взяты с тех пор. На сим-карте наверняка есть, поэтому заказал сим-ридер. Я подозреваю, что двадцать или около того писем в основном являются спамом сетевых операторов.

Итак, я проклинаю свой неэффективный план резервного копирования и клянусь в будущем создавать резервную копию 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 Backup & Restore позволит выполнить слияние.

Ваш клинок врос?
@Mandy: Что касается вашего другого вопроса: Yaffs2 - это файловая система флэш-памяти, которая имеет защиту от выравнивания износа для базовой флэш-памяти (у нее есть модель данных , структурированная журналом, в которой записи не на месте, а вместо этого всегда идут в конец «журнала» а старое неиспользуемое пространство из головы рекультивируется.Очень просто объясняется). Если вы не написали слишком много, вы, вероятно, сможете найти более старые экземпляры файлов. Игнорируя часть хвоста непосредственно перед удалением, вам может повезти. До сих пор не выполнял вырезание файлов для YAFFS2.

Ответы (1)

База данных смс хранится в /data/data/com.android.providers.telephony/databases/mmssms.dbтом, что вы хотите сделать.

Лучше всего сделать это, пока не подключайте USB-кабель:

  1. Перезагрузитесь в ClockWorkmod Recovery.
  2. Зайдите в Mounts and Storage
  3. Выбиратьmount /data
  4. Подключите USB
  5. Из командной оболочки Windows или терминалаadb shell
  6. Поскольку вы находитесь в ClockworkMod Recovery, вы по умолчанию являетесь пользователем root, теперь сделайте этоcp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/MySmsDatabase.db
  7. выйти из adb shell, введя это:exit
  8. Теперь ваша база данных скопирована на SD-карту.
  9. Выйдите из восстановления ClockworkMod и просто перезагрузитесь, восстановление будет unmount /dataдля вас.

На этом этапе ваша база данных теперь скопирована. И может быть безопасно извлечен с помощью чего-то вроде SqliteMan . ХТН.

Редактировать: ОП было интересно узнать, как можно сделать дамп. - Читай дальше :)

Когда вы вызываете это (с подключенным 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 я вижу, что пользовательские данные находятся в разделе mtd6, в котором можно найти фактическую информацию о разделе, /dev/mtd/mtdXпоэтому нужно сделать это, используя cat:

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

И оттуда, взяв /sdcard/myuserdata.dump, в зависимости от файловой системы, используемой в этом разделе, его можно смонтировать через петлю. Пробег будет варьироваться, и, конечно, это ситуация курицы и яйца, чтобы сделать все это, телефон должен быть рутирован.

Это было очень полезно, все (или, по крайней мере, большинство) удаленных SMS были в mmssms.db-wal: Большое спасибо за полезную указку!
Однако мой вопрос остается в силе - можно ли сбросить образ, если этого требует ситуация?
Да, я исправлю ответ... :)
@ t0mm13b Вот это отличный ответ :) +1
Вы, сэр, '#@!% круты. Корю себя за то, что не настаиваю на find -iname и grep, но паника делает это с вами. Кроме того, я бы поискал подходящий eejit, который собирал все мои SMS в строки и меньше читал их, так что еще раз спасибо ;)
Аааа ... приятно помочь;) Рад, что ответ помог вам :)
Теперь просто нужно убедить sqlite, что он действительно хочет взять файл WAL и вернуть эти операторы DELETE FROM в mmssms.db. Если я получу прорыв, я опубликую результат здесь, так как это обычно то, что ищут те, кто ищет способ восстановить удаленные потоки SMS.
Удачи с ним, ОП, надеюсь, ты восстановишь его :)
вот ответ, как получить целый раздел с устройства. Требуется Linux, CWM-восстановление с поддержкой adb и знание схемы разделов вашего устройства (например, что такое устройство раздела /data, /dev/block/?)
@ t0mm13b: Yaffs2 нельзя смонтировать с использованием метода обратной связи. Yaffs2 — это файловая система для флэш-памяти, которая сильно зависит от «чипа MTD», подробнее см. в Википедии . (Это связано с некоторыми дополнительными байтами NAND на область, которые используются для выравнивания износа и не являются частью реальных данных). Если вы читаете блочное устройство, вы получаете только видимые пользователю данные, а не дополнительные флаги. Если вы хотите смонтировать образ YAFFS2, вам понадобится симулятор MTD (он включен в Android SDK, вы можете указать дополнительный .img для виртуальной машины (или перезаписать data.img))
Это сдвинулось? Я вообще не могу найти /dev/mtd/*, под 4.4.4на s5... вместо этого, кажется userdata, монтируется из этого блочного устройства:/dev/block/platform/msm_sdcc.1/by-name/userdata