2014年7月18日金曜日

Android: Nexus 5 は記憶を取り戻さなかった

Android: Nexus 5 の故障」の続き.

思い出してごーらんー(T_T)
ここまでの顛末
  • Nexus 5 が突然再起動.初期設定を要求してきた.
  • 内蔵フラッシュメモリを認識できていないようだ.お,俺のデータが‥
  • root 化無しでは打つ手なし.
  • サポートに連絡して,RMA対応に.
本記事の内容
  • 非破壊的 root 化を試みるも失敗 (towelroot)
  • 破壊的 root 化を試みるも失敗 (bootloader unlock)
写真多数ですが,写真固有の情報はあまりありません.ただ悲しみがより具現化されるだけ‥.
では,お聞き下さい(;_;)

前の記事の通り,Nexus 5 が正常に動作しなくなってしまった.

そこで,ついに,root 化による修復を試みることにした.

故障については,Google のサポートとやり取りして,基本的には RMA (新品と交換)となった.その後,故障機返送の前にさらに相談に乗っていただき,その結果,手元の故障機についてこちらで root 化を含むデータ復旧を(勝手に)試みることにした.保証条件等は事例によって違うかもしれないので,本ケースでどういう条件になったかはここでは述べないが,柔軟にご対応いただけた.各位各事例について個別にご確認いただきたい.サポートセンターには親切に対応して頂き,大変感謝しております.

RMA 申し込み後,速攻でやってきた交換機(=二代目).アイルランドから翌々日には届くという早さに驚愕.

1. 保存的(非破壊的) root 化を目指す編


さて,一般的な nexus 5 の root 化の方法では,まずブートローダーのアンロックというステップを踏む.しかし,このステップを行うと,ユーザーデータも含めて初期化されてしまう.つまり,救済すべきデータが消されてしまう.そこで,データを残しつつ root 化する方法を探した

見つかったのが,towelroot という root 化ツールだ.nexus でこのツールの apk パッケージ tr.apk をインストールし,'make it ra1n' ボタンを押せば,それだけで root が取得できるはず.これで助かってくれ!と思いながら作業開始.

まずは towelroot を入手する.towelroot のホームページからλボタン(ページに大きな字でλと表示されている)を押して tr.apk ファイルをダウンロードすればいいだけなのだが,nexus 上の chrome でダウンロードしようとすると,'no SDcard' と言われてダウンロードできない.そこで,pc 上で tr.apk をダウンロードしておく.

次に,pc と nexus を usb ケーブルでつなぎ,adb を使って tr.apk をインストールする.これには,pc で
> adb install tr.apk
を実行すればよい.事前に pc から adb が使えるようにしておく必要がある.参考になるサイトは多数あるので各位調べられたし.

ところが,この手順は最初うまくいかなかった.次のように容量不足エラーが出るのだ.

C:\work>adb install tr.apk
3516 KB/s (111652 bytes in 0.031s)
        pkg: /data/local/tmp/tr.apk
Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]

tr.apk のサイズは110KB程度,nexus 内部ストレージの空き容量は数MBはあるので,インストールできてもよさそうなものだ.そのため,当初は,本当は容量不足ではなく,別のことが起こっているのかと思った.しかし,実際に容量不足だというのが答えらしい.StackExcange に,パッケージインストールのための空き容量についてのやりとりがあり,小さいパッケージでもインストール時には意外と容量が必要といわれている.そこで,徹底的に容量を空けてみることにした.

Total space 128MB! 懐かしの TeraDrive では HDD が 30MB だったことを考えると,すごい大容量化だ!‥しかしおまえは 32GB モデルのはずなのに,基板直付けの内蔵フラッシュをどこにやってしまったのだ?

設定→アプリから,各アプリを見て,force stop, disable, clear data, clear cache を適宜試していく.不要アプリを停止しても,メモリ容量は空いてもストレージ容量は空かないのではとも思うが,/data 等は tmpfs でマウントされている,つまりメモリをストレージとして割り当てているので,これも影響ありそうだ.clear data や clear cache は当然モロに影響があり,削除した分ストレージ空き容量が増える.
ここで特に注意したいのが chrome だ.特に容量を食っているのだが,clear data でデータを消すといったん空き容量となるものの,しばらくするとまた一定のデータサイズに戻っている(そして空き容量は減っている).そこで,chrome の clear data をポチった後,間髪入れずに pc から adb install すると,インストールに成功した.

何とか towelroot を adb からインストールした.その後,SuperSU や Root Checker Basic もねじこんだのがこの状態.
さて,ようやく towelroot がインストールできた(少なくとも形式上は).towelroot を起動して 'make it ra1n' すると,you should have root と表示され,これで root を取得できたはずということになる.ところが,どうも実際には root を取得できていないような振る舞いをする.root checker や supersu を入れても一向に駄目.
'make it ra1n' ボタンを押すと,root を取得する‥はずだった

root を持ったはず‥といわれるが‥
Root Checker Basic で見ると,root は取れていないという.
foo
SuperSU もまともに入らない

念のために adb logcat を見てみると,towelroot の動作のログから,root 取得に失敗していることがわかる.
WOOT
YOU ARE A SCARY PHONE
(超意訳:ネクサス‥恐ろしい子!
というウケるメッセージが出ているのだ[記事後尾のログ参照].うひゃひゃ.‥残念.重症すぎだろこの端末.

2. 非保存的(破壊的) root 化を目指す編


しょうがない.towelroot でできないなら,もはやデータが吹っ飛んでも bootloader unlock で root 化するしかない.うまくいけば,なるべくパーティションへの書き込みを行わずに dd でイメージ取得して pc 側でファイル復旧すれば,実質大部分のファイルはサルベージできるかもしれない.

xda developers に投稿されたガイドを見つつ,bootloader unlock を実施してみた.fastboot コマンドは,adb のインストール時に一緒に使えるようになっているはず.

C:\work>fastboot devices
0_コードは伏せます_b        fastboot
 
C:\work>fastboot oem unlock
...
OKAY [ 31.977s]
finished. total time: 31.977s

Nexus 上で yes を選んでからは一瞬で帰ってきた.

bootloader unlock の確認画面.これで yes を選ぶと,全データがふっとぶ‥のが普通だが‥

何かをフォーマットできるとは思えない早さ.しかし,LOCK STATE は unlocked となった.できたと思っていいのか?

unlocked! これでいけるか?

そしてリブートをかける.

C:\work>fastboot reboot
rebooting...

finished. total time: 0.001s
  
リブートした.が,ガイドに言われているようなプログレスバーは出ず,また初期化シーケンスに突入してしまった.通過後,電源断.次に3指押し(power+vol up+vol down)で fastboot に入るよう電源を入れると,LOCK STATE - locked に戻っている.
筋金入りだろこの端末.unlock すらままならないようだ.

無情にも再び locked に戻っている.もはや彼の心には何も届かないのか?

では,unlock 後,再起動せずに次の手順に進んだらどうか?やってみよう.

先ほどと同様に bootloader unlock (のつもり)までを行う.そして,リブートをかけずに,カスタムリカバリのイメージを焼いてみる.今回は twrp をダウンロードした.手順は droid life のものを使用.

C:\work>fastboot flash recovery openrecovery-twrp-2.7.1.1-hammerhead.img
sending 'recovery' (13586 KB)...
OKAY [  0.626s]
writing 'recovery'...
OKAY [  1.043s]
finished. total time: 1.669s

Nexus の画面上にも writing と表示された.果たしてちゃんと書き込まれたのだろうか.cache の wipe も不可能だったくらいなので,厳しい気もする.ともかくリブートさせ,リカバリモードに突入してみた.Recovery mode を選ぶと,google ロゴの後,赤三角 warning 付きの倒れ droid 君出現.その後のメニューも標準 recovery のままだ.つまりリカバリイメージが flash できていない.撃沈.

カステムリカバリに行けるのか?

そして標準リカバリへ.カスタムリカバリは書き込めていなかったようだ.

3. 結論


分解して flash(emmc) のチップを挿げ替えるなどの強硬手段に出れば何かの可能性はあったかもしれない.しかし,素人がソフトウェア的にできることはこのくらいだろう.もはや私に打つ手なし.さらば nexus 初代. さらば我がデータたち.故障機(=初代)は返送しました.

なお,送られてきた新品は,比較すると液晶が黄色っぽい.というか,比較しなくても黄色味が強く見える.色温度が違うのだろうか,しかし android で簡単に色温度設定はできないようだ.それだけでなく,初代から貼り直した保護フィルムとの相性のせいか,けっこうギラツブになっている.初代のほうはフィルムを貼ってもしっとりとしたいい感じの表示だったので,これは結構悲しい.このフィルムはアスデックのノングレアフィルム3 NGB-GNX5 というもので,初代との相性はバッチリ,ギラツブもなく非常に見やすいし,タフで素晴らしいフィーリングだった.二代目にもうまく貼り直せて,よっしゃと思っていたのに‥うう‥.とはいえ使えることが第一だ.新品には壊れず頑張ってもらいたい.


左:交換機(+フィルム),右:故障機.明るさもかなり異なるが,交換機は色味が黄色がかっている.フィルムによる差ではないと思う,初代でフィルム貼ってもギラツブ感も黄色感もなかった

左:交換機(+フィルム),右:故障機.交換機は黄色く見えるんだよなぁ.色温度変更させてほしい.

左:交換機,右:故障機.故障機にも32GB入っているはずなのにっ.

アスデック 【ノングレアフィルム3】 Google NEXUS 5 専用 防指紋・気泡が消失するフィルム NGB-GNX5
初代には表示も素晴らしく超おすすめの保護フィルム.しかし二代目のギラツブを打ち消すことはできなかった.相性でそうなっているのかもしれないが,二代目が来て速攻で貼り換えたので素の液晶を見ていないのだった.タッチ汚れ対策という意味では依然有効.

さらば初代.そしてマイデータ.救出は失敗に終わった.

A1. 豆知識


この故障状態では,root 無しでこちらからファイルを書き込むことは非常に困難である.ただし,
/data/local/tmp
にはファイルを作成することができた.他にも書き込み権があるディレクトリはあるかもしれない.


A2. 付録


参考:adb logcat で見た towelroot のログ.一部伏せ字にしてあります.色は筆者による後づけ.ウケる.

I/towelroot_java( 8918): modstring:
I/towelroot_java( 8918): got IOException
I/towelroot( 8918): ************************
I/towelroot( 8918): native towelroot running with pid 8918 params
I/towelroot( 8918): CPU affinity was 1
I/towelroot( 8918): set CPU affinity 0
I/towelroot( 8918): got kernel version Linux version 3.4.0-gd59db4e (android-build@vpbs1.mtv.corp.google.com) (gcc version 4.7 (GCC) ) #1 SMP PREEMPT (月) (日) (時刻) (年)
I/towelroot( 8918):
I/towelroot( 8918): got kernel number 0
I/towelroot( 8918): no matching phone found, trying default
W/DropBoxManagerService(  546): Dropping: data_app_wtf (888 > 0 bytes)
I/towelroot( 8918): starting the dangerous things
I/towelroot( 8918): dangerous things are done
I/towelroot( 8918): 0xe77ac000 is a good number
I/towelroot( 8918): zapper received 12
I/towelroot( 8918): cpid1 resumed
I/towelroot( 8918): 0xe77afd84 is also a good number
I/towelroot( 8918): zapper received 12
I/towelroot( 8918): cpid3 resumed
I/towelroot( 8918): WOOT
I/towelroot( 8918): YOU ARE A SCARY PHONE
I/towelroot( 8918): MOUNT RW FAILED
I/towelroot( 8918): open /system/xbin/su failed
I/towelroot( 8918): open /system/xbin/daemonsu failed
I/towelroot( 8918): open /system/etc/install-recovery.sh failed
I/towelroot( 8918): doing chcon
I/towelroot( 8918): su installed failed: 32512
I/towelroot_java( 8918): got IOException
F/Looper  ( 8918): Thread identity changed from 0x275c000022d6 to 0x22d6 while dispatching to android.view.ViewRootImpl$ViewRootHandler android.view.View$PerformClick@42880f80 what=0
F/Looper  ( 8918): Thread identity changed from 0x275c000022d6 to 0x22d6 while dispatching to android.view.ViewRootImpl$ViewRootHandler android.view.View$UnsetPressedState@4291f1d8 what=0
I/towelroot(17228): WTF execv returned: -1

A3. 追加写真ギャラリー



cache の wipe を行っているはずだが,効果なし.

確か unlock したつもりの直後.reboot した結果かも.鍵が外れているアイコンが出る.ただ,この後の画面で locked にもどっており,実際は unlock できていなかった模様.

この welcome スクリーンを何度見たことか.毎度初期化を要求されるのであった

恐怖の選択肢 delete all user data. すべてを wipe
本当にやるのかっ
やっちまったぁぁぁ
しかしおそらく wipe できなかったんだろうな‥

2 件のコメント:

  1. 私もNexus5(lolipop otaアップデート済)の
    ファクトリーリセットを敢行してみたのですが、
    「delete all user data.」を選んだあと、
    「Formatting /data・・・」から全く先に進みません。。。(1時間以上)

    どれくらいの時間で終わりましたでしょうか?

    返信削除
    返信
    1. お返事遅くなりました.ファクトリーリセット敢行ということは,結構大変な事態になられたのでしょうか.
      さて,delete all user data の処理にかかった時間ですが,すみませんよく覚えていません‥.
      でも1時間以上というほどはかかってなかったと思います.
      写真の元ファイルのタイムスタンプ見たら大体わかると思うので,見つかったらここに書き込んでおきます.

      削除