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