如何将android分区的图像制作到您的PC
Posted
技术标签:
【中文标题】如何将android分区的图像制作到您的PC【英文标题】:how to make an image of android partition to your pc 【发布时间】:2015-01-14 01:55:04 【问题描述】:我正在尝试将我的手机内置存储卡分区的直接 dd 映像备份到我的 PC。我使用的是 Linux,我的手机是 Nexus 4。
【问题讨论】:
如果您想发布一个不容易找到的问题的解决方案,非常欢迎您,但是,请将其发布在答案而不是问题正文中,然后接受答案向他人指出正确的解决方案。如果问题本身包含答案主体,则不容易理解。谢谢...partitions of my sdcard of my phone
。 my phone is a Nexus 4
。 Nexus 4 什么时候有 sd 卡了?
系统是这样调用内置存储卡的。我也想知道其他答案,因为我不相信我的答案是最好的。
【参考方案1】:
不要安装 TWRP
改为:
将android-platform-tools
或android-sdk
安装到您的计算机上。
下载TWRP到你的电脑。
按住音量减小和音量增大按钮并打开手机以启动引导加载程序屏幕。确保您的手机已插入计算机的 USB 端口。
通过运行fastboot boot twrp-3.1.0.0.img
启动 TWRP。 (无需以这种方式刷新您的恢复分区。)
在 TWRP 中,选择 Advanced,然后选择 Terminal,这将打开一个 shell。键入 mount
并按 [ENTER] 以查看分区。您正在寻找 /data
和可能的 /sdcard
坐骑。
假设您的/data
分区映射到/dev/mmcblk0p28
。只需在您的计算机上运行adb pull /dev/block/mmcblk0p28 data.img
,它就会复制分区。预计此过程需要一段时间,因为它正在复制整个分区,无论其中存储了多少文件。
【讨论】:
在第 5 步我得到:Downloading 'boot.img' OK [0.332s] booting FAILED (remote: oem unlock is false) @jcomeau_ictx 你跑了吗fastboot oem unlock
?
不,我不想擦除数据。所以我想我对这种方法不走运。
下载 TWRP 到电脑还是手机?
@Steve 将其下载到您的计算机上。【参考方案2】:
这里有另一个更好的答案:
要求:adb 必须已经安装
-
从https://www.androidfilehost.com/?fid=9390169635556426389 下载不安全的 boot.img 到您的 PC
关机重启手机进入快速启动模式,然后按住音量下键和电源键。
从您的 Linux PC 中 boot.img 所在的文件夹中键入:
$ fastboot boot boot.img
复制mmcblk0分区类型的镜像:
$ adb pull /dev/block/mmcblk0 mmcblk0.img
【讨论】:
您可以使用 TWRP 恢复来代替 boot.img。启动到 TWRP 恢复,确定 /data 的设备名称,在 TWRP 界面中卸载它并使用 adb pull【参考方案3】:编辑:Hongo's answer 的步骤更少。
安装TWRP。
在 TWRP 页面上选择您的设备,然后按照那里的安装说明进行操作。启动进入恢复
您可能必须找到特定于您的设备的组合键才能对引导加载程序菜单做出反应。如果你使用fastboot(fastboot flash recovery twrp.img
)刷了TWRP,那么你可以试试fastboot reboot-bootloader
,然后选择Recovery
。
在 TWRP 中挂载分区
您现在应该在 TWRP 中。从那里,选择安装。确保您的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
) 上侦听 (-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
的文件中
【讨论】:
如果要导出所有内容,而不仅仅是一个分区怎么办? @user2305193 好吧,你可以这样做,但是你需要找到一种方法来恢复它。您基本上可以颠倒这些指令来恢复分区。 @user2305193 您基本上可以用rsync
命令从上面的说明中替换dd if=/dev/block/dm-0 bs=64k | gzip | nc -l -p 33333
中的dd
。那可能会奏效。如果在您尝试恢复分区时分区仍然以相同的方式挂载,那么rsync
ing 其他方式应该可以工作。
这个想法是使用一个命令按顺序获取所有分区,就像在单独的文件中一样,这样如果您不确定分区(或者您'已经覆盖了你感兴趣的那个)
@CodeBling adb pull from TWRP 可以做到这一点,我向你保证。在 twrp 界面中卸载 /data 并将设备作为常规文件拉出【参考方案4】:
要求:adb 必须已经安装
-
从https://www.androidfilehost.com/?fid=9390169635556426389 下载不安全的 boot.img 到您的 PC
关机重启手机进入快速启动模式,然后按住音量下键和电源键。
在您的 Linux PC 中,在 boot.img 所在的文件夹中键入:
$ fastboot boot boot.img
制作 mmcblk0p23 分区类型的映像:
$ adb shell 'stty raw && dd if=/dev/block/mmcblk0p23' > ~/userdata.img
有用的链接:
如何识别感兴趣的分区: http://forum.xda-developers.com/showthread.php?t=2450045
如果未使用 stty raw,所有 LF 将被转换为 CRLF: android.stackexchange.com/questions/69434/is-it-possible-to-cat-a-file-to-an-android-phone-and-dd-to-dev-xxx-on-the-fly-w
如何root手机并使用不安全的boot.img: www.addictivetips.com/android/root-google-nexus-4-install-clockworkmod-recovery/
通过 ADB shell 传输二进制数据(如何使用 stty raw): ***.com/questions/11689511/transferring-binary-data-over-adb-shell-ie-fast-file-transfer-using-tar
【讨论】:
以上是关于如何将android分区的图像制作到您的PC的主要内容,如果未能解决你的问题,请参考以下文章