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

评论

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

#1 楼

由于类似的挫败感,我已经为此目的编写了一些工具: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  


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

要求:


> Linux / OSX / Windows下的Python 3.3+。



需要progressbar软件包(pip install progressbar应该这样做)



adb(Android调试桥)命令行工具
安装了TWRP恢复的已启动Android设备。


拥有根设备和自定义恢复的需求永远不会消失:如果您没有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压缩还是知道另一种修复损坏文件的方法?

–我是_愚蠢
16 Mar 20 '16在20:33

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

–丹
16年3月20日在21:11

另外,如果您可以提供更多详细信息,请在Github存储库中将其添加为“新问题”,因为它使跟踪变得更容易!

–丹
16 Mar 20 '16 at 21:32

我将我的问题添加为新问题,因此我们可能应该在那里继续讨论。

–我是_愚蠢
16-3-20在22:42



#2 楼

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

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

评论


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

– Izzy♦
2013年12月10日21:40



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

– Jiggunjer
16年1月29日在12:05

为什么必须扎根?

–user4951
16 Mar 5 '16 at 17:36

#3 楼

我注意到(如果您已经配置了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可以满足要求。

#4 楼


显示开发人员选项(Settings > Developer> tap build 7 times
启用USB调试(Settings > Developer > USB Debugging

使用恢复以避免操作系统根目录限制

./adb reboot recovery

/>
做拉动

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



评论


我将如何还原此类备份?

–苏马
17年1月23日14:47

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

–user1133275
17年1月23日在18:03

Android将让您轻松访问整个内部存储吗?

– Melab
19年8月21日在1:58