PCなどでディスクを用意してOSやプログラムをインストールする場合、ディスクは使った分以外は空きがあります。使用目的に応じて、ユーザーデータをパーティションを分けて管理したりします。それではCuBox-iのようなマシンではどうなっているのでしょうか。CuBox-iの場合、SDがディスクドライブの代わりになるのですが、SDカードを大きなものを使いさえすればPCで大きなディスクを使ったのと同じように大きなストレージとして使えるのでしょうか? 答えはノー。正解は、フラッシュ時のイメージのサイズにしかならない、です。イメージとして4GBに作られている場合、SDが32GBでもディスクドライブとして見てみると4GBになってしまっているわけです。では、32GBのフルフルで使いたいならどうするのでしょうか? これが今回のテーマです。
やり方としては、2通りあります。イメージそのものを32GBに拡張させたものを作り、それをフラッシュする。もう1つは、SDのドライブに対してパーティション変更を行うことです。最初のやり方はあまりスマートではありません。イメージファイルが巨大になる上、PCでいうなら、「全領域がC:ドライブ」になってしまうようなものです。
それでは、CuBox-iの場合で実際にやってみることにしましょう。元ネタは
http://imx.solid-run.com/wiki/index.php?title=Flash_an_image
にあります。オリジナルのページでは説明が不足していて、作業のトレースが困難なのでここで一歩ずつ検証しながらキーボードをすすめていきましょう。
まず、Windows PCの例を実際に検証していきましょう。
4GB用のイメージファイルを、Win32DiskImageを使ってSDにフラッシュします。(フラッシュには時間がかかります。「write successful」が出たら、ここで一旦CuBox-i本体に挿して動作することを確認しましょう、あとで不具合があったときに、どこで失敗したのかわからなくなります。AndroidならSetting -> Storageで容量を見ておきます)
CuBox-iで動かすOSはほぼすべてLinuxベースです。OSがLinuxなので、WindowsPCではSDのドライブの情報を直接操作することはできません。なので、Windowsマシン内に仮想マシンを構築してLinux環境を作り、そのLinux仮想マシン上で操作をするという面倒なステップを踏まなくてはなりません。まずは色々と必要になるツール群の準備からです。
GParted LIVE CDは、ディスクのフォーマットやパーティションを作るようなツールです。ハードディスクを操作することが想定されるので、CD/DVDに焼いてそこから立ち上げて、ハードディスクの操作を行えるようになっているツールです。VirtualBoxは、仮想環境を作るツールで、ウィンドウ内に他のOSを走らせるツールです。ここでは、仮想マシンを作ってその中でパーティション操作の作業することを想定しています。(GParted LIVE CDを実際のCDに焼き、できたCDからマシンを立ち上げると、CD上のLinux環境アプリケーションが立ち上がり、パーティション編集が可能になります。仮想環境を作るのが面倒であればGParted LIVE CDでの作業にすることも選択肢となり得ます。)
それぞれのダウンロードができたら、PCにSDカードを挿します。(マイクロSDのスロットがない場合にはSDカードアダプタを使うか、USB変換器を使います)
これから先の操作はPCのコマンドツールから行います。その際、Windows7では管理者権限でアプリを立ち上げる必要があります。(普通にログインしたアカウントでアプリケーションを使うと、アクセス制限がかかってエラーとなってしまいます)アプリのアイコンを右クリックして、「管理者として実行(A)」を選びます。
コマンドツールが立ち上がったら最初に
C:\Users\>wmic diskdrive list brief
を実行します。これは、挿したSDカードがどのように認識されているかを確かめるためのものです。以下のような表示がでます。PCに光学ドライブやUSBディスクなど他のものがあるとそれらも表示されます。下の例では、PHYSICALDRIVE1にマイクロSDが割当たっているということです。他のドライブがあるとPHYSICALDRIVE2とか3とかになっていることもあります。
C:\Users\>wmic diskdrive list brief
Caption DeviceID Model
Partitions Size
WDC WD7500BPKT-75PK4T0 \\.\PHYSICALDRIVE0 WDC WD7500BPKT-75PK4T0 3 750153761280
O2Micro SD SCSI Disk Device \\.\PHYSICALDRIVE1 O2Micro SD SCSI Disk Device 1 3964584960
次に、.vmdkというファイルを作成しますが、これは、VirtualboxにSDカードのドライブがどこにどのようにあるかを設定するために使われる情報です。コマンドは、次のようになります。”PHYSICALDRIVE1”の部分は上記のものを参照します。すると、デスクトップにsdcard.vmdkというファイルが作られます。wmic コマンドを発行すた時にSDドライブに割り当てられたナンバーを使います。自分のPCの環境次第で変わるので「コピペ」で失敗しないように気をつけましょう。
C:\Program Files\Oracle\VirtualBox\VBoxManage internalcommands createrawvmdk -filename "%HOMEPATH%/Desktop/sdcard.vmdk" -rawdisk "\\.\PHYSICALDRIVE1"
次にVirtualBpxを立ち上げ(このときにも「管理者として実行(A)」です)、sdcard.vmdk をマウントします。新規仮想マシンを作り、「すでにある仮想ハードドライブファイルを使用する」から、デスクトップに置いたsdcard.vmdkを選びます。
次に「設定」メニューから「ストレージ」を選び、IDEディスクとして、GPartedを選びます。以上で設定が終わったらGPartedを起動します。
SDカード上のパーティションの編集をします。今回の場合、「未割り当て」になっていますね。ここを割り当てるといいわけです。この残りを一つのパーティションに当ててもよし、パーティションを新たに作って違うドライブに割り当ててもよし。
最後に、「適用」をするとSDカードドライブのパーティション変更が実際に実行されます。これで終了です。お疲れさまです。
Androidの場合であればSetting -> Storage を選ぶと、Total space が大きくなっていることが確かめられます。
次にLinuxでの例を実際に検証していきましょう。
まずはフラッシュまで。ダウンロードしたimg.xzをtar解凍。
tar -xJf <image name>.img.xz
続いてunxz解凍して.imgを作成。
unxz <image name>.img.xz
ls -lh *.img
としてファイルを確認します。以下のような表示になります。
-rw-r--r-- 1 user group 2.0G Jan 25 15:33 <image name>.img
この例では2GBと見えてます。するとSDは最低限2GBないと書き込めません。
SDカードを挿します。まずは、
mount
コマンドでどこにどのようにマウントされるかを確かめます。
/dev/mmcblk0p1 とかr /dev/sdb1 のように表示されますね。これが ”mount point” です。
一旦アンマウントします。
umount <mount point>
これらの操作でパーミッションのエラーがでるようであれば、sudo で実行してください。
フラッシュはddコマンドで行います。
前のステップで、mount point が/dev/sdb1 だったとすると、ここでは、/dev/sdb のように指定します。
dd bs=4k conv=fsync if=<image name>.img of=/dev/sdb
エンターキーを押す前に、もう一度確認しましょう。ハードディスクに簡単に上書きできてしまうコマンドです。間違えると一瞬にPCが飛びます。ひと呼吸おきます。もう一度確認してから実行します。プログレスバーのような表示は出ません。フラッシュにはかなり時間がかかります。すぐに終わらないからといって慌てないようにしましょう。
ストレージ容量の確認をしたら、SDをPCに挿しなおしてパーティションの変更をします。
GPartedを未インストールならインストールして実行します。管理者権限が必要です。
Gpartedを使って行う実際の内容は、Windowsの仮想PC上でGpartedを起動させてからやったことと同じです。
GParted LIVE CDを作成して、CDからマシンを立ち上げるというやり方でももちろんOKです。パーティションの編集操作は同じことです。
なお、MacではGParted LIVE CDで起動する方法は使えません。また、「ディスクユーティリティ」を使っても「このディスクのパーティションは、マスター・ブート・レコード方式のためサイズを変更できません」というメッセージで編集ができません。
以上、SDカードに作ったドライブをSDの容量いっぱいにするために、ドライブのパーティション編集をして行える方法の解説をしました。