Tuve este problema tratando de empujar una copia de seguridad de mi Samsung Galaxy S2, utilizando ADB con la herramienta de recuperación CWM (clockworkmod). Al empujar a un archivo de dispositivo, ADB simplemente elimina el archivo de dispositivo de bloque y crea un archivo regular en su lugar, y por lo tanto no hay datos en realidad termina en el dispositivo mmcblk0.
Desgraciadamente, la canalización de la salida de un comando en "adb shell" tampoco está implementada, y la función de sockets unix "adb forward" tampoco parece funcionar, por lo que es difícil recuperar la copia de seguridad en el dispositivo.
La solución es canalizar el archivo de imagen a netcat, y utilizar el reenvío de puertos TCP de ADB para dirigir el flujo a su dispositivo. Sin embargo, si tu CWM/busybox no tiene herramientas de red, también tendrás que descargar la versión binaria estática arm-v7 de busybox con todos los applets desde http://www.busybox.net/downloads/binaries/latest/ para poder ejecutar netcat en su dispositivo.
# wget "http://www.busybox.net/downloads/binaries/latest/busybox-armv7l"
# adb push busybox-armv7l /tmp/busybox
# adb forward tcp:6789 tcp:9876
# adb shell
~ # chmod +x /tmp/busybox
~ # /tmp/busybox nc -l -p 9876 > /dev/block/mmcblk0
Entonces, en un nuevo caparazón:
# dd if=your-image-file.img | nc localhost 6789 &
"dd" es mejor que "cat" porque puedes comprobar el progreso de la copia a intervalos (sustituye 5647 por el PID del comando DD):
# kill -USR1 5647
48+0 records in
47+0 records out
49283072 bytes (49 MB) copied, 17.6145 s, 2.8 MB/s
Tenga en cuenta que escribir en mmcblk0 (o el equivalente en su dispositivo Android) borrará incluso las particiones de arranque y recuperación, por lo que es una gran manera de brickear su dispositivo. Para que conste, mi restauración funcionó bien ;-)