0

結構前にですがVirtualBoxを使ってFreeBSD上でFreeNASを仮想化して動かせたので紹介したいと思います。
といっても以下参考リンクからの操作方法のままなので、自分の環境で起こった問題なども交えて解説したいと思います。

なぜ仮想化するのか

公開しているサーバのHDDが1TBなので、Webサーバかつdbとして使っていても容量が有効活用出来ていませんでした。さらにタイの洪水の影響でHDDの価格が高騰したため、サーバにファイルサーバ機能を持たせようとストレージに特化したOS「FreeNAS」を仮想化で導入を検討。
SambaというWindows互換のファイルサーバソフトもあるのですが、仮想化してvdi形式だとFreeBSD側ではファイルを直接見られないので万が一の時にセキュリティ的には良いかなと思ったのと、FreeNASは前に使った事があるので導入しやすかったのも理由です。導入前は仮想化した時のI/Oの速度がSambaとどの程度違うのか検証したかった事もあったので、最終的にはSambaとの速度比較も紹介したいと思います。
比較記事:【FreeBSD】Sambaでファイルサーバを構築【NAS】

今回の仮想化は動かすOSがFreeNASでなくてもWindowsやUbuntuなどのOSでももちろん利用できるので、それぞれ目的に合わせた感じに参考になればなと思います。

まずはインストール

早速VirtualBoxをインストールしましょう。portsが最新の状態で
cd /usr/ports/emulators/virtualbox-ose
make install clean

virtualbox-oseとなっているのはVirtualBox Open Source Editionの略から。
インストールを行おうとするとインストール内容が聞かれるのでQT4とX11はGUI関係なのでチェックをはずし、VNCにチェックを入れましょう。VNCは仮想化して動かす際に利用するので必ずチェックを入れましょう。
私はなぜかOSが立ち上がればSSHで接続できるじゃん~と考えていたのでチェック入れずにインストールしてしまったため再インストールするはめに。サーバ起動と同時にsshサービスは動かないというのにVNCは入れないと変な意地で悪戦苦闘。何やってんだ俺..。
また自分の環境ではlibpcreのバージョンが低いためエラーを吐いてインストール失敗。PCREはperl互換の正規表現をC言語で実装したライブラリで、以前PHPを導入したときに一緒に組み込まれていたらしくバージョンをあげる必要がありました。PCREは

cd /usr/ports/devel/pcre
make install clean
と最新のバージョンをインストールすればこのエラーを回避できました。

下準備

インストールが完了したら以下の設定を行います。ブリッジ接続の前提で構築します。
vi /boot/loader.conf
vboxdrv_load="YES"

vi /etc/rc.conf
vboxnet_enable="YES"

#VBoxを動かすvboxというユーザを新たに作成、グループはvboxusersとする。
adduser vbox

cd /dev/vboxnetctl
chown root:vboxusers /dev/vboxnetclt
chmod 0660 /dev/vboxnetctl

vi /etc/devfs.conf
own vboxnetctl root:vboxusers
perm vboxnetctl 0660

reboot
参考
http://wiki.freebsd.org/VirtualBox
http://gihyo.jp/admin/clip/01/fdt/201106/03

VMの作成

ここからが大変。apacheのCUIでの設定は良いなと思ったのですが、VirtualBoxのCUI設定はかなり疲れる。
これらの操作はユーザ「vbox」で実行しましょう。またホームディレクトリにvdiとisoとディレクトリを作っておくと管理し易いと思います。予めFreeNASのisoはfetchして~/isoにFreeNAS.isoとある事にします。

cd ~

VBoxManage createvm -name FreeNAS -register
VBoxManage modifyvm FreeNAS --memory 256 --cpus 2
#CPUが二つ以上の場合はioapicをonにする。
VBoxManage modifyvm FreeNAS --acpi on --ioapic on
#em0はLAN番号。ifconfigで確認し各自設定してください。
VBoxManage modifyvm FreeNAS --nic1 bridged --bridgeadapter1 em0 --nictype1 82540EM --cableconnected1 on
VBoxManage modifyvm FreeNAS --boot1 dvd

#FreeNASはインストール用hddをストレージとして使えないのでboot用とストレージ用二つを用意しています。
cd ~/vdi
VBoxManage createhd --filename FreeNAS-boot.vdi --size 2000 --variant Standard
VBoxManage createhd --filename FreeNAS-hdd1.vdi --size 500000 --variant Standard
VBoxManage storagectl FreeNAS --name sata --add sata --controller IntelAHCI
VBoxManage storagectl FreeNAS --name ide --add ide --controller ICH6
#ポートは接続するhddの数、デバイスはコントローラーの番号。
VBoxManage storageattach FreeNAS --storagectl sata --port 0 --device 0 --type hdd --medium ~/vdi/FreeNAS-boot.vdi
VBoxManage storageattach FreeNAS --storagectl sata --port 1 --device 0 --type hdd --medium ~/vdi/FreeNAS-hdd1.vdi
VBoxManage storageattach FreeNAS --storagectl ide --port 0 --device 0 --type dvddrive --medium ~/iso/FreeNAS.iso

#以上の設定を確認
VBoxManage showvminfo FreeNAS

#ヘッドレスでVBox起動。ctrl+Cで終了します。
VBoxHeadless --startvm FreeNAS --vnc --vncport 5900 --vncpass hogehoge
私はUltraVNCをインストールして設定したポート番号に接続、FreeNASをHDDにインストールしました。
#dvdからhddに起動デバイスを変更。
VBoxManage modifyvm FreeNAS --boot1 disk
#startvmでtypeをheadlessとするとコマンドが実行できる状態になります。
VBoxManage startvm FreeNAS --type headless

#起動しているVMのシャットダウン。
VBoxManage controlvm FreeNAS poweroff
参考
http://www.ebug.jp/pub/docs/20110521/VirtualBox.pdf
http://vboxmania.net/node/38
http://virtual-soft1.nnn2.com/?p=10
http://blog.goo.ne.jp/j_adversaria/e/a456d0dea21613d93aa9e47518af5e0f

正直VBoxManageのコマンドはかなり多く、引数指定無しで実行すると一覧が出ますのでそれを参考に検索をかけると良いと思います。日本語マニュアルはなかったかな~

応用

ブリッジ接続ではローカル内のIPアドレスを消費します。同じIPアドレスで特定のポート番号に接続してVMを使いたい場合NAT接続が有効です。他にもホストOSとゲストOSだけと接続するホストオンリーアダプタ、ゲストOS間だけ接続する内部ネットワークなどがあります。NAT接続でポートフォワードするにはsetextradataで設定、getextradataで確認できます。

参考
http://d.hatena.ne.jp/m-ichii/20110508/1304851497
http://d.hatena.ne.jp/takuya_1st/20100425/1272221485
http://d.hatena.ne.jp/masaking/20080823/1219501272

速度結果

Windows 8 DPで約1GBのファイル移動で100Mbpsのハブを介して大体10MB/s、1Gbpsのハブを介しても大体10MB/sになりました。bps換算すると80Mbpsですね。Sambaを使った場合はギガハブで速度向上が見られたのでI/Oの限界だと思います。Intel VT-xとかが必要かな。
参考までにCrystalDiskMark(左が100Mbpsのハブで計測したFreeNAS、右がギガハブで計測したFreeNAS)
正直時間かかりすぎてランダムアクセス全部とか見る気がしなかったw
vboxvbox1g













ギガハブを購入したためSambaを導入する事にしました。100Mbpsのハブだったら結構仮想化しててもいけるんじゃないでしょうか。
でもNASサーバ立てるならギガハブは導入すべきですね!
NETGEAR GS108v3 8ポート ギガビットスイッチングハブ (省電力製品) GS108-300JPS (本体ライフタイム保証)
NETGEAR GS108v3 8ポート ギガビットスイッチングハブ