- PVSM.RU - https://www.pvsm.ru -
Сейчас всё больше смартфонов идут без слота для sd-card, и информацию приходится хранить на встроенной памяти с доступом к ней по MTP. Такой режим подключения не позволяет стандартными средствами восстановить данные телефона после waip’а или случайного удаления.
Сегодня на примере связки Xiaomi Mi2s и Windows 8.1 я постараюсь рассказать, как можно восстановить утерянные данные, кому интересно, добро пожаловать под кат.
Следует заметить, что если вы по ошибке отформатировали внутреннюю память смартфона/планшета/смартпэда, то не стоит расстраиваться, а главное, ни в коем случае не нужно ничего записывать на память, так у вас получится восстановить больше данных.
Протокол MPT не позволяет компьютеру распознать подключенный девайс как USB-накопитель и программы для восстановления не могут просканировать такое устройство и спасти данные, поэтому нам потребуется скопировать весь внутренний раздел памяти в виде образа системы.
Для того, чтобы скопировать раздел системы, нам понадобится:
Сперва устанавливаем USB-драйвера для вашего устройства и ADB. После этого советую перезагрузить ПК.
Запускаем скаченный файл. Install from internet > Далее > Далее > Direct connection (если вы не используете прокси и VPN) > выбираем сервер, с которого будут качаться модули (я качал с box-soft.com) > Далее произойдет загрузка списка модулей и откроется окно с доступными для скачивания > Нам понадобится пункт Devel, а в нём все подпункты, название которых начинается с букв gcc > Далее начнется загрузка выбранных модулей и дальнейшая их установка.
Создаём папку с адресом C:cygwin6400 (имя не имеет значения, не стоит только использовать буквы отличные от латиницы), здесь будет лежать наш образ. Копируем в папку VHDtool.exe.
Скачанный архив распаковываем в папку C:cygwin64
В ходе инсталяции соглашаемся на все стандартные установки.
После установки 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:cygwin6400. В окошке появится путь к этой папке. Если слева от надписи C:cygwin6400 не будет буквы H, то нужно нажать Set as home dir. Затем выделив строчку C:cygwin6400 нужно отметить права Read и Write галочками. Затем нажать ОК.
Нам понадобятся следующие файлы:
Скачать их можно на 4pda [7].
Или вытащить из дистрибутива Android SDK.
Копируем их в папку C:cygwin64bin
Отключаем интернет полностью, если вы используете ноутбук, то воспользуйтесь режимом полёта.
Вам понадобится root.
Свежий BusyBox [8].
И включенная отладка по USB.
Нам понадобится подключить аппарат по USB к вашему ПК и включить режим модема по USB. Я использую CyanogenMod 11 и у меня этот режим находится по пути: Настройки > Беспроводные сети > Ещё… > Режим модема > USB-модем

Теперь нам необходимо узнать, какой IPv4 адрес получил ваш компьютер.
Идем по пути: Панель управленияСеть и ИнтернетЦентр управления сетями и общим доступом
Кликаем по надписи ’Подключение по локальной сети’ далее Сведения и копируем адрес IPv4.
В моём случае это 192.168.42.79
Важно! При каждом переподключении USB кабеля и вкл/выкл режима модема IPv4 будет меняться.
Вся память в вашем устройстве делится на логические блоки, нам не нужно качать все, достаточно понять, какой раздел содержит стёртую информацию.
Для этого подключаем ваш аппарат к ПК USB-шнурком и от имени администратора запускаем Cygwin.bat в папке C:cygwin64
Вводим команду:
adb devices
В список подключенных девайсов не должен быть пуст, если после строчки List of devices attached пусто, то вы не установили USB-драйвера или не включили отладку по USB.
Когда всё идет хорошо, консоль выглядит так:

20352f2c – мой Xiaomi Mi2s
Теперь нам необходимо посмотреть список блоков памяти, для этого вводим построчно следующие команды:
adb shell
su
find /dev/block/platform/ -name 'mmc*' -exec fdisk -l {} ; > /sdcard/list_of_partitions.txt
Hint: если вам лень вручную переписывать команды или вы боитесь допустить ошибку, то можно воспользоваться копированием, но вставить привычным способом строчку в консоль не выйдет, поэтому необходимо кликнуть правой кнопкой мыши по окну консоли, далее выбрать изменить > вставить.

После чего во внутренней памяти появится файл list_of_partitions.txt, который нам необходимо скопировать на ПК и изучить.
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% случаев это оказывается именно тот раздел памяти который нам нужен. В противном случае вам придется по порядку копировать все образы и проверять каждый из них.
Копируем раздел памяти на ПК.
Если вы уже закрыли окно Cygwin, то запускаем его снова от имени администратора через Cygwin.bat
Вводим команды построчно:
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 – копируемый блок памяти (у вас свой)
Открываем второе окно Cygwin.bat и вводим команды:
adb shell
su
dd if=/dev/block/mmcblk0p27 of=/cache/myfifo
Не забудьте исправить mmcblk0p27 на номер своего блока!
Смотрим в окно FileZilla и видим, что скачивание mmcblk0p27.raw в папку C:cygwin6400 началось, теперь можно закрыть окна cygwin и сделать перерыв на чай.
Вернулись? Файл скачался? Отлично. Отключаем телефон, подключаем интернет. Запускаем Cygwin.bat и вводим следующие команды.
cd /000/
VhdTool.exe /convert mmcblk0p27.raw
Не забудьте исправить mmcblk0p27 на номер своего блока!
У меня конвертирование заняло пару секунд. На выходе у нас получается всё тот же файл mmcblk0p27.raw в папке C:cygwin6400, но уже немного другой. Этот сконвертированный файл можно смонтировать как виртуальный диск, или, например через R-studio, произвести восстановление данных непосредственно из нашего образа. Я так и поступил.
Hint: важные моменты пометил желтым.
Моей целью было популярным языком объяснить способ копирования системного раздела с android-девайса на ПК, возможно, некоторые упрекнут меня в сложностях, связанных с USB-модемом и ftp, и скажут, что наверняка можно было проще вытащить образ. Отвечу так: я пробовал другими способами, описанными на 4pda и xda-developers, у меня не вышло, зато с ftp получилось со второй попытки, а входе написания статьи всё вообще прошло как по маслу.
У меня получилось восстановить все утерянные фото без потерь в качестве и даже то, что я и не думал восстановить. В ходе восстановления обнаружились фотографии, которые делал в августе прошлого года, когда только купил телефон и тестировал камеру.
В завершении хочется также упомянуть еще одну небольшую утилиту, которая восстанавливает данные — DiskDigger undelete [9]. Она бесплатная, неплохой функционал, но к сожалению, после 40% она у меня вывалилась с ошибкой.
P.S. Теперь буду чаще делать бэкап...
Автор: bzz11g
Источник [10]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/66865
Ссылки в тексте:
[1] Cygwin: https://cygwin.com/install.html
[2] Netcat: http://www.daemon.de/Netcat
[3] VHDtool: http://code.msdn.microsoft.com/vhdtool
[4] habrahabr.ru/post/205572/: http://habrahabr.ru/post/205572/
[5] developer.android.com/sdk/win-usb.html: http://developer.android.com/sdk/win-usb.html
[6] FileZilla: https://filezilla-project.org/download.php?type=server
[7] 4pda: http://4pda.ru/forum/index.php?showtopic=383300
[8] BusyBox: https://play.google.com/store/apps/details?id=stericson.busybox
[9] DiskDigger undelete: https://play.google.com/store/apps/details?id=com.defianttech.diskdigger
[10] Источник: http://habrahabr.ru/post/232399/
Нажмите здесь для печати.