如何将安卓分区制作成图像并传输至电脑

12

我正在尝试将手机内置存储卡的分区直接备份(使用dd命令制作映像文件)到我的个人电脑。我使用的操作系统是Linux,手机型号为Nexus 4。


如果您想发布一个解决方案,而该问题并不容易找到,那么非常欢迎,但请在答案中发布,而不是在问题正文中,然后接受答案以指示正确的解决方案给其他人。如果问题本身包含答案主体,则很难理解。谢谢... - DroidDev
我的手机的SD卡分区。我的手机是Nexus 4。自从什么时候Nexus 4有SD卡? - greenapps
这就是系统调用内置记忆卡的方式。我想知道其他答案,因为我并不确定我的答案是否最好。 - hongo
4个回答

12

不要安装TWRP

相反,你需要:

  1. 在计算机上安装android-platform-toolsandroid-sdk

  2. TWRP下载到计算机中。

  3. 按住音量减小和音量增大按钮,开启手机启动引导程序界面。确保您的手机连接到计算机的USB端口。

  4. 通过运行fastboot boot twrp-3.1.0.0.img来启动TWRP。(这种方式无需刷写恢复分区)

  5. 在TWRP中,选择高级(Advanced),然后选择终端(Terminal),它会打开一个shell窗口。输入mount并按[ENTER]键查看分区。你要找的是/data和可能的/sdcard分区挂载点。

  6. 假设您的/data分区映射到/dev/mmcblk0p28。只需在计算机上运行adb pull /dev/block/mmcblk0p28 data.img,它会复制整个分区。由于它复制整个分区,无论其中存储了多少文件,因此预计这个过程需要一段时间。


在第5步,我得到了以下信息:下载'boot.img'成功 [0.332秒],但启动失败(远程:oem unlock is false)。 - jcomeau_ictx
1
@jcomeau_ictx 你执行了 fastboot oem unlock 命令吗? - ngreen
不,我不想清除数据。所以我猜那个方法对我来说没用了。 - jcomeau_ictx
将TWRP下载到您的计算机或手机? - Steve
@Steve 把它下载到你的电脑上。 - ngreen

7

以下是更好的答案:

要求:必须已经安装了adb

  1. Download insecure boot.img to your PC from https://www.androidfilehost.com/?fid=9390169635556426389
  2. Reboot your phone into fastboot mode by powering it off and then pressing and holding volume-down and power buttons.
  3. From your Linux PC in the folder where boot.img is located type:

    $ fastboot boot boot.img
    
  4. To copy the image of the mmcblk0 partition type:

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

你可以使用TWRP恢复代替boot.img。进入TWRP恢复模式,找到/data的设备名称,在TWRP界面中卸载它,然后使用adb pull命令。 - Alec Istomin
使用adb pull命令时出现权限被拒绝的问题。有任何想法是为什么? - Khurshid Alam

6

编辑:Hongo的答案步骤更少。

  1. 安装 TWRP

    在 TWRP 页面上选择您的设备并按照那里的安装说明进行操作。
  2. 进入恢复模式

    您可能需要找到特定于您的设备的键组合以激活启动程序菜单。如果您使用 fastboot 刷入了 TWRP(fastboot flash recovery twrp.img),则可以尝试 fastboot reboot-bootloader,然后选择 恢复模式
  3. 在 TWRP 中挂载分区

    现在您应该在 TWRP 中了。从那里选择 Mount。确保已挂载您的 data 分区。确保已挂载您的 system 分区,因为您将需要一些存储在其中的可执行文件。
  4. 连接 adb

    如果您尚未安装,请安装 adb。通过 USB 数据线将手机连接到计算机。键入 adb devices。如果看到列出的设备,则表示已连接。
  5. 转发端口 adb forward tcp:33333 tcp:33333

    我们需要启用对您的手机的 TCP 访问。此命令侦听计算机的端口 33333(第一个参数)并将所有连接转发到您手机上的端口 33333。您可以选择任何端口。PC 上低于 1024 的端口需要 root 权限。确保您选择的端口尚未被使用。这两个数字不需要匹配。
  6. 找到要备份的分区 adb shell mount

    找到您想要备份的分区并获取设备名称。[编辑:如果您需要备份的分区看起来像 /dev/block/dm-0,则它是逻辑卷(LVM)的一部分,这可能不是正确的备份方式]
  7. 从手机转发原始分区

    • adb shell
    • 尝试 dd if=/dev/block/dm-0 bs=64k | gzip | nc -l -p 33333
      • 此处的 /dev/block/dm-0 是您从以前的挂载命令中找到的设备。
      • 33333 替换为您在手机上选择的端口号
      • 如果找不到任何命令,则可以尝试在其前面加上 /system/bin/toybox/system/bin/busybox
      • 此命令块从指定设备(if=)复制,并使用块大小 64k(bs=64k - 您可以指定任何值,或完全省略此参数,但小的值可能会减慢过程。大于 64k 的值通常不会加速过程),将其转储到 stdout,然后将其压缩到 gzip 中,然后将其管道传输到 netcat,该 netcat 正在侦听(-l)端口 33333(-p 33333)。
  8. 在计算机上转储数据

    • 从新终端执行 nc localhost 33333 | pv -i 0.5 --size 54g > dm-0.raw.gz
      • 33333 替换为您在计算

如果您想要导出所有内容,而不仅仅是一个分区,该怎么办? - user2305193
@user2305193 嗯,你可以这样做,但是接下来你需要找到一种恢复它的方法。你基本上可以反转这些指令来恢复分区。 - Codebling
@user2305193,你可以将上面指令中的 dd 替换为 rsync 命令。这样应该就可以解决问题了。如果在恢复时分区仍以相同方式挂载,则反向 rsync 应该也能正常工作。 - Codebling
TWRP从2018年开始可能支持您的手机的adb,然后只需运行adb pull命令即可 - 请参见下面的另一个答案。 - Alec Istomin
1
@CodeBling adb pull从TWRP可以做到这一点,我向您保证。在TWRP界面中卸载/data并将设备作为常规文件提取。 - Alec Istomin
显示剩余4条评论

3

需求:adb必须已经安装

  1. Download insecure boot.img to your PC from https://www.androidfilehost.com/?fid=9390169635556426389
  2. Reboot your phone into fastboot mode by powering it off and then pressing and holding volume-down and power buttons.
  3. From your Linux PC in the folder where boot.img is located type:

    $ fastboot boot boot.img
    
  4. To make an image of the mmcblk0p23 partition type:

    $ 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): stackoverflow.com/questions/11689511/transferring-binary-data-over-adb-shell-ie-fast-file-transfer-using-tar


如果数据没有被解密,图像将被加密。我唯一得到解密数据的方法是通过TWRP。 - martinszy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接