Se recomienda citar para dejar más claro qué comandos se ejecutarán en el cliente y qué tuberías/redirecciones se designan para ejecutarse en el lado del host. Básicamente este comando debería funcionar:
adb exec-out "tar -c /sdcard" > sdcard_backup.tar
Mira el archivo corrupto de 4 kb. Verás la cabecera del tar y el contenido del archivo. hay una cadena inicial antes del comienzo del archivo tar:
eliminar la "/" inicial de los nombres de los miembros
$ hexdump -C sdcard_backup.tar
00000000 72 65 6d 6f 76 69 6e 67 20 6c 65 61 64 69 6e 67 |removing leading|
00000010 20 27 2f 27 20 66 72 6f 6d 20 6d 65 6d 62 65 72 | '/' from member|
00000020 20 6e 61 6d 65 73 0a 73 64 63 61 72 64 00 00 00 | names.sdcard...|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000080 00 00 00 00 00 00 00 00 00 00 00 30 30 30 30 37 |...........00007|
00000090 37 37 00 30 30 30 30 30 30 30 00 30 30 30 30 30 |77.0000000.00000|
000000a0 30 30 00 30 30 30 30 30 30 30 30 30 30 30 00 30 |00.00000000000.0|
000000b0 30 30 30 30 30 30 30 30 30 30 00 30 31 34 37 35 |0000000000.01475|
000000c0 37 00 20 32 2f 73 74 6f 72 61 67 65 2f 73 65 6c |7. 2/storage/sel|
000000d0 66 2f 70 72 69 6d 61 72 79 00 00 00 00 00 00 00 |f/primary.......|
problemática exec-out
redirigirá stdin y stderr. al menos evitará los mensajes de error, o incluso mejor atrapará stderr
completamente
adb exec-out "tar -c sdcard" > sdcard_backup.tar
adb exec-out "tar -c sdcard 2> /dev/null" > sdcard_backup.tar
Obsérvese la omisión del encabezamiento /
Dir root en la línea de comandos. Esta vez se produce un archivo tar de 4 kb
$ hexdump -C sdcard_backup.tar
00000000 73 64 63 61 72 64 00 00 00 00 00 00 00 00 00 00 |sdcard..........|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000060 00 00 00 00 30 30 30 30 37 37 37 00 30 30 30 30 |....0000777.0000|
00000070 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 |000.0000000.0000|
00000080 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 30 |0000000.00000000|
00000090 30 30 30 00 30 31 34 37 35 37 00 20 32 2f 73 74 |000.014757. 2/st|
000000a0 6f 72 61 67 65 2f 73 65 6c 66 2f 70 72 69 6d 61 |orage/self/prima|
000000b0 72 79 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |ry..............|
parece un archivo de alquitrán saludable. deja tar
hace su trabajo. Revela que el archivo es un enlace simbólico
$ tar -vtf sdcard_backup.tar
lrwxrwxrwx root/root 0 1970-01-01 01:00 sdcard -> /storage/self/primary
En modo de arranque /sdcard
es sólo un enlace simbólico a /storage/emulated/0
mientras que en el modo de recuperación /sdcard
es un bind-mount de /data/media/0
tar no atraviesa los enlaces simbólicos por defecto, por lo que el comando funciona en modo de recuperación. para el modo de arranque utilice tar -h
o proporcionar la ruta del directorio en lugar de su enlace simbólico.
Además, en Windows cmd.exe
puede añadir más \r
retorno de carro para cada \n
Por lo tanto, evite la transmisión de datos planos y utilice un algoritmo de compresión que no produzca ningún salto de línea. gzip
adb exec-out "tar -ch sdcard | gzip" > sdcard_backup.tar.gz
adb exec-out "tar -c storage/emulated/0 | gzip" > sdcard_backup.tar.gz
Este archivo tarball puede extraerse de tar
ya que la mayoría de las implementaciones de tar detectarán e invocarán automáticamente gzip
automáticamente.
$ tar -vtf sdcard_backup.tar.gz
drwxrwx--x root/sdcard_rw 0 2018-01-01 01:00 storage/emulated/0/
drwxrwx--x root/sdcard_rw 0 2018-01-01 01:00 storage/emulated/0/Samsung/
drwxrwx--x root/sdcard_rw 0 2018-01-01 01:00 storage/emulated/0/Samsung/Music/
Para Windows podemos usar 7-Zip como programa alternativo de desempaquetado, que manejará la mayoría de los algoritmos de compresión.
1 votos
Mantenga una pequeña distro de Linux instalada en el PC como sistema operativo secundario (incluso en un USB). Haz la vida más fácil. //
tar
es la mejor manera de manejar los problemas de nombres de archivos entre plataformas. Debería funcionar. Prueba conadb shell tar c sdcard > sdcard_backup.tar
. Además, a diferencia deexec-out
esto no fusionará STDERR con SRDOUT.1 votos
Intente adebar o adb-sync
0 votos
@alecxs ¿hay alguna forma de saber cuánto ha avanzado este comando? Me parece que el objetivo
tar
el tamaño del archivo no se actualiza0 votos
@lucidbrot tal vez a través de logcat pero no lo sé. considero que adb está roto, no puedo por el bien sacar archivos de samsung usb-c. los archivos pequeños están bien, pero después de ~ 1 minuto adb se bloquea. tengo la sensación de que está relacionado con la velocidad del usb
0 votos
@alecxs He dejado que el
exec-out
ejecutado durante la noche y se las arregló para agarrar nada por cerca de dos horas, entonces el alquitrán fue de repente 8,3 GB, y ahora el resto de la noche no parece que nada nuevo se ha añadido ... todavía no cree que está hecho sin embargo. Lo he abortado ahora, pero el tar ni siquiera es un archivo tar válido.0 votos
@alecxs realmente podría estar relacionado con el usb C sin embargo. Yo también he tenido problemas con bastboot - sólo funcionaba sobre usb 2.0. Conseguí esa idea de [aquí](( forum.xda-developers.com/t/ )
0 votos
@alecxs Ya veo. En ese caso lo haré en linux. ¡¡¡Gracias!!! (Tenía activado el wakelock - estaba en el recovery en ese momento)
0 votos
Si tienes (git) bash o cygwin también puedes usar winadb-sync (que he creado hoy) continuará con los errores y obtendrá los archivos que faltan en la segunda ejecución