Wie verwende ich adb, um mehr als 2 GB zu sichern?

Ich versuche, mein Nexus 7 zu sichern, bevor ich ein neues Factory-Image installiere. (Es gibt ein Problem, das verhindert, dass das OTA-Update erfolgreich ist .) Aber wenn ich laufe

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

Die Sicherung bleibt nach dem Schreiben von 2147483647 Bytes hängen. Diese Zahl ist 2^31 minus 1, und ich erkenne das Problem als fehlende Unterstützung für große Dateien irgendwo. Ich verwende das adb, das mit meiner aktuellen Debian-Linux-Distribution "Jessie" geliefert wird. Das Problem tritt auf, wenn ich versuche, in einer lokalen Datei oder auf einem entfernten, über NFS gemounteten Dateiserver zu sichern, daher vermute ich, dass etwas in der adbToolchain ohne Large File Support kompiliert wurde.

Das Nexus 7 meldet eine Gesamtspeichernutzung von 4,2 GB, daher erwarte ich eine Sicherungsdatei in dieser Größenordnung. Gibt es eine Problemumgehung, die ich verwenden sollte? Gibt es eine Möglichkeit, das Backup in Teile aufzuteilen?

Ich habe das nicht ausprobiert, aber da Sie von NFS sprechen, gehe ich davon aus, dass Sie Linux auf Ihrem Computer ausführen. Die Rohidee verwendet benannte Pipes (auch bekannt als "Fifos", siehe zB mkfifoFragen zu SU ). Grundsätzlich erstellen Sie ein Fifo und geben dieses als "Datei" an adb backup. Parallel dazu führen Sie einen zweiten Prozess aus, der aus diesem Fifo liest, z. B. Erstellen Sie ein Tar-Archiv, das in Blöcke mit maximaler Größe aufgeteilt ist . Wenn Sie dies versuchen, teilen Sie uns bitte mit, wie es geklappt hat.
Ich verwende Linux, wie es in der Frage steht. Ich habe ein Nicht-NFS-Dateisystem mit demselben Problem ausprobiert. Keine Ahnung, ob die benannte Pipe helfen wird; Ich habe festgestellt, dass andere Programme mehr als 2 GB auf dem NFS-Dateisystem verarbeiten können und dass ich Probleme mit meinem eigenen Code und großen Dateien hatte, die durch Neukompilierung behoben wurden.
In diesem Fall wäre es keine Einschränkung des Dateisystems (wie in Ihrer ursprünglichen Frage vorgeschlagen). Danke für die Bearbeitung: Ich unterstütze Ihre Annahme der fehlenden LFS-Unterstützung in der Binärdatei. Eine Aufteilung ist meines Wissens nach nicht möglich. Aber da sich die Verwendung einer Pipe vom Schreiben einer Datei unterscheidet, würde ich sagen, dass es einen Versuch wert ist. Es könnte sich auch herausstellen, dass es überhaupt nicht funktioniert, da Sie normalerweise die Ausgabe / Eingabe umleiten, wenn Sie Pipes verwenden (die dann als "Puffer" fungieren), z . B. writerproc > mypipeund readerproc < mypipe.
Ich habe GNU tar kompiliert, das im Gegensatz zum normalen von Android tarDateien über 2 GB unterstützt. Meine Website ist im Moment nicht verfügbar, aber ich habe hier eine armv7-eine statisch verknüpfte Binärdatei für 4.4 und höher (5.0, 5.1, 6.0 usw.) . Sie können dies irgendwo ablegen, wo Sie chmod, wie /data/local/tmp, verwenden können, und auf diese Weise einen Tarball erstellen und fertig adb push.

Antworten (1)

Es stellt sich heraus, dass dies ein bekanntes Problem ist und es einen Patch gibt .