先週末にはまった話。
自分のメインのAndroid端末でそのApp2SD機能によりSDカード(厳密にはmicro SDHCカードだがここでは簡単に「SDカード」と呼ぶことにする)に追いやったアプリが消えたり現れたりする、という現象が起こるようになった。再起動で解消することもあれば、そうでないことも、という状態。
件のSDカードは2つのプライマリ・パーティションに分けてあった。第1パーティションはFAT32でフォーマットしてあり、Androidからは普通の外付けSDカードはカードの扱い。2つ目のパーティションはExt4でフォーマットしてあり、Link2SD用に使っていた。
最初は、SDカードのマウントそのものに失敗していると思い込んでしまった。実は第2パーティションは問題なくマウントされてLink2SDによりそこに格納されたアプリは使えていた。第1パーティションも全くマウントされないのではなく、App2SD機能でSDカードに追いやったアプリを格納する/mnt/asec以下がダメなだけで、それ以外の普通のファイルは問題なくアクセスできた。
このしょっぱなの現状把握の段階で誤ってたので時間をだいぶ浪費した。これに気づく前に、たまたま用意していてた新しいSDカードに総入れ替えして置き換えてみたが同じ症状だった。
App2SDの動作の仕組みとか調べてみたが(簡単な説明、もう少し詳しい説明(ディレクトリ名などは古い))、だからどういう原因でこういう現象が起きていて、どう対処すればいいかまでわからない。Link2SDは動作していたので、App2SDはもう使わないようにして全てLink2SDにしてもよかったが、気持ち悪いので以前この問題が起き始める前にCWMリカバリーでバックアップしていたデータをリストしたが /data がリカバーできないというエラーが出る。これは想定外。何のためのバックアップかわからない。
もうしょうがなくROMの焼き直しで初期化。
Link2SD用の第2パーティションはそのまま。つまり、初期化してもそのパーティションは削除されないので、その後Link2SDをインストールして、(ルート化が必要だが)それによりしかるべきマウントスクリプトを導入すれば、それらアプリはすぐ再使用できるようになる。第2パーティションにAPKがあっても、Link2SD自身が認識できていないとそれに相当するアプリは使えないので、Link2SDのオプションの「全てのアプリを再リンクする」を選択し、その後再起動すればその後それらアプリは使えるようになる。
ただ、無料版のLink2SDではアプリの内部データまではSDカードに移せない。なので、上記のようにして、初期化後も以前のアプリが使えても、肝心の設定データ等が失われてしまう。有償のLink2 SD Plusを購入すれば、内部データまではSDカードに移すことが可能になる。予めそうしておけば、今回のように初期化を経ても、設定データ込みで以前のユーザーアプリがすぐ使えるようになるはず…と期待している(未確認)。
しかし、何が悪かったのかわからないが、また最初の問題が発生するようになってしまった。
ここで、App2SDによりSDカードに移されたアプリが格納されている/sdcard/.android_secureディレクトリの名前を、ものは試しでリネームしてみた。Android OSが立ち上がっている状態ではこれはrootでもマウントを解除したりしなければできないので、CWM Recoveryで/sdcardをマウントをした状態でadb shellでroot権限にて行った。その後端末を立ち上げると、システムが自動的に/sdcard/.android_secureを作成するのだが、その上でApp2SDを行うとうまく行っているように見える。
ちなみに、初期化してしまったのでTitanium Backupから取ってあったバックアップをリストアしようとした。そのため、Titanium BackupをPlayストアから再インストールしようとしたが、何度試そうと「容量が不足」エラーでインストールできなかった。結局、/data/以下に元々はLink2SDが作ったと思われるシンボリックリンクが残っていたのが原因で、これを削除すると無事再インストールできた。その他の一部アプリに関しても同様の状態になっていたので、久しぶりに書いたスクリプトでこれら無効なシンボリックリンクを削除すると、問題なくリストアできた。
今は、アプリのSD移動は基本Link2SDでExt4の第2パーティションに移すことにしている。その上でテストを兼ねて、使えなくなってもすぐには困らないようなアプリをAndroidネイティブのApp2SD機能でFat32の第1パーティションに移している。その後数日経つが、今のところ安定して動作しているようだ。
考えてみると、この問題が起こっているときは、端末が異様に熱くなっていた。App2SD機能の実現には複数のmountが使用されているが、これが何らかの理由でうまくいかず、何度もリトライでもしていたのだろうか。
「Android端末でApp2SD機能によりSDカードに追いやったアプリが消えたり現れたり」への1件のフィードバック