スマホのSDカードの理解不能なトラブル
僕のスマホ、昨晩壊れました。
そして、先ほど直りました。
その間の顛末がIT業界に20年以上もいたというのにはじめてのことだったのでシェアします。
機種は、REGZA Phone T-01C。
ワンセグあり、おサイフありのガラパゴスなスマホで、しかも日常防水つき。
デビュー当時は結構鳴り物入りで、予約から購入までに1ヵ月半ぐらいかかったのを憶えている。
ところが歩留まりが悪かっただけなのか、製品仕様が悪いのか、些細な(機種交換を本気で考えるほどでない)トラブルが相次ぐ。
たとえば、出荷時のマイクロSDカードは、1ヵ月も経たないで壊れたし、バッテリーも半年持たなかった。
いきなり勝手にリブートするのなんていうのも珍しくない。アプリがハングしたり、Android OSがフリーズするのに至っては日常茶飯事。
GPSが使えたり使えなかったりなんていうのもよくあること。
さくさく使えるほうが珍しい。
「さすがは東芝。原発作っているメーカーは違うわ」と、開米さんに聞かれたら怒られそうな悪態を何度もついたおぼえがある(東芝の社員の前でやったこともある。さすがに名門企業の社員は太っ腹で笑っていた)。
まあ、問題児(あ。僕じゃなくてT-01Cね)だったわけです。
それでも、だましだまし使ってきたのだが、昨晩突然SDカードを認識しなくなった。
認識しないというのは正確ではない。
ブート時に認識しにいったあと、「SDカードを安全に取り外しました」というメッセージが出て、その後まったく認識されなくなる。こういう症状が発生。
SDカードが使えないスマホなんて、SDカードが使えないデジカメみたいなもの(例えが秀逸でないのは許してください)。
SDカード自体は生きていた。
PCでは認識されたので、とりあえずフルバックアップをした。データは失わずに済んだ。
さて、ということは、本体の問題ということになる。
ガラケー、捨てないで置いといてよかった。バッテリーが空になっていたので充電した。使えるようだ。これで少なくとも電話は可能だ。
ただ本体を修理に出すとなると、しばらくメールや、ブログの更新や、ダイエットの記録や、facebookでのやり取りなどなど、いろんなことが不便になる。
どんよりだ。
Docomoショップへ行くことにした。近所に2軒ある。
南行徳のDocomoショップは大きいのだが、その分人もたくさん来ていつも混んでいる。
行徳のDocomoショップは小さいのだが、その分人も来ないので空いている。
行徳にした。待たずに対応してもらえた。
対応してくれたお姉さんが、抜群の対応の良さだった。理想的なトラブルシューティングだった。
おかげで修理に出さずに直ったのだが、IT業界歴20年を超え、ネットワークやハードウェアに関しては詳しいはずの僕にもはじめての顛末だった。
お姉さんは、まずは僕の話をじっくり聞いてくれて、その後いろいろな提案をしてきた。
まずはSDカードスロットの点検。店にあるSDカードを僕のT-01Cに挿入させてくれていう。僕もたぶん同じことから始めただろう。
そうしたら、これがきちっと認識したのだった。
えっ、本体の問題じゃないの?
次に、僕のSDカードを店にあるT-03C(たぶん)に挿入させてくれという。うん。やるべきだ。
そうしたら、これもやっぱりきちっと認識したのだった。
うーん。一体何が悪いのだろう。
そこで、ちょっと聞いてみた。
「SDカードのデータの問題で、拒否されるということはありえるのでしょうか?」
調べてくれた。そういう例が過去あったとのこと。
そこで、バックアップした後の新しいデータもないので(当然だ)SDカードをフォーマットしてもらうことにした。
結果、認識されるようになった。
家に帰ってから、必要最小限のデータだけSDカードに戻して使っている。今のところ問題ないようだ。
これは、結局ソフトウェア的なトラブルだったということだろう。
ソフトウェアのトラブルはとにかく難しい。解決しても結局原因が分からなかったというようなことは過去たくさんあった。
僕が、IBMの汎用機でアセンブラのコードを書いていたときは、突き詰めれば原因は分かった。
たとえば、自作のマクロ命令の終了直後ABEND(異常終了)するというトラブルに見舞われたことがある。調べるためにトレース用の命令を入れてみた。するとABENDしなくなった。外すとまたABENDする。
夜中の二時、丑三つ時。僕は背筋が寒くなった。幽霊が悪さしているに違いない。ハイテク機器と幽霊は相性がいいとされている。
結局、一晩かかって理由がわかった。簡単なことだった。
我々が通常使っているノイマン型コンピュータは、命令コードもデータも区別せずメモリに格納されている(命令コードとデータを区別して格納するコンピュータもあった。バローズ(今はユニシスの一部)という会社が作っていた)。
だから、昔マイコンに4Kしかメモリのなかった頃は、自らの命令コードを書き換えるというプログラムをプログラマたちは平気で書いていた。ちょっと大きなプログラムになるとメモリに入りきらないからだ。
命令コードとデータがどこにあろうと構わないのだが、1つだけ厳格なルールがあった。命令コードはワードの境界をまたいではならないというものだった。
コンピュータにはビット、バイトの上にワードという単位がある。当時のコンピュータは1ワード=4バイトだった。ちなみに原則として32ビットのCPUなら1ワード=4バイト、64ビットのCPUなら1ワード=8バイトだ。
ただ、いまどきワードを気にする技術者はいない。いるとすれば、C言語の中にアセンブラを挿入するというようないまどきでないプログラムを書いている人ぐらいだ。
コンピュータはワードの単位で命令を読み込むので、命令がワードをまたがるとその命令は正しく認識されないということになる。
自作したマクロ命令は、データ部を含むものだったので、ワードの境界できちっと終わっていなかった。そのため、直後の命令が境界をまたいでしまいABENDしたというわけである。
正しいお作法としては、マクロ命令の最初と最後に無理やり境界合わせをする擬似命令を入れるのであった。僕はそれを怠っていた。
トレース用の命令もマクロとして作っていたのだが、そちらは先輩が作っていたので、きちっと境界合わせする擬似命令が入っていた。それでABENDしなくなっていたのである。
わけ分からないですよね。図解しました(クリックすると拡大図)。なんとなくご理解ください。
今は、ソフトウェア部品のブラックボックス化が進んでいる。ソフトウェア的なトラブルの根本原因が分からないことも多いのではないかと想像する。
とはいえ、同じSDカードが、 PCでは使えて、スマホでは使えないとなると、スマホを疑うのが普通の考え方だろう。
こんな分かりづらいトラブルは、僕ははじめてだ。
まあ、思ったより早く直ってよかった、よかった。
SDカードのトラブルは多いと思うのだが、ネットを調べてもロクな回答はなかった。同じようなトラブルで困っている人の参考になれば幸いです。
ところで、僕は、Androidスマホには、リセットボタンがほしい。熱望します。フリーズするたびにケースを開けてバッテリーを取り外すのは、それこそ故障の原因になりそうで怖い。
も一つ、今日はじめて知ったこと(普通は知っているのかもしれないが)。Docomoのスマホは購入後3年間は、浸水・破損以外の原因なら、無償で修理してくれるとのこと。保証書は要らない。お姉さんの対応もいいし、見直したぞ、Docomo。
この記事の関連記事がこれ↓だとは・・・
http://blogs.bizmakoto.jp/toppakoh/entry/1931.html
アルゴリズムがミテミタイ。
--
自社の考えをインタビューして文書化してほしい方は↓