Czy istnieje sposób na wykonanie kopii zapasowej Nandroid bezpośrednio na PC, a następnie przywrócenie go również bezpośrednio z komputera?

22

Mój telefon nie ma wystarczającej ilości miejsca do przechowywania plików kopii zapasowych, więc zastanawiam się, czy istnieje sposób na wykonanie kopii zapasowej i przywracanie Nandroid za pomocą plików przechowywanych na komputerze.

JatSing
źródło
1
Wątpię, żeby można to zrobić. Powinieneś spróbować wykonać kopię zapasową na zewnętrznej karcie SD, a następnie przenieść ją do komputera. Lub po prostu przenieś wystarczającą liczbę plików na komputer, aby móc utworzyć i przywrócić kopię zapasową w telefonie, a następnie przenieść pliki z powrotem po zakończeniu.
VarnerBeast14

Odpowiedzi:

14

Z powodu podobnych frustracji napisałem kilka narzędzi do tego właśnie celu: https://github.com/dlenski/tetherback

Narzędzia te są napisane w języku Python i służą adbdo tworzenia kopii zapasowych w stylu nandroid (surowe obrazy partycji dd if=/dev/block/mmcblk0pXX) lub TWRP (mieszanka surowych obrazów partycji i archiwów tar dla ext4partycji).

Próbują zbadać poprawny układ partycji i pokazać postęp tworzenia kopii zapasowej:

$ ./twrp_backup.py
Device reports TWRP kernel (3.4.0-bricked-hammerhead-twrp-g7b77eb4).
Reading partition map for mmcblk0 (29 partitions)...
  partition map: 100% Time: 0:00:03                                                                                                                                                                                
Saving TWRP backup images in twrp-backup-2016-03-17--18-53-12/ ...
Saving partition boot (mmcblk0p19), 22 MiB uncompressed...
  boot.emmc.win: 100% Time: 0:00:05   3.10 MB/s                                                                                                                                                                    
Saving tarball of mmcblk0p25 (mounted at /system), 1024 MiB uncompressed...
  system.ext4.win:   2% ETA:  0:06:29   2.69 MB/s  

To praca w toku - opinie są mile widziane!

Wymagania:

  • Python 3.3+ pod Linux / OSX / Windows.
    • progressbarpakiet jest potrzebny ( pip install progressbarpowinien to zrobić)
  • adb Narzędzia wiersza polecenia (Android Debug Bridge)
  • Zrootowane urządzenie z Androidem z zainstalowanym odzyskiwaniem TWRP .
    • Wymagania dotyczące zrootowanego urządzenia i niestandardowego odzyskiwania nigdy nie znikną : jeśli nie masz dostępu do roota, nie masz możliwości skopiowania całej zawartości pamięci urządzenia, tak proste.

EDYCJA: Wygląda na to, że większość ruchu do https://github.com/dlenski/tetherback pochodzi z tego wątku. Wczesne problemy z uszkodzeniem danych opisane w poniższych komentarzach zostały rozwiązane; tetherback obejmuje teraz bardzo silne kontrole przeciwko korupcji.

Dan
źródło
Po pierwsze dziękuję za zrobienie programu. Wygląda na to, że działa dobrze, z wyjątkiem przypadków, gdy używam nandroid.py, gdy większe pliki, takie jak system.img.gz i userdata.img.gz, zawodzą podczas dekompresji gzip. „CRC kończy się niepowodzeniem” i tworzy plik img o rozmiarze mniej więcej 1/5 wielkości pliku img.gz. Jednak bootloader.img.gz dekompresuje się dobrze. Czy mimo to można wyłączyć gzipping, czy znasz inny sposób naprawienia uszkodzonego pliku?
I'm_With_Stupid,
1
@ I'm_With_Stupid, możesz wyłączyć gzip, modyfikując L46 , ale wątpię, że to w rzeczywistości problem. Czy korzystasz z systemu Linux lub Windows? Niestety, pod Windows adb zmienia znaki CRLF , co oznacza, że ​​nie można przesłać przez niego obrazu binarnego przy użyciu techniki, której używam. W razie potrzeby mogę napisać obejście tego problemu.
Dan
Ponadto, jeśli możesz podać więcej szczegółów, dodaj go jako nowy problem w repozytorium Github, ponieważ ułatwia to śledzenie!
Dan
1
Dodałem moje problemy jak nowe kwestie powinniśmy więc prawdopodobnie kontynuować naszą rozmowę tam .
I'm_With_Stupid,
8

Wątek na temat twórców XDA opisuje, jak wykonać kopię zapasową nandroid bezpośrednio na komputerze bez użycia karty SD . Oczywiście działa tylko na zrootowanych urządzeniach. Dalsze wymagania obejmują system operacyjny Posix, taki jak Linux / MacOS (użytkownicy systemu Windows mogą to emulować za pomocą Cygwin), i ADB (czyli albo cały SDK, albo przynajmniej minimalna instalacja ). Co więcej, busyboxmusi być dostępny na urządzeniu i aktywowane debugowanie USB .

W artykule opisano krok po kroku polecenia potrzebne do utworzenia kopii zapasowej Nandroid. Zasadniczo używa dd za pośrednictwem nazwanego potoku do tworzenia kopii blokowych partycji urządzenia - czym w zasadzie jest .

Izzy
źródło
2
Dzięki za wskaźnik, @Hudayfah! Ale chociaż posty zawierające tylko łącze mogą teoretycznie odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. W przeciwnym razie odpowiedź stanie się bezużyteczna w przypadku śmierci łącza. Zaktualizowałem odpowiednio Twój post, aby pokazać, jak to może wyglądać, aby pomóc Ci w przyszłych postach (które, mam nadzieję, zrobisz :) :) Witamy serdecznie w naszej społeczności!
Izzy
W jaki sposób zabrałbyś się do przywracania tej kopii zapasowej, zakładając, że masz dostęp tylko do fastboot, a może adb w trakcie odzyskiwania?
jiggunjer
dlaczego musi być zakorzeniony?
user4951
2

Zauważyłem, że (jeśli masz już skonfigurowany ADB, Twój telefon jest zrootowany i pracujesz na systemie Linux lub podobnym), możliwe jest zrzucenie zawartości partycji za pomocą jednego linijki:

adb pull /dev/block/mmcblk0

Jest to to samo, co opisano w wątku XDA do pobierania zawartości pamięci flash „bit po bicie”, z wyjątkiem tańca bez netcata i potoków (które, jak sądzę, mogą być potrzebne lub nie zależą od okoliczności). Oczywiście podczas kopiowania danych nie należy montować żadnej partycji w pamięci flash (tzn. Zrobić to z odzyskiwania, podczas gdy adb mountnie wymieniono żadnych zamontowanych partycji), w przeciwnym razie ryzykujesz niespójną kopię zapasową w miejscach, w których Android zdecydował się zapisać dane na czas tworzenia kopii zapasowej.

Pamiętaj, że w celu przywrócenia prostego:

pv mmcblk0 | adb shell dd of=/dev/block/mmcblk0

nie będzie działać, ponieważ adb shellnie obsługuje instalacji rurowej. Ale jeśli w jakiś sposób możesz zrobić to dd of=/dev/block/mmcblk0na samym urządzeniu, przypuszczam, że powinno ono przywrócić kopię zapasową. Ale nie ufaj mi w tym, może równie dobrze zepsuć twój telefon. Jeszcze tego nie testowałem; do tej pory potrzebowałem tylko odzyskać jedną partycję i ddbyło to w porządku.

liori
źródło
2
  1. Pokaż opcje programisty ( Settings > Developer> tap build 7 times)
  2. Włącz debugowanie USB ( Settings > Developer > USB Debugging)
  3. użyj odzyskiwania, aby uniknąć ograniczeń systemu operacyjnego

    ./adb reboot recovery

  4. zrób to

    ./adb pull /dev/block/mmcblk0 mmcblk0.img

użytkownik1133275
źródło
Jak przywrócić taką kopię zapasową?
Suma
@Suma z adb push (lub zamontuj plik img i skopiuj interesujące pliki)
user1133275
Android pozwoli ci łatwo uzyskać dostęp do całej pamięci wewnętrznej?
Melab