2011/11/01

端末空き容量が無い場合の試験を実施する方法


端末ROMの空き容量を0(端末ROM使用量をフル)にする方法です。
空き容量が0になるとストレージへのファイルIOやデータベースの更新操作時等、
さまざまな場面で実行時例外がスローされます。

ハイスペックな端末の場合は気にならない問題かもしれませんが、そうではな
い端末ももちろんあります。
この問題に対応する/しないを決めた上でアプリケーションを設計・実装しましょう。

まずは、端末のファイルシステムのブロックサイズを調べます。
※下記はAndroid4.0のエミュレータで検証

# df /data
-実行結果-
Filesystem             Size   Used   Free   Blksize
/data                   64M     7M    56M   4096

実行結果より、ブロックサイズは4096Byteとわかります。
実行結果の見方は下記
 - Size:ROMの総容量
 - Used:ROMの使用量
 - Free:ROMの空き容量
 - Blksize:ファイルシステムのブロックサイズ

次に、サイズ指定でファイルを生成します。
サイズは ブロックサイズ*個数 で指定します。
下記は1000ブロックのdummyファイルを作成するコマンドです。
 - bs:ブロックサイズを指定します
 - count:作成するブロック数を指定します
 - of:ファイルパスを指定します
# dd if=/dev/zero of=/data/dummy bs=4096 count=1000
-実行結果-
1000+0 records in
1000+0 records out
4096000 bytes transferred in 0.260 secs (15753846 bytes/sec)

上記をみると 4096*1000 で4096000Byte(4MB)のdummyファイルが作成されたこ
とがわかります。

dfデータでもう一度空き容量を見てみましょう。
# df /data
Filesystem             Size   Used   Free   Blksize
/data                   64M    11M    52M   4096

Freeが56M→52Mに減っていることがわかります。

※ワンポイント
一気に空き容量0となるようにdummyファイルを作成してもよいですが、
そうなると一切のファイルIOができなくなってしまいます。
試験する際は、一時的に空き容量を少し回復できるようにファイルパスを変えて
2段階でdummyファイルを作成することをお勧めします。

例)
// 空き容量回復用のファイルdummy1を作成
# dd if=/dev/zero of=/data/dummy1 bs=4096 count=1000

// 空き容量を無くす用のファイルdummy2を作成
# dd if=/dev/zero of=/data/dummy2 bs=4096 count=99999999

少しだけ空き容量を作成したい場合はdummy1を削除すればOKです。

以上です。