Есть ли способ получить образ диска пользовательского пространства для хранения на современных устройствах Android?

Я хочу знать, возможно ли получить «образ диска» для хранения на устройствах Android, когда они не используют внешнее хранилище, такое как SD-карты.

Меня больше всего интересует, потому что мои дети сбросили заводские настройки моего Kindle Fire HDX, и я надеялся, что смогу получить образ диска (используя что-то вроде dd в Linux), а затем попытаться восстановить некоторые пользовательские данные, такие как фотографии и видео (используя что-то вроде PhotoRec, http://www.cgsecurity.org/wiki/PhotoRec ). Я проделывал это много раз с SD-картами и жесткими дисками, просто подключая запоминающее устройство к рабочему столу с Debian и выполняя что-то вроде:

# dd if=/dev/sdb1 of=image.iso

Затем вы можете использовать PhotoRec и/или TestDisk, в зависимости от того, что вы хотите, чтобы получить что-то полезное из файла изображения.

Кажется, что даже некоторые из моих очень старых Android-устройств позволяют монтировать запоминающее устройство таким образом (без извлечения SD-карты из телефона) и следовать этому процессу. К сожалению, похоже, что многие новые устройства, у которых нет съемного хранилища (например, мой Kindle Fire HDX и мой Nexus 5), позволяют вам взаимодействовать с компьютером только с использованием протокола передачи мультимедиа (MTP) и протокола передачи изображений (PTP).

Могу ли я использовать эти протоколы для получения побитовой копии хранилища в устройстве? Есть ли способ добавить возможности старых устройств хранения данных в новые телефоны?

Ответы (3)

Проведя еще несколько исследований, я думаю, что нашел здесь частичное решение:

http://forum.xda-developers.com/showthread.php?t=2450045

  • Во-первых, вам нужно настроить ADB на вашем компьютере. В линуксе это довольно просто. Что-то вроде запуска # apt-get install android-tools-adbили загрузки и извлечения каталога.

  • Найдите свои разделы. Запустите что-то вроде: adb shell cat /proc/partitionsВ ссылке есть другие варианты, как найти и идентифицировать все разделы.

  • Скопируйте данные. Должен быть доступен инструмент dd. Вы можете запустить что-то вродеdd if=/dev/block/mmcblk0p9 of=/sdcard/image.img

К сожалению, у меня есть две проблемы с этим. Во-первых, для разрешений на разделы устройств может потребоваться root-доступ. Во-вторых, Kindle Fire HDX и многие другие современные устройства, не имеющие USB Mass Storage, также не используют SD-карты. Таким образом, нет простого места для записи изображения, которое вы хотите, которое еще не используется для чего-то еще на устройстве.

Я пытаюсь найти способ монтировать сетевые устройства или передавать данные через USB между устройством и компьютером (насколько я могу судить, adb push и adb pull не сделают то, что нужно). Я обновлю это, если найду хорошее решение. В противном случае я задам некоторые другие вопросы об этом.

Изменить: на этой странице есть отличное описание, аналогичное тому, что у меня есть выше: http://www.df.lth.se/~jokke/androidfilerecovery/

Как отмечено ниже, root необходим, но обычно есть много способов легко его получить. К сожалению, я работал с Fire HDX 8.9. На полпути к моему копированию данных в файл изображения эта штука автоматически загружает обновление до 4.1.1. Следующее, что я знаю, root-доступ исчезает, и я не думаю, что для этого еще есть эксплойт. Я, вероятно, потерял все восстанавливаемые данные после того, как обновление было записано во внутреннюю память. В последнее время я так разочаровался в Amazon...

Вы правы: невозможно получить ddдамп без root-доступа. Что касается копирования, то, насколько мне известно, есть способы «подключить» его через USB к другому концу: я где-то видел статью, описывающую это, но не помню, где это было :( В основном: перенаправление вывода ddвроде adb shell "dd ..." > /localdir/file.dump, где localdirнаходится на вашем компьютере.
Спасибо. Это похоже на идеальное решение. Я обновил свой ответ. Об этом процессе есть отличная страница: df.lth.se/~jokke/androidfilerecovery (до сих пор не могу поверить, сколько времени мне потребовалось, чтобы найти ее).
Да! Именно это я и имел в виду. Хорошо, что я мог бы хотя бы указать правильный указатель :) // Кстати: поскольку предпочтительнее включить в свой ответ самое необходимое (ссылка может однажды умереть), не могли бы вы сделать это с вашим ответом? Или вы бы предпочли, чтобы я ответил на это отдельно?
Было бы неплохо указать точную процедуру из ссылки, а не просто ссылку на нее. Ссылки иногда умирают. Также обновление идет на системный раздел. Нет причин, по которым он также перезаписал бы раздел данных.

Джошуа в значительной степени ответил на вопрос. Тем не менее, Иззи дал дополнительную информацию, чтобы решить странные/редкие варианты одной и той же проблемы.

Я хотел бы внести свой вклад (мой первый пост за более чем 10 лет) для тех, кто наткнется на тот же сценарий, что и я. В любом случае, через 24 часа, с настойчивостью и решимостью, следующая команда прольет некоторый свет (при условии, что у вас уже есть промежуточные/продвинутые навыки).

Кстати, я не буду объяснять это, так как сама команда довольно очевидна.

adb shell "dd if=/dev/block/mmcblk0p37 of=/dev/pts/0" > part37-img-dump.dd

Это инструменты, которые я использовал для выполнения работы.

C:\HTCOneRoot\
 |--\adb.exe (version 1.0.31 21/05/2013, latest was buggy)
 |--\fastboot.exe (version fc2a139a55f5-android 24/04/2016)
 |--\AdbWinApi.dll
 |--\AdbWinUSBApi.dll
 |--\part37-img-dump.dd (output from the 'adb' command)

Примечание:

  1. dd будет выводить статистику на стандартный вывод после завершения (связано с BusyBox)
  2. найти инструмент для обрезки нежелательных смещений в EOF (не обязательно)
  3. смонтируйте образ, используя предпочтительное программное обеспечение для восстановления данных или что-то еще
  4. /dev/pts/0 должен работать сразу, но если вы запускаете несколько команд оболочки adb с нескольких консолей/терминалов, будьте осторожны с номером ссылки указателя dev, так как он будет другим. Используя следующую команду, вы можете просто выяснить, какой из них: pts:0, pts:1, ...
    adb shell "ps -l"
    
В моем случае я использовал adb shell su -c "dd if=/dev/block/mmcblk0" | pv > backup.dd... если нет pv... apt-get install pvили удалить строку

Эта строка: adb pull /Dev/block/device-by-name/userdata data.imgдолжна работать. Я не проверял это, но должно быть близко. Это приведет к извлечению всего образа, который вы можете прошить или, возможно, нажать позже в процессе восстановления. Это работает, только если вы рутированы. Я не буду работать, когда тебя нет. Ошибка разрешений. Я предполагаю, что если вы выполнили быструю загрузку с TWRP и не получили root-права, если у вас работает расшифровка, вы можете скопировать образ таким образом. Я избегаю рутирования прямо сейчас. Кажется, более стабильно с Android 10