Wyodrębnij kopie zapasowe TWRP wykonane za pomocą adb


10

Mam smartfon Samsung Galaxy S2 GT-I9100 z LineageOS i TWRP. Co tydzień tworzę kopię zapasową za pomocą następującego polecenia:

adb backup -f twrp-20170322.ab --twrp boot data system

Opcjonalnie mogę również użyć tej --compressopcji.

Czy istnieje sposób na wyodrębnienie twrp-20170322.abpliku kopii zapasowej za pomocą narzędzi wiersza polecenia stardard GNU / Linux? W razie potrzeby rozważę także zainstalowanie dodatkowego oprogramowania, ale musi ono być bezpłatne (jak na wolności).

Spinki do mankietów:

Odpowiedzi:


1

Pod warunkiem, że nie chroniłeś go hasłem:

dd if=$1 bs=24 skip=1 | openssl zlib -d >${1%%.ab}.tar
  • ddjest „Dysk Powielacz” (znany również jako „niszczyciel dysku” w przypadku, gdy przełącznik mylić jej parametry ans ifi of;)
  • bs=23 radzi użyć bloku o wielkości 24 bajtów, który musimy…
  • skip=1 pomiń 1 blok 24 bajtów („Nagłówek kopii zapasowej”)
  • dane wyjściowe są przekazywane openssldo procesu w celu przetworzenia i rozpakowania
  • … A wynik jest przekierowywany do tarballa

Stamtąd powinieneś znać swoją drogę: po prostu „usuń” (wyodrębnij) to, czego chcesz.

Dlaczego to wykorzystuje $1? Cóż, skopiowałem ten wiersz ab2tar, który jest dołączony do mojego małego narzędzia Adebar, którym również możesz być zainteresowany: tworzy ładną dokumentację urządzenia, kopie zapasowe skryptów i więcej, wszystko za pośrednictwem ADB przy użyciu tylko Bash 😇 Więc umieść tę linię w małym mały skrypt powłoki i nazwij to:

ab2tar twrp-20170322.ab

Następnie znajdź twrp-20170322.tarjako wynik. Oczywiście wymaga opensslto instalacji na komputerze z systemem Linux.


Otrzymuję następujący komunikat o błędzie: 140376894071512: błąd: 29065064: lib (41): BIO_ZLIB_READ: błąd napompowania zlib: c_zlib.c: 548: błąd zlib: błąd danych
— Francesco Turco

Nigdy tego nie widziałem. Czy to możliwe, że TWRP używa innej metody kompresji niż standardowy ADB (nie mogłem znaleźć szczegółów na ten temat)? Lub, jak nie określiłeś --compresspodczas tworzenia kopii zapasowej, tworzy nieskompresowane kopie zapasowe? W tym drugim przypadku spróbuj pominąć zlibparametr (lub zrób to na odwrót i określ --compresspodczas tworzenia kopii zapasowej;).
— Izzy

Próbowałem z: dd if = twrp-20170320.ab bs = 24 skip = 1> twrp-20170320.tar (bez wstawiania openssl). Ale kiedy próbuję wyświetlić zawartość archiwum tar za pomocą tar -tf twrp-20170320.tar, otrzymuję: tar: To nie wygląda jak archiwum tar; tar: przejście do następnego nagłówka; tar: Wyjście ze statusem niepowodzenia z powodu poprzednich błędów
— Francesco Turco

Jest powód, dla którego nie używa się tej --compressopcji adb: kompresuje się znacznie mniej wydajnie niż xz. Wolę oszczędzać jak najwięcej miejsca. Ale to nie ma związku z moim początkowym problemem.
— Francesco Turco

To, co opisałem powyżej, działa dobrze w przypadku „normalnych” kopii zapasowych ADB (używam tego często w przypadku tych, i tam też nie używam --compress). Z twojego oświadczenia ( adb backup …) przyjąłem ten sam format. Jeśli używasz tylko innej kompresji, musisz to rozważyć. openssljest potrzebne do odszyfrowania kopii zapasowej - bez tego nie otrzymasz ważnego .tar. Na podstawie twoich ostatnich komentarzy zakładam, że powinieneś zastąpić zlibodpowiednią częścią dla xz. Poza tym nie mam pomysłów, przepraszam.
— Izzy

1

Odkryłem, że .abpliki generowane przez TWRP różnią się od zwykłych adb backupplików, więc przesunięcie różni się od zwykłych .abplików. Byłem w stanie sprawdzić i wyodrębnić pliki za pomocą (na przykład w celu sprawdzenia) następującego polecenia:

dd if=backup.ab bs=512 skip=1 | tar ft -

Najwyraźniej nagłówek może być dłuższy, ale powinien być wyrównany do granic 512-bajtowych, więc po prostu zwiększ skip=parametr, jeśli początkowo go nie znajdzie.

Zauważ, że format pliku jest zdefiniowany w twadbstream.h , jeśli chcesz zagłębić się w to.


0

Problem z naiwnym podejściem opartym na dd polega na tym, że w pliku tak często występują metadane. Powoduje to uszkodzenie plików o dowolnej znacznej długości.

Napisałem narzędzie do wyodrębniania wykorzystujące twadbstream.h (dzięki @anarcat), którego użyłem do skutecznego odzyskiwania dużych (~ 10 GB) kopii zapasowych TWRP ADB dla wielu systemów plików. twrpabx

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.