我正在尝试进行备份(我的手机内置存储卡分区的直接dd图像到我的PC。我正在使用Linux,我的手机是Nexus 4。
这是另一个更好的答案
要求:必须已安装adb
$ fastboot boot boot.img
$ adb pull /dev/block/mmcblk0 mmcblk0.img
要求:必须已安装adb
$ fastboot boot boot.img
$ adb shell 'stty raw && dd if=/dev/block/mmcblk0p23' > ~/userdata.img
有用的链接:
android-platform-tools
或android-sdk
安装到您的计算机上。fastboot boot twrp-3.1.0.0.img
启动TWRP。 (无需以这种方式刷新恢复分区。)mount
并按[ENTER]查看分区。你正在寻找/data
和可能的/sdcard
坐骑。/data
分区映射到/dev/mmcblk0p28
。只需在您的计算机上运行adb pull /dev/block/mmcblk0p28 data.img
,它就会复制分区。期望此过程需要一段时间,因为它复制整个分区,无论其中存储了多少文件。编辑:Hongo's answer步骤较少。
fastboot flash recovery twrp.img
)刷新TWRP,那么您可以尝试fastboot reboot-bootloader
,然后选择Recovery
。data
分区已安装。确保你的system
分区已经安装,因为你需要一些驻留在那里的可执行文件。adb
Install adb
,如果你还没有。通过USB线将手机连接到计算机。输入adb devices
。如果您看到列出的设备,则表示您已连接。adb forward tcp:33333 tcp:33333
我们需要启用对您手机的TCP访问。此命令侦听计算机的端口33333(第一个参数),并将所有连接转发到手机上的端口33333。你可以选择任何端口。 PC上低于1024的端口需要root访问权限。确保您选择的端口尚未使用。这两个数字不需要匹配。adb shell mount
的分区
找到要备份的分区并获取设备名称。 [编辑:如果您需要备份的分区看起来像/dev/block/dm-0
,它是逻辑卷(LVM)的一部分,这可能不是备份它的正确方法]adb shell
试试dd if=/dev/block/dm-0 bs=64k | gzip | nc -l -p 33333
这个/dev/block/dm-0
与您之前在mount命令中找到的设备有关。
将33333
替换为您在上面选择的电话端口
如果找不到任何命令,您可以尝试使用/system/bin/toybox
或/system/bin/busybox
作为前缀。
此命令块从指定的设备(if=
)复制,并使用64k的块大小(bs=64k
- 您可以指定任何,或完全省略此参数,但小值可能会减慢该过程。大于64k的值通常不会加快进程速度),将其转储到stdout
,然后通过管道传输到gzip压缩它,然后用管道传输到netcat,它正在端口33333(-l
)上监听(-p 33333
)。nc localhost 33333 | pv -i 0.5 --size 54g > dm-0.raw.gz
将33333
替换为您在上面选择的计算机端口
用任何文件名替换dm-0.raw.gz
将54g
替换为您的分区大小(见下文)
此命令连接到本地主机(您的计算机)上的端口33333
并转储到stdout
,管道到pv
,它每半秒更新传输进度(-i 0.5
),估计大小为54 gigs(--size 54g
- 你可以省略这个参数但是传输进度必须准确),然后进入名为dm-0.raw.gz
的文件