読者です 読者をやめる 読者になる 読者になる

Androidのファイルシステムについて

Mobile/その他
Android4.2以降はタブレットに限ってマルチユーザーモードが実装されたそうだ。

それに伴って、ユーザーデータの保存場所がぐちゃぐちゃになっているという話を聞く。
マルチユーザーモードでないころからすでにメーカーごとに微妙に実装が異なっていたりしていたのに、さらに…という感じなのだろう。(Androidで開発をしたことがあるわけではないので実際どの程度苦労するのかは分からないが)

そもそも/Systemとか/Dataとか変な構造にしなくて、おとなしくFHSに従っていれば良かったのではないだろうか。そうすればマルチユーザーになろうが/home以下に新しいユーザー用のデータディレクトリを作れば済む話なんじゃないかと素人ながら思う。
ただし、rootユーザー以下一般ユーザー以上の権限を持つ管理者ユーザーのようなものが必要になるかもしれない。
アプリの権限問題も、もしかしたら危ない動きをするかもしれないものは管理者ユーザー権限でしかインストールできず、(場所は/usr以下)データ通信もせずファイルの読み書きもほとんどしないようなゲームは一般ユーザー権限でもインストール可能(場所は/home/local以下)というようにできたのではないだろうか。
しかし、現実そうなってしまっているのだからしかたがないだろう。

とはいえ、Androidスマートデバイスではもうひとつ問題がある。それはSDカードの取扱。
自分が触ったことのあるデバイスはだいたい本体のフラッシュメモリ(のユーザーデータ格納用パーティション)を/sdcardにマウントして、本来のSDカードは/mnt/external_sdだとか/mnt/ext_sdだとかにマウントするしくみになっている。(そもそも、内部ストレージをなぜ/mnt/sdcardに? )
UbuntuなどPC LinuxでもSDカード等リムーバブルメディアは/media以下とかに 所在なさげにマウントされているだけなので、FHSに従おうがこの問題は残る。
そもそも「リムーバブル」メディアを常時差しっぱなしにしておくことを考えていないのだからしょうがない。

ここが本題なのだが、内部ストレージも外部ストレージも一元的に扱う仕組みはないだろうか?
シングルユーザーでしか使えない仕組みの時はユーザーデータを格納するディレクトリ以下になんらかのディレクトリを作成して、そこにマウントさせるという仕組みができたんじゃないかと思っていた。
しかし、マルチユーザーモードではこの方法は使えなくなった。

だが、マルチユーザーだろうがなんだろうが関係ない画期的な方法を思いついた。

現在、SDカードはFAT32で単一パーティションというのが当たり前だ。
この中に、ext4なりのディスクイメージをユーザーごとに作成する。
↓こんなかんじで
ルート

┣━user1.img

┣━user2.img

┗━user3.img

で、SDカードを適当なところにマウントしたら(ここを通して読み書きしないので場所はどこでもよい)、各ユーザーディレクトリのイメージを内部ストレージにあるユーザーディレクトリ以下のディレクトリにループバックマウントする。

~/externalとかに。

こうすればマルチユーザー環境だろうがうまくいくんじゃないかと思ったんだけど、どうでしょう。
ほんとにこんな仕様になったら、AndroidからはともかくPCにつなぐときたいへんだろうな~。