adb shell dd if=/dev/block/mmcblk0p7 > copia de seguridad.bin
funciona para hacer una copia de seguridad de la partición del teléfono Android en la computadora, pero cuando quiero restaurar usando
gato copia de seguridad.bin | adb shell dd of=/dev/block/mmcblk0p7
no funcionó el shell continúa esperando la entrada en lugar de escribir en el destino inmediatamente como esperaba.
¿Hay algo mal con el comando?
¿Es posible enviar un archivo a un teléfono Android con solo adb shell y comandos internos sobre la marcha (sin enviar primero el archivo de copia de seguridad al teléfono)?
Encontré algo más problemático que hace adb shell (el 0x0D adicional) https://stackoverflow.com/questions/11689511/transferring-binary-data-over-adb-shell-ie-fast-file-transfer-using-tar
Parece que el comando adb shell traduce LF a CRLF:
Entonces adb shell cat a la computadora local no parece tan bueno. Pero todavía quiero saber cómo conectar directamente al shell remoto.
La solución push to sdcard no es aplicable mientras se restaura la partición de datos en un teléfono sin soporte de almacenamiento externo.
Esto funcionará en un linux:
adb shell dd if=/dev/block/mmcblk0p7|sed 's/\r$//' > backup.bin
En MacOS también se puede hacer que funcione, solo necesita hacerlo con Perl:
adb shell dd if=/dev/block/mmcblk0p7|perl -pe 's/\x0D\x0A/\x0A/g' > backup.bin
Suponiendo que el archivo se encuentra en su computadora, pero desea restaurarlo en su dispositivo:
adb push /usr/local/backup/backup.bin /sdcard/backup.bin
adb shell dd if=/sdcard/backup.bin of=/dev/block/mmcblk0p7
debe al truco. Explicación: el primer comando copia el backup.bin
archivo en su tarjeta SD, y en la segunda línea dd
lo lee desde allí y luego lo escribe en el dispositivo especificado. Es posible que desee combinar esto con una sola línea:
adb push /usr/local/backup/backup.bin /sdcard/backup.bin && adb shell dd if=/sdcard/backup.bin of=/dev/block/mmcblk0p7
Esto significa: "Copie el archivo en el dispositivo y ejecútelo dd
solo cuando el proceso de copia se haya realizado correctamente".
Para responder a la otra parte de su pregunta (qué tiene de malo su comando): envía el archivo al adb
proceso local en su computadora, no al dd
proceso remoto en su dispositivo. adb
no sabe cómo "entregarlo". Entonces, ¿por qué funciona al revés? Porque allí captura la salida que se muestra en su computadora local, que por supuesto puede redirigir localmente.