編集部注: 本稿は、2012年8月10日にAndorid情報のWeb専門誌「AndroWire」に掲載した記事を再構成したものです。

Androidで俗にメモリーと呼ばれるものは2つあります。1つは、CPUにつながるメインメモリです。もう1つは、パソコンなどでいう「外部記憶」となる記憶領域です。

メインメモリーは、プログラムを読み込んで実行する領域です。利用するときに、メモリのサイズや残り容量などは意識する必要がありません。メインメモリはAndroidが勝手に管理してくれます。使い方によっては、メモリが不足することもあるのですがAndroidの場合、メモリをあとから増設することはできないので、気になったとしてもほとんど打つ手はありません。

「記憶領域」は、最初から組み込んである部分である「内部ストレージ」と、マイクロSDカードなどで増設する「外部ストレージ」2つの部分からなっています。どちらにもファイルやフォルダーが記録されています。

ファイルを記憶する場所としては、内部ストレージも外部ストレージも同じなのですが、マイクロSDカードなどで増設する「外部ストレージ」は、取り外し可能なストレージという扱いになっていて、内部ストレージと同じように利用することができません。というのは、取り外しが可能なので利用できなくなる可能性があるからです。

ただし、いくつかのハードウェアでは、外部ストレージが、マイクロSDカードなどでなく、内蔵のフラッシュメモリになっている機種もあります。このような機種では、物理的に取り外しはできないのですが、扱い上、マイクロSDカードなどと同じ扱いになっています。

Androidは、オペレーティングシステムのカーネルとしてLinuxカーネルを使っているので、ハードウェアを扱うような基本的な部分はLinuxと同じです。外部記憶デバイスの扱いもLinuxの標準的な扱いのままです。

Linuxでは、システムの起動に使うドライブ(パーティション)を基本に、フォルダのツリーが作られていきます。このとき、取り外される可能性のあるマイクロSDカード(にあるファイルシステム)は、「/mnt/sdcard」というフォルダ以下に割り当てが行われます。これを「マウント」といいます。Linuxでは、すべての記憶装置は、マウントという操作を行わないと利用できるようになりません。システム自体も起動中にマウント処理が行われます。また、マウントした記憶デバイスは、「アンマウント」処理を行ってから取り出します。この作業は、Androidの設定にある「ストレージ」(バージョンにより名称が違います。SDカードと端末容量などという名称の場合ももあります)で「SDカードのマウント解除」(同、バージョンにより違います)を行ったのちに取り出します(写真01)。あるいは電源を切ってから取り出してもかまいません。

写真01:「ストレージ」や「SDカード」などの設定項目を開いて「SDカードのマウント解除」を使ってからSDカードを取り出す。または、電源をオフにしてから取り出しを行う

なお、AndroidのSDKを使い、PC側からシェルを起動し、mountコマンドで、現在のマウント状態を見ることもできます(写真02)。そして、(リスト01)は、mountコマンドの出力を編集し、物理的なデバイスとフォルダツリーの関係をわかりやすくしたものです。マウントコマンドでは、デバイスやファイルシステムが先頭に来て、次にマウント先(マウントポイントとといいます)があります。リスト01の最後の行は、「/dev/block/vold/179:1」というデバイスを「/mnt/sdcard」というフォルダにマウントするという意味です。このマウント処理が終わると、SDメモリカード(/dev/block/vold/179:1)は、/mnt/sdcardからアクセスすることが可能になります。ちみなにlinuxでは、デバイスもファイルシステムの一部で「/dev」というフォルダの下にあります。また、このデバイス名は機種やメーカーにより名前の付け方が違います。mountコマンドの出力を見る場合には、2つめのパラメータであるマウントポイントを手がかりにします。

写真02:PCに接続し、シェルを起動してマウントコマンドを使い、現在マウントされているデバイスなどを表示させたところ。Linuxでは、記憶デバイス以外もファイルシステムに統合されているので多数の項目が表示される。このうち実際の記憶デバイスに関する部分を抜き出したのがリスト01である

リスト01:mountコマンドの出力(写真02)から記憶デバイスに関係したところ抜き出したもの。スペースで区切られた先頭の3つの項目は、「デバイスまたはファイルシステム」、「マウントポイント」、「ファイルシステム名」となっている。
rootfs / rootfs ……
    :
    :
/dev/block/mtdblock3 /system yaffs2 ……
/dev/block/mtdblock5 /data yaffs2 ……
/dev/block/mtdblock4 /cache yaffs2 ……
    :
    :
/dev/block/vold/179:1 /mnt/sdcard vfat ……

SDカードのチェックを繰り返すとき

電源オンのあと、Android自体が起動し、sdカードのチェックが終了するとこの「/mnt/sdcard」にマウントが行われます。また、スリープから回復したあとにもメディアのチェックが行われており、メディア上にエラーがないかを確認します。

スリープから回復したときに、メディアチェックを毎回することがあります。これは、メディアを取り外すときに、アンマウント処理がただしく行われなかった場合などに起こります。SDカード上に、ただしくアンマウントしたという記録がない場合、マウント中の記憶デバイスに対して、ファイルシステムが壊れていないか自動的にチェックを行うようになっているからです。

このような場合、マイクロSDカードを一回フォーマットし直すと回復します。PCのカードリーダーなどに接続して、必要なファイルやフォルダをコピーしたのち、マイクロSDカードをフォーマットし、ファイルを書き戻します。

なお、一部のメーカーの機器では、SDカードを使わず、内蔵のストレージ領域を使うものがあります。たとえば、Samsung社の製品では、このような構造の機種が少なくありません。このような機種では、カードを取り外すことができないのですが、扱いとしては、SDカードと同じになっている場合が普通です。

また、最近の機種では、最初から大容量のストレージを「内部ストレージ」として搭載しているものもあります。たとえば、Galaxy Nexusは、内部ストレージが13GB以上あります。

SDカードにアプリをインストール

Androidでは、起動中に必要になるファイルやプログラムなどは内部ストレージにのみ置くことができます。多くの場合Androidを構成するファイル(標準でインストールされているアプリやシステムのプログラムなど)も内部ストレージに置かれています。また、基本的にアプリは、内部ストレージにインストールされます。

ただし、一部のアプリは、外部ストレージ(SDカード)側にインストールすることが可能です。ただし、これは、アプリケーション自体が持つ機能なので、対応していないアプリも存在します。内部ストレージが不足すると、通知領域に、「空き容量の低下」が表示されるようになります。このような場合、一部のアプリケーションをSDカードに移動させます。ただし、最初からインストールされているアプリケーションは多くの場合、SDカード側へインストールすることができません。また、ホーム画面に表示するウィジェットもSDカード側に移動させることができません。アプリケーションがウィジェットを含んでいる場合、SDカードに移動させることが可能なものもありますが、この場合には、アプリが持つウィジェットを利用することができなくなります。たとえば、Evernoteアプリは、SDカード側に移動することができるのですが、移動させると、標準のウィジェットが利用できなくなるため、ウィジェットだけのアプリが別に配布されています。

アプリケーションがSDカードへのインストールに対応しているかどうかを調べる方法は、Androidのバージョンなどによりちょっと違います。Android 2.3.xや4.1では、設定の「アプリ」を開くと、「SDカード」(ほかの名称になっていることもある)タブがあり、ここにSDカードへのインストールが可能なアプリのリスト(写真03)があるので、チェックボックスを使って、アプリをSDカード側へ移動させます。

写真03:「アプリ」または「アプリケーションの管理」(設定のアプリケーションの下)に「SDカード」タブがある場合には、これで移動可能なアプリを見つけることができる

SDカードタブがない場合、インストールされたアプリを1つ1つ調べていくしか方法がありません。ただし、この作業を自動化するアプリがGoogle Playで配布されています。「App2SD」(App to SDという意味)などのキーワードで検索してみてください。

こうしたアプリを使わない場合、Androidの「アプリケーション管理」でアプリをタップしてページを開いたとき、「SDカードに移動」と表示されているものが対応アプリです(写真04)。

写真04:個々のアプリケーションを開いたときに「SDカードに移動」ボタンが有効になっていれば、移動させることができる

SDカードにアプリをインストールする場合、前述のように組み込みのウィジェットが利用できなくなります。また、SDカードを抜くとアプリが起動できなくなります。このため、メモリカードの抜き差しには注意してください。基本的にはAndroidマシンの電源をオフにしてからメモリカードを抜き、電源を入れる前にメモリカードを戻すようにします。