解决iTunes更新iOS时在验证阶段报未知错误6的问题

今天拿到了一台无法启动的iPhone 5s (GSM, A1533),iOS 8.x。机主自述设备内部存储耗尽,然后出现严重卡顿,最后自动关机。再次尝试启动时,白苹果然后屏幕熄灭,没有观测到Springboard开始加载的迹象。由于机内有未备份数据,机主要求不要重置。拿到这台机子以后,鉴于没有什么可以做的,我准备试一试更新到最新版iOS。

进Recovery然后从iTunes更新固件,一切看起来都没问题(早期阶段进度条不动是正常现象,等等就好了),然后iTunes显示正在验证固件,在进度条走完之前弹了这么一个框:

The iPhone "Iphone" cloud not be updated. An unknown error occurred (6).

重试一次,仍然如此。这时候iPhone停留在刷机进度条快结束的地方,强制重启会自动进入Recovery。

看起来似乎没有挽救的希望了?然而并不是。这时候其实iOS已经被正确写入系统分区,只是没有通过iTunes的刷机后完整性验证。而开机时自动进入Recovery并不代表iOS出现问题(如果真的有问题的话,应该死机或者自动关机)。经过对iOS的启动步骤的研究,自动进入Recovery其实是NVRAM中auto-boot 字段被设为false 导致的——iTunes在开始刷机之前先将这个字段设为false 然后刷机(这样如果中途中断,设备重启后就会自动进入Recovery),在刷机步骤完成后,最后一次重启之前再将这一字段设为true 。

那么既然iOS是完整的,我们怎么启动它呢?这时候就需要iBoot的USB调试功能了。首先在电脑上安装libirecovery:(以下命令适用于OS X 10.11,其余系统未做测试)

brew install libtool autoconf automake
cd ~/Downloads
git clone https://github.com/Chronic-Dev/libirecovery.git
cd libirecovery
./autogen.sh
make
sudo make install

然后,把Recovery模式下的设备通过USB连接到电脑。接下来有两种方法:

方法一:如果你想直接解决问题,运行:

irecovery -n

方法二:或者如果你想手动完成操作,进入iBoot交互式shell:

irecovery -s

如果连接正确,你会看到类似输出:

=======================================
::
:: iBoot for nxx, Copyright 2007-2015, Apple Inc.
::
::	BUILD_TAG: iBoot-2817.20.26
::
::	BUILD_STYLE: RELEASE
::
::	USB_SERIAL_NUMBER: ...
::
=======================================

// ...

Entering recovery mode, starting command prompt

这时候我们就可以修改NVRAM了:

setenv auto-boot true
saveenv
reboot

如果一切顺利的话,设备将会自动重启,然后正常开机。

参考

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据