我的Redmi K30 Pro买来两年多了,一直没更新系统,还是出厂搭载的MIUI 12,刷了第三方recovery解锁root。关闭了系统自动更新,也关了开发者选项里的自动更新,以为这样就高枕无忧了。

结果就在今天晚上,手机突然毫无征兆的偷偷更新系统,等我反应过来时,系统就卡在fastboot界面无法启动了。

重启进入twrp(也就是第三方recovery),发现data分区大小为0,无法解锁挂载,我的数据不会全部GG了吧。

网上搜索并没有找到与我同病相怜的倒霉蛋,救砖的文章倒是有很多,但是会丢失数据,这是我不能接受的。于是准备自己动手尝试。

找到小米刷机工具MiFlash(神奇的是官方出的工具官网却没有下载链接),运行后发现界面上有个“保留用户数据”的选项,这不就是我要的结果嘛,不管有没有用先试试再说。

下载K30 Pro的线刷包,为了保险起见我下载了与更新失败之前相同的版本12.0.9,解压之后在MiFlash中导入,手机插上数据线,进入fastboot模式,开刷!

咦,怎么失败了?MiFlash中报错update sparsecrclist failed。搜索发现,需要在线刷包文件夹里找到flash_all_except_storage.bat,把下面两行注释掉才行,我的是在文件的第14、15行,前面加上两个冒号,类似如下。

::fastboot %* flash crclist %~dp0images\crclist.txt || @echo "Flash crclist error" && exit /B 1
::fastboot %* flash sparsecrclist %~dp0images\sparsecrclist.txt || @echo "Flash sparsecrclist error" && exit /B 1

继续焦急地等待进度条慢慢移动,几分钟之后怎么又报错了Not catch checkpoint,原来是因为刷机时没有锁定BL锁,触发了这个错误显示,忽略即可。

这时手机已经开始自动重启,没有卡在fastboot了。顺利进入了系统,看到是我原来的锁屏壁纸。谢天谢地所有数据都在,救砖成功!

重新刷入twrp,重新root刷入Magisk面具,终于还原到了原有的状态,所有模块运行正常。

为了再次避免自动更新的情况发生,在根目录创建一个名为downloaded_rom的空文件,这样系统就不会偷偷下载新版系统自动更新了。