TL;DR: Чтоб не столкнуться с внезапным бутлупом и потерей какой-либо информации, лучше не обновлять LineageOS без видимой надобности. А если и обновлять, то через рекавери, а не OTA, и обязательно делая перед этим бэкап всего.

Собственно, вот какая история приключилась со мной. Стояла у меня на Asus ZenFone Max PRO M1 (X00TD) кастомка LineageOS 16 от 04.01.2020.

И вроде бы и критичных багов с ней не было. Ну кроме периодически отваливающегося Wi-Fi (лечится перезагрузкой). Но вдруг решил я, что хватит с меня этой старой версии (ведь две недели прошло!), и нужно обновляться. Да и возможность OTA обновления прямо из настроек меня привлекала.

В итоге, я создал через TWRP бэкап и пошел обновляться через OTA. Телефон успешно перезагрузился в рекавери, чтоб установить обновление. Я аж обрадовался, что всё так автоматически. Но смутила меня лишь одна надпись в консоли TWRP Can't mount /data (или нечто подобное). Затем я вспомнил, что вроде как при переходе в TWRP он всегда у меня требовал пароль для расшифровки data раздела.

«Ну ладно. Видимо настолько всё автоматизировано, что ему и пароль не нужен», — подумал я. После перезагрузки, система Android, как ей и было велено в настройках, вежливо попросила меня ввести PIN-код телефона, чтоб расшифровать раздел и загрузиться. И хотел я было ввести его, да вот незадача, клавиатуры для ввода не было. Беглое гугление мне подсказало, что можно подключить внешнюю клавиатуру через OTG и ввести пароль. Так я и сделал. Но чувствовал я, что на этой проблеме явно ничего не закончится. Так и получилось — меня ждал бутлуп, который через минуту сменялся автоматическим переходом в рекавери.

«Без проблем. Сейчас установлю полноценную актуальную версию LineageOS, и всё заработает», — снова подумал я. Но, казалось бы, TWRP усердно отказывался принимать мой пароль для расшифровки data раздела. Больше всего меня смутило то, что система ведь принимала пароль, и выдавала ошибку, если он был неправильный. Значит раздел не повредился, и что-то, должно быть, с TWRP. Снова гугление, и снова найденное решение — нужно обновить TWRP.

Смысл в том, что новые версии LineageOS включают в себя и гугловские обновления безопасности. Они могут содержать (или всегда содержат?) обновление алгоритмов шифрования. В итоге, установленная версия LineageOS обновила шифрование в разделе, а TWRP об этом обновленным алгоритме не знает. Так или иначе, мне повезло, и на форуме я нашел подходящую январскую версию TWRP для моего смартфона. Как и ожидалось, пароль для расшифровки она успешно приняла.

Далее я последовал своему плану, и просто прошил полную последнюю прошивку LineageOS (для справки, это была версия с названием lineage-16.0-20200128-nightly-X00TD-signed.zip). Далее у меня был выбор — ставить ли повторно Open GApps или нет. Вообще, прошлый раз я ставил версию stock, о чем потом пожалел. Дело в том, что Google Photo, идущий в комплекте, вылетал при запуске. Оказалось, что это из-за того, что приложение это поставилось как системное. Пришлось через Titanium Backup удалять его и ставить повторно из маркета. После чего, оно заработало.

Так или иначе, гугление вновь подсказало мне, что при обновлении LineageOS не обязательно также переустанавливать и гаппсы. Но я всё-таки переустановил их. Установщик определил, что они уже есть, и лишь обновил необходимое.

Далее, я наконец перезагрузился, и... ничего. Снова бутлуп, снова рекавери. Я оказался в тупике. Нашел вот этот пост, где нужно ввести следующую команду в adb shell или в самом TWRP:

dd if=/dev/zero of=/dev/block/bootdevice/by-name/misc bs=256 count=1 conv=notrunc

Но даже с этим возникли проблемы, так как shell ругался мне, что текущая версия dd не поддерживает conv. Окей, значит ставим busybox. Тоже без проблем не обошлось, ибо для его работы в shell надо было дополнительно примонтировать раздел system. Запуск вышеуказанной команды (только перед dd добавив /system/xbin/busybox) прошел успешно, но поменялось ли что-нибудь? Выполнил перезагрузку и... снова бутлуп.

Собственно, дальше я уже начал лютые эксперименты. У меня уже был бэкап с предыдущей версии LineageOS. И сделав бэкап текущей, не работающей версии, я решил восстановить старый. И то, восстановление лишь data и system не помогла, и пришлось еще boot раздел восстанавливать. Система загрузилась, но нужно было ввести PIN-код для загрузки. И что бы вы думали? Он не принимался. И это логично, ведь мой раздел data уже был зашифрован новой версией системы, и старая его не может прочитать (я так понял, но это не факт).

Дальше я вполне закономерно решил снова установить последнюю версию LineageOS поверх как-то работающей старой. Ведь новая версия нормально прочитает зашифрованный раздел, да? И вот, всё было установлено. Я запустил систему, и... бутлуп. Потом я вайпнул data и system, установил последнюю версию, и увидел, наконец-таки, стартовый экран с мастером настройки устройства. Правда как только я дошел до этапа восстановление "из облака", мастер переменился на черный экран, и продолжать было невозможно.

И здесь я совсем огорчился, и понял, что нужно совсем уж с нуля всё ставить. Я вернулся к этой инструкции, отформатировал данные, вайпнул разделы, установил актуальную версию LineageOS, затем magisk, затем Open GApps (на этот раз nano версию), и система успешно запустилась. Мастер дошел до конца, и всё начало импортироваться "из облака".

А потом я понял, что в том бэкапе, что я сделал, не было Internal Storage, а он при форматировании тоже затёрся.

Что по итогу? Ну, теперь у меня таки актуальная версия системы. Правда, это было не обновление, а установка системы с нуля.

Что я понял? То, что на OTA обновления надеяться нельзя. Мало того, что они устанавливают практически сырую nightly версию, так еще и после этого может произойти что угодно, так как зависит и от шифрования, и от текущего рекавери, и от всяких модулей, которые установлены (magisk тот же).

Что я буду делать впредь? Ну, бэкапы нужно создавать вместе с internal storage, чтоб уж точно ничего не потерять. А еще не обновляться, если и так всё работает без проблем. А если и обновляться, то вручную, скачивая прошивку и устанавливая через рекавери.

Спасибо тем, кто дочитал. Вот котик за это:

Картинка по запросу "котик"