Android: Jak odratować smartfon po usunięciu partycji /system/

Spis treści

Zawsze mnie zastanawiało jak to jest możliwe, by przez przypadek można było usunąć dane na jeden z kluczowych partycji w smartfonie jaką jest partycja /system/ . Ostatnio wiele osób do mnie pisało z tego typu problemami i zapytaniem "jak odratować w takiej sytuacji telefon". Odpowiedź wydawała mi się prosta: wystarczy wgrać uprzednio zrobiony backup wyczyszczonej partycji via fastboot . Problem w tym, że po usunięciu danych z partycji /system/ , fastboot nie działa. A skąd to wiem? Ano "przez przypadek" usunąłem sobie dane na tej partycji. W sumie to tylko testowałem ficzer w TWRP zwany ADB Sideload, który niby ma za zadanie wgrać ROM z paczki .zip . Coś poszło nie tak i w zasadzie zostałem z pustą partycją /system/ . Przy odpalaniu telefonu w takim stanie, ten w zasadzie jedynie się resetuje co kilka chwil. Może i fastboot nie działa ale można wbić do trybu recovery. Jeśli tylko mamy wgrany TWRP, to jest spora szansa na odratowanie smartfona. W tym artykule w rolach głównych wystąpi Neffos Y5L, który ma SoC od Qualcomm'a, zatem nie damy rady się pobawić SP Flash Tool i całą robotę trzeba będzie odwalić ręcznie.

Wyczyszczona partycja /system/ i tryb recovery

TWRP recovery ma opcję przywracania uprzednio zrobionego backup'u dowolnej przestrzeni flash, którą mamy określoną w pliku fstab . Niemniej jednak, by być w stanie skorzystać z tego wbudowanego w TWRP mechanizmu, backup musi być przeprowadzony również za jego pomocą. Ja mam sporządzoną kopię binarną całego flash'a mojego Neffos'a Y5, z której mogę sobie wydobyć partycję /system/. Ten obraz jednak trzeba wgrać via fastboot , a ten nie działa. Dobrze, że TWRP jest nieco bardziej zaawansowanym trybem recovery niż te stock'owe odpowiedniki. Tutaj możemy porozumiewać się ze smartfonem za pośrednictwem adb , który oferuje nam dostęp root. Wystarczy na naszym linux'ie odpalić pierwszy z brzega terminal i wpisać w nim:

# adb shell

Jeśli ktoś nie wie jak zainstalować narzędzie adb w Debianie i innych podobnych dystrybucjach linux'a, to tutaj znajdują się stosowne informacje.

W tej chwili możemy operować na smartfonie wydając mu polecenia bezpośrednio z komputera. Jest to o wiele wygodniejsze rozwiązanie niż działanie na tym wbudowanym w TWRP terminalu.

Przesyłanie plików na smartfon w trybie recovery

Backup dysku/flash'a zwykle przechowywany jest na innym urządzeniu z wiadomych raczej względów. Jest niemal pewne, że nie mamy pliku backup'u bezpośrednio w telefonie i trzeba go pierw tam przesłać. Możemy to zrobić za pomocą adb lub też via protokół MTP. Ten ostatni raczej nie powinien sprawić problemów. Niżej zaś jest przykładowe polecenie adb :

# adb push /neffos/y5l-orig-system.img /data/media/0/Download/
3946 KB/s (1959579648 bytes in 484.940s)

Plik z obrazem partycji /system/ zostanie wgrany w tym przypadku na flash smartfona, z tym, że na partycję /data/ . Nic nie stoi na przeszkodzie, by wgrać ten plik na kartę SD, bo niekiedy na flash'u urządzenia może nam zwyczajnie zabraknąć miejsca.

Ustalanie urządzenia pod partycję /system/

Musimy teraz ustalić, które urządzenie w katalogu /dev/ odpowiada partycji /system/ . Można to oczywiście odczytać z pliku fstab ale też można podejrzeć dowiązania symboliczne w katalogu /dev/block/bootdevice/by-name/ , przykładowo:

# ls -al /dev/block/bootdevice/by-name/ | grep system
lrwxrwxrwx    1 root     root            21 Jan  7  1970 system -> /dev/block/mmcblk0p21

Wiemy zatem, że /dev/block/mmcblk0p21 to nasze urządzenie, na którym będziemy operować. Pamiętajmy, że ten numerek ma kluczowe znaczenie i pomylenie się przy nim może uwalić nasz telefon całkowicie. Dlatego upewnijmy się parę razy, że wpisujemy poprawne polecenia.

Wgrywanie obrazu partycji /system/ via dd

Mamy obraz partycji i odpowiadające mu urządzenie. Teraz wystarczy przy pomocy dd wgrać ten obraz binarnie w stosowne miejsce. Zanim jednak wgramy sam obraz, odmontujmy partycję /system/ . Można to zrobić w menu Zamontuj w TWRP:

twrp-recovery-system

Lub też przy pomocy poniższego polecenia przez adb :

# umount /system

Niezależnie od sposobu odmontowania, polecenie mount nie powinno zawierać wpisu z partycją /system/ :

# mount | grep system

Teraz możemy przejść do wgrywania obrazu via dd . Robimy to w poniższy sposób:

# dd if=/data/media/0/Download/y5l-orig-system.img of=/dev/block/mmcblk0p21
3827304+0 records in
3827304+0 records out
1959579648 bytes (1.8GB) copied, 361.619535 seconds, 5.2MB/s

I to w zasadzie cała robota. Można w tej chwili uruchomić smartfon ponownie, a ten już powinien nam standardowo załadować Androida. Nie powinniśmy też na nowo konfigurować urządzenia, bo jeśli skasowaliśmy sobie tylko dane na partycji /system/ , to wszelkie zmiany wprowadzane w konfiguracji urządzenia zostają nietknięte.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.