auから発売されていたAQUOS PHONE SERIE SHL22をmineo契約のSIMで使用しています。
発売時からAndroid 4.2.2でOS Updateは提供されずに終息したモデルのため、今でもJelly Beanのままとなっています(なのでポケモンGoが導入できない程度に古い)。
別途SIMロックフリー端末も併用しているため、SHL22は専らおサイフケータイとして使用しており、それ以外では他端末のバッテリ残量が厳しいときなどに使用するサブ的な端末として利用しています。このため、スペックの低さはあまりストレスにはならないのですが、掲題の通り挿入していたmicroSDXCカードに論理障害が発生してしまいました。その状態からのデータ救出方法などを以下に記載しておきます。
発生事象
(SHL22とは無関係に)ノートPCで作業中、隣に置いていたSHL22の画面が突然点灯したことに気付きました。何だろうと思っていたら電源投入時の起動画面が表示されたため、どうやら何らかの障害で再起動が掛かったようです。意図せず再起動されることはこれまでにも稀に発生していたため、特に気にせず放置していました。
しばらくしてからSHL22の画面をONにすると、microSDカードのようなアイコンが通知領域に表示されていることに気付きました。
通知を開いてみると以下のメッセージが表示されています。
先の意図しない再起動が発生するまでは問題無かったのですが、何故かmicroSDが認識されていないようです。
この通知をタップするとmicroSDをフォーマットするかの確認に移るため、(既に記録されているデータがあるため)フォーマットはせずに、とりあえず手動で再起動してみました。
が、再起動後も同じ通知が表示されmicroSDは認識されません。
実は過去にdocomoのREGZA PHONE T-02Dでも同様の症状を経験したことがあります。特に出し入れしたわけでもなく挿入しっ放しのmicroSDが同様のメッセージが表示されて突如認識されなくなりました。
T-02Dで発生した際はノーブランドの安物のmicroSDカードを使用していたため、そのせいもあるのかと思っていましたが、SHL22で使用していたのはSAMSUNGのEVOシリーズのMB-MP64Dというまともなカードです。
怪しげな販売店で購入したわけでもなくAmazon*1で購入したため、カード自体の品質が(たまたま動作不良を起こした可能性を完全に否定することはできませんが)怪しいものではないはずです。
データ救出
スマートフォンではどうにもできないので、PCでデータ救出を試みます。
まずはスマートフォンをシャットダウンして電源を落とした後、microSDカードを取り出します。
そしてPCに挿入しますが、Windowsでも認識できずフォーマットを求められてしまいましたので、このダイアログでは[キャンセル]を選択します。
このmicroSDにはSHL22で撮影した画像が少し入っていただけのはずなので、デジタルカメラのSDカードが論理障害を起こした際と同様に、ZARでデータ救出を試みることにします。
ZAR
ZARを起動しmicroSDを分析すると、データの断片が見当たります(前述の通り私はSHL22でほとんど撮影していないので、データの痕跡も極端に少ないのは正常です)。
6枚の画像が救出できそうなことが判ります(ZARではファイル名は復元できないので、i+5桁連番.拡張子というファイル名になります)。末尾のi00006.jpgだけ60GB近くもあり、おかしなことになっています。恐らくEOFが識別できていないのでしょう。とりあえず、全部選択しておきます。
救出するファイルの格納先のパスを指定して、処理を開始します。
しばらく待った後、指定したパスにファイルが生成されますので、基本的にはこれだけで救出完了です。
2017/05/15 18:57 2,710,528 i00000.jpg 2017/05/15 18:57 2,775,040 i00001.jpg 2017/05/15 18:57 3,276,800 i00002.jpg 2017/05/15 18:57 1,972,224 i00003.jpg 2017/05/15 18:57 2,950,144 i00004.jpg 2017/05/15 18:57 2,388,480 i00005.jpg 2017/05/15 19:50 63,959,859,200 i00006.jpg
確認したところ、i00000~i00005は普通にJPGファイルとして正常に表示可能な状態になっていました。
ですが、前述の通り今回はi00006.jpgだけ異常に巨大で明らかに様子がおかしいです。このmicroSDXCカードは64GBのメディアなので、i00000~i00005を除いた全領域のデータがi00006として記録されているような感じではないかと想像されます。
それでもi00006を無理に表示してみるとJPG画像としては上の方の領域だけ無事で、残りの領域は壊れた状態で表示されました。
何とかならないものかと、引き続きもう少し調べてみることにします。
損傷したファイルの分析
i00006.jpgをexiftoolに食わせてみると、普通にメタデータにアクセスできました。
C:\data\recover_shl22\ROOT>exiftool i00006.jpg ExifTool Version Number : 9.62 File Name : i00006.jpg Directory : . File Size : 60997 MB File Type : JPEG MIME Type : image/jpeg Exif Byte Order : Big-endian (Motorola, MM) Image Description : DSC_0013 Make : SHARP Camera Model Name : SHL22 Exposure Time : 1/1286 F Number : 1.9 ISO : 40 Exif Version : 0230 Date/Time Original : 2017:05:04 13:48:32 …略…
EXIFがダメージを受けていないことから察するにファイルの前方の領域は正常なようです。
JPEGファイルとしての体は為しているようなのでImageMagickで画像を読み出して、別ファイルに記録してみます。
C:\data\recover_shl22\ROOT>convert i00006.jpg i00006_.jpg convert: Corrupt JPEG data: premature end of data segment `i00006.jpg' @ warning/jpeg.c/JPEGWarningHandler/365. convert: Unsupported marker type 0x4a `i00006.jpg' @ warning/jpeg.c/JPEGErrorHandler/328.
データセグメントの終わりが早すぎるからJPEGデータが壊れてるよ!0x4Aとかいうマーカータイプは知らないよ!というエラーが発生しました。それでも出力ファイルは一応生成されているので開いて見ると、先に無理やり開いてみた時と同様に画像上部のみが生きており、その他の領域は情報が失われています。
次に、i00006.jpgをバイナリエディタで開いてみたところ、0x000000~0x0DFFFFまでの領域にはデータが記録されていますが、そこから先の0x0E0000以降の領域は0xFFで埋め尽くされており、有意なデータが何も記録されていないことが判明しました。
これなら画像上部以外が何も表示されないというのも納得です。試しに0x0E0000番地以降を削除したファイルを作ってみたところ、ImageMagickが出力したファイルと同様の画像が得られました。
存在しない情報は復元しようがないので、i00006.jpgは諦めるしかありません。
この状態から察するに、FATが壊れただけではなく記録済データ領域の末尾も何らかの理由により損傷していたようです。
この画像をSHL22で撮影したのは障害発生日より何日も前なので、SDカードの記録不良ではないのでしょう(撮影時にエラーは発生していないため)。SHL22が意図せず再起動した際に発生していたOS/ミドル/アプリの何れかの障害により、データを損壊させたと考えるのが合理的だと思います。