Ist es möglich, die Sicherung der Datenpartition auf einem Android-Telefon im Handumdrehen mit nur der Adb-Shell wiederherzustellen?

adb Shell dd if=/dev/block/mmcblk0p7 > backup.bin

funktioniert, um die Android-Telefonpartition auf dem Computer zu sichern, aber wenn ich sie wiederherstellen möchte

cat backup.bin | adb Shell dd of=/dev/block/mmcblk0p7

es hat nicht funktioniert. Die Shell wartet weiterhin auf Eingaben, anstatt wie erwartet sofort in das Ziel zu schreiben.

Stimmt etwas mit dem Befehl nicht?

Ist es möglich, eine Datei mit nur einer Adb-Shell und internen Befehlen im Handumdrehen auf ein Android-Telefon zu übertragen (ohne zuerst eine Sicherungsdatei auf das Telefon zu übertragen)?


Ich habe etwas mehr Problem gefunden, das die Adb-Shell macht

Es scheint, dass der Adb-Shell-Befehl LF in CRLF übersetzt:

Also scheint die Adb-Shell-Katze für den lokalen Computer nicht so gut zu sein. Aber ich möchte immer noch wissen, wie man direkt auf die Remote-Shell catt.

Die Push-to-SD-Card-Lösung ist nicht anwendbar, wenn die Datenpartition auf einem Telefon ohne externe Speicherunterstützung wiederhergestellt wird.

Antworten (2)

Dies wird auf einem Linux funktionieren:

adb shell dd if=/dev/block/mmcblk0p7|sed 's/\r$//' > backup.bin

In MacOS kann es auch zum Laufen gebracht werden, Sie müssen es nur mit Perl machen:

adb shell dd if=/dev/block/mmcblk0p7|perl -pe 's/\x0D\x0A/\x0A/g' > backup.bin

Angenommen, die Datei befindet sich auf Ihrem Computer, Sie möchten sie aber auf Ihrem Gerät wiederherstellen:

adb push /usr/local/backup/backup.bin /sdcard/backup.bin
adb shell dd if=/sdcard/backup.bin of=/dev/block/mmcblk0p7

sollte zum Trick. Erläuterung: Der erste Befehl kopiert die backup.binDatei auf Ihre SDCard, ddliest sie in der zweiten Zeile von dort und schreibt sie dann auf das angegebene Gerät. Vielleicht möchten Sie dies zu einem Einzeiler kombinieren:

adb push /usr/local/backup/backup.bin /sdcard/backup.bin && adb shell dd if=/sdcard/backup.bin of=/dev/block/mmcblk0p7

Das bedeutet: „Datei auf das Gerät kopieren und dderst ausführen, wenn der Kopiervorgang erfolgreich war“.

Um den anderen Teil Ihrer Frage zu beantworten (was mit Ihrem Befehl nicht stimmt): Sie kategorisieren die Datei an den lokalen adbProzess auf Ihrem Computer, nicht an den Remoteprozess ddauf Ihrem Gerät. adbweiß nicht, wie man es "übergibt". Warum funktioniert es also umgekehrt? Denn dort erfassen Sie die auf Ihrem lokalen Rechner angezeigte Ausgabe, die Sie natürlich lokal umleiten können.