¿Cómo usar adb para hacer una copia de seguridad de más de 2 GB?

Estoy intentando hacer una copia de seguridad de mi Nexus 7 antes de instalar una nueva imagen de fábrica. (Hay un problema que impide que la actualización de OTA se realice correctamente ). Pero cuando ejecuto

adb backup -f android-nosystem-backup.ab -apk -shared -all -nosystem

la copia de seguridad se atasca después de escribir 2147483647 bytes. Este número es 2 ^ 31 menos 1, y reconozco el problema como una falta de soporte de archivos grandes en alguna parte. Estoy ejecutando el adbque viene con mi distribución actual de Debian Linux "Jessie". El problema ocurre si trato de hacer una copia de seguridad en un archivo local o en un servidor de archivos montado en NFS remoto, por lo que sospecho que algo en la cadena de adbherramientas se ha compilado sin la compatibilidad con archivos grandes.

El Nexus 7 informa un almacenamiento total en uso de 4,2 GB, por lo que espero un archivo de copia de seguridad de ese orden de tamaño. ¿Hay alguna solución que debería usar? ¿Hay alguna manera de dividir la copia de seguridad en partes?

No probé esto, pero mientras habla de NFS, asumo que está ejecutando Linux en su computadora. La idea principal es hacer uso de canalizaciones con nombre (también conocidas como "fifos", ver, por ejemplo, mkfifopreguntas en SU ). Básicamente, crea un fifo y lo especifica como "archivo" en adb backup. Paralelamente, ejecuta un segundo proceso leyendo ese fifo, por ejemplo, crea un archivo tar dividido en bloques de un tamaño máximo . Si intenta esto, háganos saber cómo funcionó.
Estoy ejecutando Linux como dice en la pregunta. Probé un sistema de archivos que no es NFS con el mismo problema. No sé si la tubería con nombre ayudará; Me di cuenta de que otros programas pueden hacer más de 2 GB en el sistema de archivos NFS, y que he tenido problemas con mi propio código y archivos grandes, que se resolvieron recompilando.
En cuyo caso, no sería una restricción del sistema de archivos (como lo sugiere su pregunta original). Gracias por la edición: secundo su suposición de que falta la compatibilidad con LFS en el binario. Que yo sepa, no hay opción para dividir. Pero como usar una tubería es diferente de escribir un archivo, diría que vale la pena intentarlo. También podría resultar que no funcione en absoluto, ya que generalmente redirige la salida/entrada cuando usa tuberías (que luego actúan como un "búfer"), por ejemplo, writerproc > mypipey readerproc < mypipe.
Compilé GNU tar, que a diferencia del normal de Android tar, admite archivos de más de 2 GB. Mi sitio web está inactivo en este momento, pero tengo un armv7, un binario enlazado estáticamente para 4.4 y superior (5.0, 5.1, 6.0, etc.) aquí . Puede poner esto en algún lugar donde pueda usar chmod, como /data/local/tmp, y hacer un tarball de esa manera y adb pushterminar.

Respuestas (1)