0 votes

Est-il possible de restaurer une sauvegarde de partition de données sur un téléphone Android à la volée avec juste adb shell ?

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

fonctionne pour sauvegarder la partition du téléphone Android sur l'ordinateur mais quand je veux restaurer en utilisant

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

Cela n'a pas fonctionné. L'interpréteur de commandes continue d'attendre une entrée au lieu d'écrire immédiatement dans la cible comme je l'attendais.

Y a-t-il un problème avec la commande ?

Est-il possible de transférer un fichier vers un téléphone Android avec le shell adb et des commandes internes à la volée (sans avoir à pousser le fichier de sauvegarde vers le téléphone) ?


J'ai trouvé un problème supplémentaire dans le shell adb (le 0x0D supplémentaire). https://stackoverflow.com/questions/11689511/transferring-binary-data-over-adb-shell-ie-fast-file-transfer-using-tar

Il semble que la commande shell adb traduise LF en CRLF :

Donc adb shell cat vers l'ordinateur local ne semble pas très bon. Mais je veux toujours savoir comment faire un chat directement sur le shell distant.

La solution push to sdcard n'est pas applicable lors de la restauration de la partition de données sur un téléphone sans support de stockage externe.

2voto

cybersans Points 181

Cela fonctionnera sur un linux :

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

Sous MacOS, il est également possible de le faire fonctionner, il suffit de le faire avec Perl :

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

1voto

Milner Points 533

Supposons que le fichier se trouve sur votre ordinateur, mais que vous voulez le restaurer sur votre appareil :

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

devrait faire l'affaire. Explication : La première commande copie le fichier backup.bin sur votre SDCard, et dans la deuxième ligne dd le lit à partir de là et l'écrit ensuite sur le périphérique spécifié. Vous pouvez combiner tout cela en une seule ligne :

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

Cela signifie : "Copie le fichier sur le périphérique, et exécute dd seulement lorsque le processus de copie a réussi".

Pour répondre à l'autre partie de votre question (ce qui ne va pas avec votre commande) : Vous envoyez le fichier sur le serveur local adb sur votre ordinateur, et non à l'ordinateur distant dd sur votre appareil. adb ne sait pas comment "passer le relais". Alors pourquoi cela fonctionne-t-il dans l'autre sens ? Parce que là, vous capturez la sortie affichée sur votre ordinateur local, que vous pouvez bien sûr rediriger localement.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X