My phone doesn't have enough space to store backup files so I wonder if there is a way to do Nandroid backup and restore with files stored on pc.
I have written some tools for exactly this purpose, due to similar frustrations: https://github.com/dlenski/tetherback
These tools are written in Python and use
adb to create either nandroid-style backups (raw partition images from
dd if=/dev/block/mmcblk0pXX) or TWRP-style backups (mixture of raw partition images and tarballs for
They attempt to probe the correct partition layout, and show the progress of the backup:
$ ./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
This is a work in progress—feedback is very welcome!
- Python 3.3+ under Linux/OSX/Windows.
progressbarpackage is needed (
pip install progressbarshould do it)
adb(Android Debug Bridge) command-line tools
- Rooted Android device with TWRP recovery installed.
- The requirement for a rooted device and a custom recovery is never going to go away: if you don't have root access, then you have no means to copy the entire contents of your device's memory, simple as that.
EDIT: Looks like most of the traffic to https://github.com/dlenski/tetherback comes from this thread. The early issues with data corruption described in the comments below have all been resolved; tetherback now includes very strong checks against corruption.
A thread on XDA developers describes How to make a nandroid backup directly to your computer without using sdcard. Of course it only works on rooted devices. Further requirements include either a Posix OS like Linux/MacOS (Windows users can emulate this with Cygwin), and ADB (so either the entire SDK, or at least a minimal install). Moreover,
busybox must be available on the device, and USB debugging activated.
The article describes step by step the commands needed to create a Nandroid backup. Basically, it's using dd via a named pipe to create a block-level copy of your device's partitions – what a nandroid backup basically is.
I noticed that (if you already have ADB configured, your phone is rooted and you're working on a Linux system or similar) it is possible to dump the partition content by a single one-liner:
adb pull /dev/block/mmcblk0
This is the same as what is described in the XDA thread for getting the bit-for-bit contents of flash memory, except without the dance with netcat and pipes (which might be needed or not depending on circumstances, I guess). Obviously no partition on the flash memory should be mounted while copying the data (ie. do it from a recovery while
adb mount doesn't list any partitions mounted), otherwise you'll risk an inconsistent backup in places which Android decided to write data at the time of backup.
Note that for restore a simple:
pv mmcblk0 | adb shell dd of=/dev/block/mmcblk0
will not work, as
adb shell does not support piping. But if you somehow can do a
dd of=/dev/block/mmcblk0 on the device itself, I suppose it should restore your backup. Don't trust me on this though, it might as well brick your phone. I haven't tested it yet; so far I only needed to recover a single partition and
dd was fine for that.
- Show Developer Options (
Settings > Developer> tap build 7 times)
- Enable USB Debugging (
Settings > Developer > USB Debugging)
use recovery to avoid OS root limitations
./adb reboot recovery
do the pull
./adb pull /dev/block/mmcblk0 mmcblk0.img