[Из песочницы] Восстановление данных из внутренней памяти на Android для чайников
Сейчас всё больше смартфонов идут без слота для sd-card, и информацию приходится хранить на встроенной памяти с доступом к ней по MTP. Такой режим подключения не позволяет стандартными средствами восстановить данные телефона после waip«а или случайного удаления.Сегодня на примере связки Xiaomi Mi2s и Windows 8.1 я постараюсь рассказать, как можно восстановить утерянные данные, кому интересно, добро пожаловать под кат.Следует заметить, что если вы по ошибке отформатировали внутреннюю память смартфона/планшета/смартпэда, то не стоит расстраиваться, а главное, ни в коем случае не нужно ничего записывать на память, так у вас получится восстановить больше данных.
Протокол MPT не позволяет компьютеру распознать подключенный девайс как USB-накопитель и программы для восстановления не могут просканировать такое устройство и спасти данные, поэтому нам потребуется скопировать весь внутренний раздел памяти в виде образа системы.
Подготовка PCДля того, чтобы скопировать раздел системы, нам понадобится: Сперва устанавливаем USB-драйвера для вашего устройства и ADB. После этого советую перезагрузить ПК.Cygwin Запускаем скаченный файл. Install from internet > Далее > Далее > Direct connection (если вы не используете прокси и VPN) > выбираем сервер, с которого будут качаться модули (я качал с box-soft.com) > Далее произойдет загрузка списка модулей и откроется окно с доступными для скачивания > Нам понадобится пункт Devel, а в нём все подпункты, название которых начинается с букв gcc > Далее начнется загрузка выбранных модулей и дальнейшая их установка.
VHDtool Создаём папку с адресом C:\cygwin64\000 (имя не имеет значения, не стоит только использовать буквы отличные от латиницы), здесь будет лежать наш образ. Копируем в папку VHDtool.exe.Netcat Скачанный архив распаковываем в папку C:\cygwin64\FileZilla В ходе инсталяции соглашаемся на все стандартные установки.После установки FileZilla запустится автоматом, но из программы необходимо выйти и запустить её от имени Администратора.При запуске FileZilla спросит имя сервера, оставляем всё как есть.
Далее заходим Edit — Settings и делаем следующие настройки:
listen on those ports 40timeout 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 Скачать их можно на 4pda.Или вытащить из дистрибутива Android SDK.
Копируем их в папку C:\cygwin64\bin
Отключаем интернет полностью, если вы используете ноутбук, то воспользуйтесь режимом полёта.
Подготовка Android-устройства Вам понадобится root.Свежий BusyBox.И включенная отладка по USB.Режим модема по 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 — порт сервера FileZilla192.168.42.79 — адрес сервера FileZilla (у вас свой)mmcblk0p27.raw — копируемый блок памяти (у вас свой)
Открываем второе окно Cygwin.bat и вводим команды:
adb shell su dd if=/dev/block/mmcblk0p27 of=/cache/myfifo Не забудьте исправить mmcblk0p27 на номер своего блока! Смотрим в окно FileZilla и видим, что скачивание mmcblk0p27.raw в папку C:\cygwin64\000 началось, теперь можно закрыть окна cygwin и сделать перерыв на чай.
Конвертируем и восстанавливаем Вернулись? Файл скачался? Отлично. Отключаем телефон, подключаем интернет. Запускаем Cygwin.bat и вводим следующие команды. cd /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. Теперь буду чаще делать бэкап…