Есть ли способ сделать резервную копию Nandroid непосредственно на компьютер, а затем восстановить его непосредственно с компьютера?

22

В моем телефоне недостаточно места для хранения файлов резервных копий, поэтому мне интересно, есть ли способ сделать резервное копирование и восстановление Nandroid с помощью файлов, хранящихся на компьютере.

JatSing
источник
1
Я сомневаюсь, что есть способ сделать это. Попробуйте выполнить резервное копирование на внешнюю SD-карту, а затем перенести на компьютер. Или просто переместите достаточно файлов на свой компьютер, чтобы вы могли создать и восстановить резервную копию на своем телефоне, а затем переместить файлы обратно, когда вы закончите.
VarnerBeast14

Ответы:

14

Я написал несколько инструментов именно для этой цели из-за подобных разочарований: https://github.com/dlenski/tetherback

Эти инструменты написаны на Python и используются adbдля создания резервных копий в стиле nandroid (необработанные образы разделов из dd if=/dev/block/mmcblk0pXX) или резервных копий в стиле TWRP (смесь необработанных образов разделов и тарболлов для ext4разделов).

Они пытаются проверить правильность расположения разделов и показать ход резервного копирования:

$ ./twrp_backup.py
Device reports TWRP kernel (3.4.0-bricked-hammerhead-twrp-g7b77eb4).
Reading partition map for mmcblk0 (29 partitions)...
  partition map: 100% Time: 0:00:03                                                                                                                                                                                
Saving TWRP backup images in twrp-backup-2016-03-17--18-53-12/ ...
Saving partition boot (mmcblk0p19), 22 MiB uncompressed...
  boot.emmc.win: 100% Time: 0:00:05   3.10 MB/s                                                                                                                                                                    
Saving tarball of mmcblk0p25 (mounted at /system), 1024 MiB uncompressed...
  system.ext4.win:   2% ETA:  0:06:29   2.69 MB/s  

Это работа в процессе - обратная связь очень приветствуется!

Требования:

  • Python 3.3+ под Linux / OSX / Windows.
    • progressbarнужен пакет ( pip install progressbarдолжен это сделать)
  • adb (Android Debug Bridge) инструменты командной строки
  • Устройство Android с рутом и установленным TWRP recovery .
    • Требования к рутированному устройству и пользовательскому восстановлению никогда не исчезнут : если у вас нет доступа с правами root, у вас нет средств для копирования всего содержимого памяти вашего устройства, просто так.

РЕДАКТИРОВАТЬ: Похоже, большая часть трафика на https://github.com/dlenski/tetherback приходит из этой темы. Первые проблемы с повреждением данных, описанные в комментариях ниже, все были решены; tetherback теперь включает очень сильные проверки против коррупции.

Дэн
источник
Прежде всего, спасибо за создание программы. Кажется, что он работает хорошо, за исключением случаев, когда я использую nandroid.py, большие файлы, такие как system.img.gz и userdata.img.gz, перестают работать при распаковке gzip. «Crc терпит неудачу», и он создает файл img размером примерно в 1/5 размера файла img.gz. Тем не менее, bootloader.img.gz распаковывает нормально. В любом случае, вы можете отключить gzipping или знаете другой способ исправить поврежденный файл?
I'm_With_Stupid
1
@ I'm_With_Stupid, вы можете отключить gzip, изменив L46 , но я сомневаюсь, что это на самом деле проблема. Вы используете Linux или Windows? К сожалению, под Windows adb искажает символы CRLF , что означает, что невозможно передать двоичное изображение через него, используя технику, которую я использую. Я могу написать обходной путь для этого, если это будет необходимо.
Дан
Кроме того, если вы можете предоставить более подробную информацию, пожалуйста, добавьте ее как новый выпуск в репозиторий Github, потому что это облегчает отслеживать!
Дан
1
Я добавил свои проблемы в качестве новых вопросов, поэтому мы, вероятно, должны продолжить наш разговор там .
I'm_With_Stupid
8

В ветке, посвященной разработчикам XDA, описывается, как сделать резервную копию nandroid непосредственно на вашем компьютере без использования sdcard . Конечно, это работает только на рутованных устройствах. Дополнительные требования включают в себя либо Posix OS, такую ​​как Linux / MacOS (пользователи Windows могут эмулировать это с Cygwin), и ADB (то есть либо весь SDK, либо, по крайней мере, минимальную установку ). Более того, busyboxдолжен быть доступен на устройстве, и отладка USB активирована.

В статье шаг за шагом описываются команды, необходимые для создания резервной копии Nandroid. По сути, он использует dd через именованный канал для создания копии разделов вашего устройства на уровне блоков - что в основном представляет собой .

Иззи
источник
2
Спасибо за указатель, @Hudayfah! Но хотя посты, содержащие только ссылки, теоретически могут ответить на этот вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки. В противном случае ответ становится бесполезным, если ссылка умирает. Я соответствующим образом обновил ваш пост, чтобы показать, как это может выглядеть, чтобы помочь вам в отношении будущих постов (которые, как мы надеемся, сделаем :) Также приветствуем вас в нашем сообществе!
Иззи
Кроме того, как вы будете восстанавливать эту резервную копию, если у вас есть доступ только к fastboot или, возможно, к adb в процессе восстановления?
jiggunjer
почему это должно быть укоренено?
user4951
2

Я заметил, что (если у вас уже настроен ADB, ваш телефон рутирован, и вы работаете в системе Linux или аналогичной), можно вывести содержимое раздела с помощью одной строки:

adb pull /dev/block/mmcblk0

Это то же самое, что описано в потоке XDA для получения побитового содержимого флэш-памяти, кроме как без использования netcat и pipe (что может понадобиться или не зависеть от обстоятельств, я полагаю). Очевидно, что ни один раздел на флэш-памяти не должен быть подключен во время копирования данных (т. Е. Делать это из восстановления, пока adb mountне указаны подключенные разделы), иначе вы рискуете создать непоследовательную резервную копию в местах, где Android решила записать данные на время резервного копирования.

Обратите внимание, что для восстановления просто:

pv mmcblk0 | adb shell dd of=/dev/block/mmcblk0

не будет работать, так как adb shellне поддерживает трубопровод. Но если вы как-то можете сделать это dd of=/dev/block/mmcblk0на самом устройстве, я полагаю, оно должно восстановить вашу резервную копию. Не верьте мне в этом, хотя, это могло бы сгладить ваш телефон. Я еще не проверял это; до сих пор мне нужно было восстановить только один раздел, и это ddбыло хорошо для этого.

liori
источник
2
  1. Показать параметры разработчика ( Settings > Developer> tap build 7 times)
  2. Включить отладку по USB ( Settings > Developer > USB Debugging)
  3. использовать восстановление, чтобы избежать корневых ограничений ОС

    ./adb reboot recovery

  4. тянуть

    ./adb pull /dev/block/mmcblk0 mmcblk0.img

user1133275
источник
Как мне восстановить такую ​​резервную копию?
Сума
@Suma с помощью adb push (или смонтируйте img и скопируйте
нужные
Android позволит вам легко получить доступ ко всему внутреннему хранилищу?
Мелаб