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:

Francesco Turco
źródło

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.

Izzy
źródło
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.

anarcat
źródło
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

arifogel
źródło