Пользователь
0,0
рейтинг
6 августа 2014 в 11:02

Администрирование → Восстановление данных из внутренней памяти на Android для чайников из песочницы tutorial

Сейчас всё больше смартфонов идут без слота для sd-card, и информацию приходится хранить на встроенной памяти с доступом к ней по MTP. Такой режим подключения не позволяет стандартными средствами восстановить данные телефона после wipe’а или случайного удаления.

Сегодня на примере связки Xiaomi Mi2s и Windows 8.1 я постараюсь рассказать, как можно восстановить утерянные данные, кому интересно, добро пожаловать под кат.

Следует заметить, что если вы по ошибке отформатировали внутреннюю память смартфона/планшета/смартпэда, то не стоит расстраиваться, а главное, ни в коем случае не нужно ничего записывать в память устройства, так у вас получится восстановить больше данных.

Протокол MTP не позволяет компьютеру распознать подключенный девайс как USB-накопитель и программы для восстановления не могут просканировать такое устройство и спасти данные, поэтому нам потребуется скопировать весь внутренний раздел памяти в виде образа системы.

Подготовка Android-устройства


Вам понадобится root и включенная отладка по USB.

Подготовка PC


Для того, чтобы скопировать раздел системы, нам понадобится:


Сперва устанавливаем USB-драйвера для вашего устройства и ADB. После этого советую перезагрузить ПК.

VHDtool

Создаём папку с адресом C:\cygwin64\000 (имя не имеет значения, не стоит только использовать буквы отличные от латиницы), здесь будет лежать наш образ. Копируем в папку VHDtool.exe.

FileZilla

В ходе инсталяции соглашаемся на все стандартные установки.
После установки FileZilla запустится автоматом, но из программы необходимо выйти и запустить её от имени Администратора.
При запуске FileZilla спросит имя сервера, оставляем всё как есть.



Далее заходим Edit — Settings и делаем следующие настройки:

listen on those ports 40
timeout settings — по умолчанию стоит 120, 60, 60, а мы ставим везде 0 и нажимаем ОК.
Заходим в edit — users. В окошке users создаем нового юзера. В моем случае это юзер qwer.
Нажимаем Add — пишем имя — пароль pass — нажимаем ОК.

Далее в том же меню Users, слева выбираем закладку Shared folders. Заходим туда и добавляем папку в которую будет заливаться наш блок. Нажимаем Add и добавляем папку C:\cygwin64\000. В окошке появится путь к этой папке. Если слева от надписи C:\cygwin64\000 не будет буквы H, то нужно нажать Set as home dir. Затем выделив строчку C:\cygwin64\000 нужно отметить права Read и Write галочками. Затем нажать ОК.



ADB

Нам понадобятся следующие файлы:
  • adb.exe
  • AdbWinApi.dll
  • adb-windows.exe
  • AdbWinUsbApi.dll
  • fastboot.exe


Скачать их можно на тут.
Или вытащить из дистрибутива Android SDK.

Копируем их в папку C:\cygwin64\bin
Проверка работы ADB

Запускаем консоль из папки C:\cygwin64\bin, для этого достаточно вписать cmd в адресную строку проводника


Вводим команду:

adb devices


Список подключенных девайсов не должен быть пуст, если после строчки List of devices attached пусто, то вы не установили USB-драйвера или не включили отладку по USB.

Когда всё идет хорошо, консоль выглядит так:



20352f2c – мой Xiaomi Mi2s

Режим модема по USB


Нам понадобится подключить аппарат по USB к вашему ПК и включить режим модема по USB. Я использую CyanogenMod 11 и у меня этот режим находится по пути: Настройки > Беспроводные сети > Ещё… > Режим модема > USB-модем
Скриншот

Теперь нам необходимо узнать, какой IPv4 адрес получил ваш компьютер.
Используем команду ipconfig в командной строке
или
Идем по пути: Панель управления\Сеть и Интернет\Центр управления сетями и общим доступом



Кликаем по надписи ’Подключение по локальной сети’ далее Сведения и копируем адрес IPv4.



В моём случае это 192.168.42.79

Важно! При каждом переподключении USB кабеля и вкл/выкл режима модема IPv4 будет меняться.

Какой блок памяти нам нужен?


Вся память в вашем устройстве делится на логические блоки, нам не нужно качать все, достаточно понять, какой раздел содержит стёртую информацию.

Теперь нам необходимо посмотреть список блоков памяти, для этого вводим построчно следующие команды:

adb shell
su
find /dev/block/platform/ -name 'mmc*' -exec fdisk -l {} \; > /sdcard/list_of_partitions.txt

Hint: если вам лень вручную переписывать команды или вы боитесь допустить ошибку, то можно воспользоваться копированием, но вставить привычным способом строчку в консоль не выйдет, поэтому необходимо кликнуть правой кнопкой мыши по окну консоли, далее выбрать изменить > вставить.



После чего во внутренней памяти появится файл list_of_partitions.txt, который нам необходимо скопировать на ПК и изучить.
Скопировать его можно в нашу папку 000 с помощью простой команды (выполнять её следует в отдельном окне командной строки):
adb pull /sdcard/list_of_partitions.txt C:/cygwin64/000


Мой файл имеет вид
Disk /dev/block/platform/msm_sdcc.1/mmcblk0p27: 25.6 GB, 25698483712 bytes
4 heads, 16 sectors/track, 784255 cylinders
Units = cylinders of 64 * 512 = 32768 bytes

Disk /dev/block/platform/msm_sdcc.1/mmcblk0p27 doesn't contain a valid partition table

Disk /dev/block/platform/msm_sdcc.1/mmcblk0p26: 3758 MB, 3758096384 bytes
4 heads, 16 sectors/track, 114688 cylinders
Units = cylinders of 64 * 512 = 32768 bytes

Disk /dev/block/platform/msm_sdcc.1/mmcblk0p26 doesn't contain a valid partition table

Disk /dev/block/platform/msm_sdcc.1/mmcblk0p25: 402 MB, 402653184 bytes
4 heads, 16 sectors/track, 12288 cylinders
Units = cylinders of 64 * 512 = 32768 bytes

Disk /dev/block/platform/msm_sdcc.1/mmcblk0p25 doesn't contain a valid partition table

итд…


Внутренней памяти в моём аппарате 32 GB. Поэтому я ищу самый большой раздел, в моём случае это mmcblk0p27 размером 25,6 GB, у вас он скорее всего будет иметь другое имя, или вообще не будет иметь приписки p**. Безусловно, никто не гарантирует что именно самый большой раздел окажется тем самым на котором еще совсем недавно лежали ваши фото, видео, документы и тд., но в 90% случаев это оказывается именно тот раздел памяти который нам нужен. В противном случае вам придется по порядку копировать все образы и проверять каждый из них.

Копируем раздел памяти на ПК.



Если вы уже закрыли окно cmd, то запускаем его снова.

Вводим команды построчно:

adb shell
su
mkfifo /cache/myfifo
ftpput -v -u qwer -p pass -P 40 192.168.42.79 mmcblk0p27.raw /cache/myfifo

Не забудьте внести соответствующие корректировки в код!

Расшифруем написанное:

qwer – имя учетной записи в FileZilla (у вас свой если меняли)
pass – пароль от учетной записи в FileZilla (у вас свой если меняли)
40 – порт сервера FileZilla
192.168.42.79 – адрес сервера FileZilla (у вас свой)
mmcblk0p27.raw – копируемый блок памяти (у вас свой)



Открываем второе окно командной строки и вводим команды:

adb shell
su
dd if=/dev/block/mmcblk0p27 of=/cache/myfifo

Не забудьте исправить mmcblk0p27 на номер своего блока!

Смотрим в окно FileZilla и видим, что скачивание mmcblk0p27.raw в папку C:\cygwin64\000 началось, теперь можно закрыть окна cygwin и сделать перерыв на чай.



Конвертируем и восстанавливаем


Вернулись? Файл скачался? Отлично. Отключаем телефон, подключаем интернет. Запускаем Cygwin.bat и вводим следующие команды.

cd C:/cygwin64/000/
VhdTool.exe /convert mmcblk0p27.raw

Не забудьте исправить mmcblk0p27 на номер своего блока!

У меня конвертирование заняло пару секунд. На выходе у нас получается всё тот же файл mmcblk0p27.raw в папке C:\cygwin64\000, но уже немного другой. Этот сконвертированный файл можно смонтировать как виртуальный диск, или, например через R-studio, произвести восстановление данных непосредственно из нашего образа. Я так и поступил.


Hint: важные моменты пометил желтым.

Итоги


Моей целью было популярным языком объяснить способ копирования системного раздела с android-девайса на ПК, возможно, некоторые упрекнут меня в сложностях, связанных с USB-модемом и ftp, и скажут, что наверняка можно было проще вытащить образ. Отвечу так: я пробовал другими способами, описанными на 4pda и xda-developers, у меня не вышло, зато с ftp получилось со второй попытки, а входе написания статьи всё вообще прошло как по маслу.

У меня получилось восстановить все утерянные фото без потерь в качестве и даже то, что я и не думал восстановить. В ходе восстановления обнаружились фотографии, которые делал в августе прошлого года, когда только купил телефон и тестировал камеру.

В завершении хочется также упомянуть еще одну небольшую утилиту, которая восстанавливает данные — DiskDigger undelete. Она бесплатная, неплохой функционал, но к сожалению, после 40% она у меня вывалилась с ошибкой.

P.S. Теперь буду чаще делать бэкап…
P.P.S. Большое спасибо пользователю bakatrouble за наглядный эксперимент в комментариях и помощь в оптимизации процесса
Никита Витюк @bzz11g
карма
7,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (33)

  • +1
    Описанный способ восстановления данных — интересный и полезный способ провести время, лучше понять работу Andoid-устройств. Спасибо за статью. Обратите только больше внимания на то, что для восстановления критически важных данных, способы использующие запись на носитель, где они были потеряны, не пригодны.
    • +1
      Запись идет не на носитель, а прямо на компьютер, используя протокол FTP.
  • +4
    Номер раздела с данными можно узнать одной командой cat /proc/emmc | grep userdata
    C:\> adb shell
    root@blackmesa:/ # cat /proc/emmc | grep userdata
    mmcblk0p40: 670000000 00000200 "userdata"

    • 0
      root@hammerhead:/ # cat /proc/emmc | grep userdata
      cat /proc/emmc | grep userdata
      tmp-mksh: cat: /proc/emmc: No such file or directory

      Совет не универсальный
      • 0
        А /dev/block/platform гарантированно везде есть?
        • +1
          Насчет «везде» не уверен, но у меня на аппарате способ из поста сработал
          ...
          Disk /dev/block/platform/msm_sdcc.1/mmcblk0p28: 29.2 GB, 29236373504 bytes
          4 heads, 16 sectors/track, 892223 cylinders
          Units = cylinders of 64 * 512 = 32768 bytes
          ...
      • 0
        Возможно, тут дело не в отсутствии /proc/emmc, а в cat?
        • 0
          Нет, cat на месте
          C:\Windows\System32>adb shell
          shell@hammerhead:/ $ su
          root@hammerhead:/ # echo "test" > /sdcard/test
          root@hammerhead:/ # cat /sdcard/test
          test

          su не был нужен, конечно, ну да ладно
        • 0
          А файла нет действительно
          Скрытый текст
          image
  • +1
    waip'a исправьте, наверно имелось ввиду wipe'a.
  • 0
    Я недавно столкнулся, делал по этой инструкции с XDA (хоть там и по nexus — но подойдет для любого телефона). Можно упростить решение есть есть nix cистема под рукой.
  • 0
    У меня аппарат Highscreen Boost II (он же Innos D10), и если при зажатых «vol+» и «vol-» его подключить к ПК, то SOC загрузится в режиме USB-накопителя, представив в распоряжение всю область flash-памяти аппарата. Этот режим полезен, если «доигрались» с прошивками и задели что-нибудь не то — можно целиком забэкапить всю внутреннюю память с помощью любой удобной программы — RDrive, HDDRawCopy и т.д. Думаю, что эта возможность присутствует на многих аппратах с SoC производства Qualcomm, а может быть и других тоже.
    • 0
      Нет, на qualcomm появляется usb-девайс с другим VID/PID, не таким как при работе Android.
      Можно поставить специальный драйвер и сервисной программой QPST манипулировать NAND-памятью.
  • +1
    А почему необходим Cygwin? И обычного cmd достаточно, главное — чтобы в рабочей папке лежал adb (или чтобы он был в папке, прописанной в PATH)
    Скрытый текст
    image

    adb shell работает полностью на стороне аппарата.
    • 0
      у вас не получится вытянуть образ, а adb конечно работает и без Cygwin
      • 0
        Извините, но я все равно не вижу, чем его отсутствие может помешать
        Образ этот ведь пишется прямо на FTP, если я все правильно понимаю?
        • 0
          я не зря поставил тэг «чайник-чайнику», я не особо разбираюсь во всех этих манипуляциях, просто описал подробно и со скриншотами те действия которые выполнил для того что бы восстановить свои данные, можно проэксперементировать с использованием только cmd, но как я понял из трэдов на xda Cygwin жизненно необходим.
          • 0
            Сейчас попробую проделать это все без оного (до получения образа на компьютере)
            И еще упомяните про adb pull (для вытягивания списка разделов, быстрее выйдет)
            • 0
              спасибо за подсказку, потому что режим модема не совместим с трансфером файлов, и придется отключать, а после этого опять выписывать IPv4
          • +1
            Все как и задумано, cygwin даже не установлен
            Скрытый текст
            image

            Правда, с первой попытки не получилось — аппарат ушел в ребут на первых 420 килобайтах, а потом через USB у компьютера не получался локальный адрес, но и через точку доступа wi-fi работает тоже прекрасно
            Про существование netcat я и не подозревал, соответственно, он не установлен, и все работает без него.
            — Случайно отключил режим модема, включил снова — передача продолжается (что бы не прокатило в случае с USB)
            Но скорость явно маловата в сравнении будет
            • 0
              спасибо за эксперимент, перенесу статью в черновики и исправлю
  • 0
    хм… я восстанавливаю данные распайкой, то есть прямым доступом к нанду
    • 0
      Может что то подскажете по ACER A701 как слить данные с нанда.
      Отказала nand Samsung KLMBG8FEJA по моему, там какая то история с тем что с начало памяти пишется 32Kb нулей, и она не работает после этого, точнее в сервисе сразу говорят что мать под замену, ибо память в лом всем перепаивать, да и найти в наличии эту память что то нелегко, и там какая то заморочка с шифрованием бута c помощью кода прошитого в SoC TEGRA3, вообщем как я понял работающие детали, но программно его уже не восстановить без кода.

      А там классные фотки ребенка.
      • +1
        ловите в личку как паять
  • +1
    Причем здесь Big Data?
  • 0
    А как насчет Encryption Unsuccessful? В свое время полетела родная память смартфона, а данные были сохранены. Этот метод поможет восстановить?
  • 0
    Решил разблокировать bootloader в Sony Xperia Z Ultra. И оно, ***, потерло все данные. Сделал всё как написано в статье, правда данные вытаскивал не через filezilla а просто adb pull'ом. Потом стал смотреть Testdisk под линуксами. Всё есть — фотки вложений в письма, какие-то другие данные, но фотографий из папки DCIM для камеры нет нигде. Всё облазил. Помогите, пожалуйста… Куда еще можно потыкаться?
    • 0
      тестдиск ищет все джипеги, если среди восстановленных им jpg нет нужных Вам файлов, то их просто нет, их тела могут быть перетёрты, новой инфой. Однако не известно, насколько этот метод в статье является Full Dump. Я для восстановления обычно пользуюсь выпайкой нанда. Однако это распайка аппарата, а так как множество производителей заливают флешку различного рода компаундом, выпайка черевата нарушением работоспособности аппарата, но клиенты которые данные важнее чем аппарат, дают добро на риск.Это минус данной методы, однако плюсом является, отсутствие записи в аппарат, и 100% уверенность что считана вся память. Дальше восстановление данных.
      Ещё одна беда, что после пропажи данных, тело не выключают, а вполне себе юзают от нескольких часов, до нескольких дней, прежде принести на восстановление. Вот это и перетерает данные навсегда.
      • 0
        Я почитал, что при обновлении прошивки (видимо и анлоке бутлоадера), фотки трутся окончательно и их уже не восстановить. У меня photorec тоже не нашел, к сожалению. Что самое смешное, у меня дома есть бэкапы всего, чего можно, а тут я поленился сделать. Вот и огрёб.
        • 0
          отсюда вывод, если нужны данные, не* писать на аппарат
          • 0
            Сделал еще вывод для себя — не хранить на носимых устройствах то, чего нет в бэкапе на домашнем серваке.
  • 0
    edwar1: Пытаюсь восстановить удаленные данные из внутренней памяти Samsung Galaxy Tab 3 7.0 WIFI (3G)
    У меня получается файл list_of_partitions.txt с нулевым размером, как это исправить?
    • 0
      Аналогичная проблема, аппарат Note 3 (OS 5.0), хотя на SGS3 с MIUI на борту все получилось по мануалу. Кто знает как получить данные о разделах? Может мешает KNOX?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.