有没有办法直接将Nandroid备份到PC,然后再直接从PC还原它?


22

我的手机没有足够的空间来存储备份文件,所以我想知道是否有一种方法可以对PC上存储的文件进行Nandroid备份和还原。


1
我怀疑有没有办法做到这一点。您应该尝试备份到外部SD卡,然后再传输到计算机。或者只是将足够的文件移至计算机,以便您可以在手机上创建和还原备份,然后在完成后移回文件。
VarnerBeast13年

Answers:


14

我已经写了一些工具,正是为此,因同样的沮丧:https://github.com/dlenski/tetherback

这些工具是用Python编写的,可adb用于创建nandroid风格的备份(来自的原始分区图像dd if=/dev/block/mmcblk0pXX)或TWRP风格的备份(原始分区图像和ext4分区的tarball的混合物)。

他们尝试探查正确的分区布局,并显示备份进度:

$ ./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  

这是一项正在进行的工作,非常欢迎反馈!

要求:

  • Linux / OSX / Windows下的Python 3.3+。
    • progressbar需要包装(pip install progressbar应该这样做)
  • adb (Android调试桥)命令行工具
  • 根已安装TWRP恢复的 Android设备。
    • 拥有root权限的设备和自定义恢复的需求永远不会消失:如果您没有root权限,那么就没有办法复制设备内存的全部内容,就这么简单。

编辑:看来,到https://github.com/dlenski/tetherback的大部分流量都来自此线程。以下评论中描述的早期数据损坏问题已全部解决;现在,tetherback包括非常强大的反腐败检查。


首先感谢您制作程序。除非我每次使用nandroid.py较大的文件(例如system.img.gz和userdata.img.gz)在解压缩gzip时均失败,否则似乎一切正常。“ crc失败”,它会生成一个img文件,约为img.gz文件大小的1/5。但是,bootloader.img.gz可以很好地解压缩。无论如何,他们是您可以禁用gzip压缩还是知道另一种修复损坏文件的方法?
I'm_With_Stupid

1
@ I'm_With_Stupid,您可以gzip通过修改L46禁用该功能,但我怀疑这实际上是问题所在。您正在运行Linux还是Windows?不幸的是,在Windows下,adb会处理CRLF字符,这意味着使用我正在使用的技术无法通过二进制字符传输二进制图像。如果需要,我可以为此编写解决方法。

另外,如果您可以提供更多详细信息,请将其作为新问题添加到Github存储库中,因为这样可以更轻松地进行跟踪!

1
我将问题添加为新问题,因此我们应该在那里继续讨论。
I'm_With_Stupid

8

XDA开发人员的一个线程描述了如何不使用sdcard将nandroid备份直接备份到您的计算机。当然,它仅适用于有根设备。进一步的要求包括Posix OS(例如Linux / MacOS)(Windows用户可以使用Cygwin进行仿真)和ADB(因此,整个SDK或至少是最小安装量)。此外,busybox该设备必须可用并且USB调试已激活。

本文逐步介绍了创建Nandroid备份所需的命令。基本上,它是通过命名管道使用dd来创建设备分区的块级副本– 基本上是


2
感谢指针,@ Hudayfah!但是,尽管仅链接的帖子理论上可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。否则,万一链接消失,答案将变得毫无用处。我已相应地更新了您的帖子,以显示其外观,以帮助您处理以后的帖子(希望您能发表:)热烈欢迎包括我们的社区!
伊兹

另外,假设您只能访问fastboot或在恢复中可能访问adb,那么如何恢复该备份?
jiggunjer '16

为什么必须扎根?
user4951

2

我注意到(如果您已经配置了ADB,您的电话已经植根并且您正在Linux系统或类似系统上工作),可以通过一个单行转储分区内容:

adb pull /dev/block/mmcblk0

这与XDA线程中获取闪存的逐位内容中所描述的内容相同,除了没有与netcat和管道共舞(我猜这可能取决于环境,可能不需要)。显然,复制数据时不应在闪存上安装任何分区(例如,从恢复中进行操作,而adb mount不会列出已安装的任何分区),否则,在Android决定在该位置写入数据的地方,备份风险会不一致备份时间。

注意,对于还原很简单:

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

无法使用,因为adb shell不支持管道。但是,如果您能以某种方式dd of=/dev/block/mmcblk0在设备本身上进行备份,我想它应该可以还原您的备份。不过,请不要相信我,它可能会使您的手机变砖。我还没有测试过 到目前为止,我只需要恢复一个分区dd就可以了。


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


我将如何还原此类备份?
Suma

@Suma与adb推送(或挂载img并复制感兴趣的文件)
user1133275

Android将让您轻松访问整个内部存储吗?
Melab
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.