Android2.3.2(rooted)→2.3.3 への手動Update & root化失敗による起動不能からの復旧メモ・・・

はじめに

こんにちは、ちきん(mokemokechicken)です。
NexusS の2.3.3のOTAが始まりましたが、root化しているので、ちゃんと適用されるかわからないので、手動でやってみました。
2.3.3へのUpdateは無事上手くいったのですが、再度のRoot化で見事にハマりました。
私のようなAndroid初心者の方も多いと思われ、こういう失敗の共有もそれなりに有意義だと思ったので、その顛末を公開しておきたいと思います。
メモベースなので、乱文乱筆すみません。

UpdateとRoot化

NexusS 2.3.2(rooted) -> 2.3.3 への手動Update

Update前の環境

NexsusS&Android2.3.2で

  • oem unlock
  • root化(boot.superboot.img という 2.3.2専用のimgを入れた。そしてこれが後々仇になる・・・)
  • ClockworkMod(=CWM) 3.0.0.5 導入済み

という状態でした。

手順1

http://forum.xda-developers.com/showthread.php?t=967953
にあるように、Link for GRH78C 用のZIPファイルをDLしてくる。
それを update.zip という名前で Android の /sdcard/ に置く。

  • 電源を消す(Power長押し)
  • Volumeの+を押しながら、電源を長押ししてから、recovery mode に入る(Volumeの-を2回押して、電源キー)
  • apply update from sdcard, を選び、 update.zip を適用する

上手くいけばこれでOKです。

手順2: 手順1が上手くいかない(Status 7 エラー)場合

手順1を実行しても、

assert failed: apply_patch_check("MTD:boot:2949120:   ...etc
E:Error in /sdcard/update.zip
(Status 7)

というメッセージが出て止まる場合があります。
これは、現在のInstallされているbootイメージがTargetと異なるということと思われます。
私も boot.superboot.img が bootのimgなので、正規版とは違うのでこうなるようです。
これは今回は
http://forum.xda-developers.com/showpost.php?p=11620726&postcount=478
にある手順で解決できました(boot.img を 正規版に書き戻してからupdate.zipを適用する)。

Root化再び

Root化が解かれているので、再度行います。
おそらく、この時点のイメージを保存しておかないと、またStatus7を次のUpdateでくらいそうなので、
CWMでバックアップを取っておきます。
と思ったら、Root化されていないので、CWM動かない。。

うーん、じゃあ、まあいいや。また、 boot.superboot.img でも入れたらいいのかなぁ、と思って、

install-superboot-windows.bat

という以前Root化に使ったBATを実行してみる。
Installは成功(内部で、fastboot flash boot boot.superboot.img; fastboot reboot しているだけ)

Rebootが始まる



起動しない。。。。

あー、そっか。全然Version違うからダメなのか、、と実は途中から思っていたが、
やってしまった。でも後悔はしていない。

文鎮になりつつあるAndroidの復旧開始

ここから、冷や汗をかきながら復旧を試みる。
なんか、昔適当にLinuxを弄っていたころを思い出すなぁ・・・まあ、今も適当にいじるだけだけどさ!
一応、adb shell とか fastboot とかはつながるので、一安心。

世間で公開されているimgはCWM対応のものばかりで、(google先生が教えてくれるのは)、
CWMが無いとなかなか操作が辛い。UpdateによってかCWMもいずこかに行っているので苦戦する・・・

boot.superboot.img も中身を観たかったが、 unyaffs が broken image とか言って仕事してくれない。どうも微妙に形式が異なるのかなぁ?
(後で弊社CTOから聞いた話だと、boot, recovery はちょっと形式が異なるらしいです。system 等はいけるらしいです。そこまで気がつかなかったなぁ・・)

2-3時間経過する。。。

おかげでいくつかわかったことがある。

  • イメージ(img)をflashする(installする)のは、意外と気軽にできる。bootloaderが起動しなくなるということはなさそうだ。bootloaderが起動するなら、USB経由でfastbootコマンドも使えるので、最終的にはなんとかなるだろうと思う。
  • 適当に落ちている .img を flash しようとしても、FAILED (remote: Write Fail) とか言われて失敗する。大抵CWMのバックアップから抜き出しているので独自の形式のものなのかもしれない。うまくいくimgはうまくいく。謎。。
  • 実際にAndroidにimgをInstallするには、
    fastboot flash (partition) (.img)
    例:
    fastboot flash boot boot.img
    fastboot flash recovery recovery.img
    

    を使い、手元(PC)にあるimgでOSを起動するには、

    fastboot boot (.img)
    

    を使う。この場合、実際にはimgは書き込まれないから適当にやっても安心である。

  • また、Bootは2つのモードがあり、 boot, recovery である。それぞれは、それぞれのpartitionにInstallされているimgから起動される。
    既出だが、NexusSでは Volume+と電源で起動すると、bootloaderモードになって、どちらのimgで起動するか選べる、ということだったのだ。今理解した。

で、「NEXUSS GRI40 stock」とかでググルと、既にCWMでバックアップしてrootedなimgを公開している人がいるのを発見する。DLする。

現時点の状態は「GRI40(=2.3.3) だけど bootだけはGRH78C(=2.3.2)」という状態なので、boot.img を書き戻せばいいはずである(願望)。

GRI40を展開して、boot.img を取り出し、

fastboot flash boot boot.img

とかする。ダメである。(FAILED (remote: Write Fail)) 。
じゃあ、

fastboot boot boot.img

は、というとOKである。

数時間ぶりに、NexusSが起動してくれた。ちょっと安心。やっと前に進み始めたかな。。

ROMManagerから改めてCWMをInstallする。Root化されているのですんなりOK。

で、せっかくDLしたので GRI40-2.3.3-rooted をCWMからInstallする。

なんとか通常起動でも 2.3.3 になったが、アプリとか全部消えてしまった。
そりゃそうか。でも、だいたいわかってきたのでもう一度今日をやり直してみよう。

今日の復習

まず、Updateを再実行

まず、GRI40-rootedでRomManagerとCWMをInstallする。
と思ったが、アカウントの設定とかAPNとか全部消えてて超めんどい。

とにかくCWMが起動すればいいんだが、と思っていたらSDCARDにそれっぽいの発見。

adb pull /sdcard/clockworkmod/download/mirror1.kanged.net/recoveries/recovery-clockwork-3.0.0.5-crespo.img .

んじゃあ、recovery領域にInstallしてみよう。

adb reboot bootloader
fastboot flash recovery recovery-clockwork-3.0.0.5-crespo.img

エラー出なかった。よしよし。リブート。

fastboot reboot
adb reboot recovery

あれ、、リカバリーモードがまたおかしいや(アンドロイド君が困ってる。デフォルトのが起動する。)、、失敗。。
じゃあ、インスタントな起動でいけるかな?

fastboot boot recovery-clockwork-3.0.0.5-crespo.img

でCWM起動。上手くいった。

ようやくCWMを使ってBackupしていた今日のUpdate前(2.3.2)に戻す。restore 無事成功!
今日の、手順1、手順2を再度実行する。とりあえず、状況確認のために通常起動。
AngryBirdsのデータもOK! (これで娘に怒られなくて済む、とホッとしたのは秘密)
マーケットにもアクセスOK!

再度!懲りずに! rootに挑戦

今度は大人しめにKazzzさんの方法でいくことにする。
参考: http://d.hatena.ne.jp/Kazzz/20110110/p1

再び recovery mode に。。と思ったらまたこける。この辺の機微がよくわからない。(編集後記: あーrecoveryが書き変わっているなら当たり前かな?)
また、fastboot から CWMのimgを直接起動してもいいけど、
もう一度 ROMManagerで CWMをInstallしてみる。

と思ったら、今度はRoot化されていないから駄目だったよ。。。
やはり、

adb reboot bootloader
fastboot boot recovery-clockwork-3.0.0.5-crespo.img

でいくことにする。これは成功。もうこれがあればいいや、的な気分にもなってくる。

あとは、Kazzzさんの手順にならう。
su-2.3.6.1-ef-signed に含まれているファイルを使って、以下のようにする。

* CWM: mount /system

adb push su /system/bin/
adb push SuperUser.apk /system/app/
adb shell chmod 6775 /system/bin/su

* CWM: umount /system
* CWM: reboot

普通っぽくちゃんと起動!

ROMManager で もう一度 CWM をInstallしてみる。
成功!

もう一度 Recover Modeを試す。今度はちゃんと起動する。
よし終わり!

さいごに

Updateは計画的に行いましょう(^^;
まあ、でも時間があればなんとかはなるので色々やってみるのも楽しいですね。
もし、同様な感じで困っていて、もう少し本記事の内容や手順について聞きたい方がいれば、気軽にmokemokechicken@twitter までご連絡下さい(^^。



Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 16271409 bytes) in /home/yumeco/www/prod/wp-includes/wp-db.php on line 1171