2014年6月24日火曜日

Android: Nexus 5 の故障

Nexus 5 が唐突に故障した.私の現状では,新品交換以外に策がない.どなたか内蔵ストレージのデータの救出方法をご存知の方は是非教えてください~!

では,詳細をば.

故障の状況.

使用中にタップに反応しなくなり,リセットがかかって,黒地に google ロゴが出てきた.その後初期設定シーケンスに突入.嫌な予感しかしないが,初期設定の途中でも 'Unfortunately, Camera has stopped.' やら 'Unfortunately, Galery has stopped.' と警告が出てさらに嫌な感触を煽ってくる.初期設定が済むと,今度はストレージ容量が足りないと警告が出る.32GBモデルでまだまだ余裕があったはず‥と思いながら見てみると,Total space 128MB となっている.メガバイトって!つまり内部ストレージ(フラッシュメモリというかeMMC の 32GB)が認識されていないようだ.一度電源を切ってしばらく置き,その後電源を入れると,また初期設定に突入する.どうやら何も覚えてくれなくなったらしい.ちなみに,日付と時刻も吹っ飛んで,再起動のたびに1970年になっている.

端末の調査.


何とかならないかと思って,PC から usb 接続で adb shell でシェルに入り,少し調べてみた.
ただ,root化はしていない品行方正な端末なので,できることは著しく限られる.


shell@hammerhead:/ $ cat /proc/partitions
cat /proc/partitions
major minor  #blocks  name

 179        0   30535680 mmcblk0
 179        1      65536 mmcblk0p1
 179        2       1024 mmcblk0p2
 179        3        512 mmcblk0p3
 179        4        512 mmcblk0p4
 179        5        512 mmcblk0p5
 179        6        512 mmcblk0p6
 179        7       2048 mmcblk0p7
 179        8       1024 mmcblk0p8
 179        9        512 mmcblk0p9
 179       10        512 mmcblk0p10
 179       11        512 mmcblk0p11
 179       12       3072 mmcblk0p12
 179       13       3072 mmcblk0p13
 179       14        512 mmcblk0p14
 179       15      16384 mmcblk0p15
 179       16      16384 mmcblk0p16
 179       17       3072 mmcblk0p17
 179       18      22528 mmcblk0p18
 179       19      22528 mmcblk0p19
 179       20      22528 mmcblk0p20
 179       21       3072 mmcblk0p21
 179       22        512 mmcblk0p22
 179       23        512 mmcblk0p23
 179       24        512 mmcblk0p24
 179       25    1048576 mmcblk0p25
 179       26      30720 mmcblk0p26
 179       27     716800 mmcblk0p27
 179       28   28551146 mmcblk0p28
 179       29          5 mmcblk0p29
 179       32       4096 mmcblk0rpmb
shell@hammerhead:/ $

という感じ.ということは,eMMC ストレージのパーティションテーブルは読めてる? 1ブロックの大きさはわからないが,ブロックあたり1KBなら約30GBとなって辻褄は合いそうだ.

マウント状況は,

shell@hammerhead:/ $ mount
mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,seclabel,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
none /sys/fs/cgroup tmpfs rw,seclabel,relatime,mode=750,gid=1000 0 0
tmpfs /mnt/asec tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,
data=ordered 0 0
tmpfs /data tmpfs rw,seclabel,nosuid,nodev,noatime,size=131072k,mode=771,uid=100
0,gid=1000 0 0

となって,おなじみの /sdcrad には何もマウントされていない.
df では,

shell@hammerhead:/ $ df
df
Filesystem               Size     Used     Free   Blksize
/dev                   927.5M   128.0K   927.4M   4096
/sys/fs/cgroup         927.5M    12.0K   927.5M   4096
/mnt/asec              927.5M     0.0K   927.5M   4096
/mnt/obb               927.5M     0.0K   927.5M   4096
/system               1009.3M   704.9M   304.4M   4096
/data                  128.0M   123.4M     4.6M   4096
shell@hammerhead:/ $

となって,もしかして system パーティション(mmcblk0p25)は生きているのかもしれない.

この後,mount, e2fsck, cat, dd など試みるも,パーミッションがないので当然撃沈.
root 化すればこれらのコマンドでアクセス可能になると思われるが,そもそも root 化の過程で内部ストレージが初期化されるということで,データを復元したいというのにそれでは意味がない.google の保証が飛ぶのも嫌だ.

ということで,データ救出に関しては詰んだ模様.
次は全部完全にバックアップするように設定しておこう,というのが私の得た教訓であった.

追記:
その後 root 化によるデータ救出を試みるも轟沈.続きの顛末は

Android: Nexus 5 は記憶を取り戻さなかった
へどうぞ.

0 件のコメント:

コメントを投稿