daemonfreaks.com

ハイパーバイザ型仮想化ソフト事始め その5 FreeBSDでXen/DomU構築編

posted by jun-g at Mon, 09 May 2011 01:05 JST

前回の続き

Dom0とRAIDの構築はできたのでいよいよゲストOSのインストール。手始めにFreeBSD/amd64をインストール。FreeBSDは完全仮想化に対応しているので、環境さえ作ってしまえば普通にインストール・起動できる。

ブリッジネットワークの設定

前回の書き漏れ。VM用にブリッジネットワークを構成する。

# cat /etc/ifconfig.bridge0
create
!brconfig bridge0 add msk0 up

このファイルを用意しておけば起動時に自動的にブリッジネットワークが構成されるようになる。「msk0」が物理ネットワークインターフェースの名前。

HDDイメージの作成

ゲストOSをインストールするHDDイメージの作成。

# dd if=/dev/zero of=/pub/freebsd.img bs=1k count=10M

これで10GBのHDDイメージが出来る。

あと、FreeBSDのインストールCDイメージもダウンロードして同ディレクトリに配置しておく。

DomUの設定

次に設定ファイルの作成。Xenの設定ファイルはpythonで記述するみたい。最初DomU起動時にコンソールに接続できないエラーが出たりしてハマったが、調べてみるとどうもFreeBSDはコンソール接続にまだ対応できていない?ようなのでVNCを使うように設定。Xen/DomUのVNC設定については以下のページが参考になった。

XenのDomUのコンソールを他のPCからVNCで見る方法 - tea2kaのそのひぐらし

設定ファイルは以下のように記述した。

# cat /pub/xen_domu_freebsd
kernel = "/usr/pkg/lib/xen/boot/hvmloader"
builder = "hvm"
memory = 512
name = "fbsd_amd64"
vif = ["mac=12:34:56:78:90:ab,bridge=bridge0"]
device_model = "/usr/pkg/libexec/qemu-dm"
disk = ["file:/pub/freebsd.img,hda,w", "file:/pub/FreeBSD-8.2-RELEASE-amd64-bootonly.iso,hdc:cdrom,r"]
boot = "d"
vnc=1
vnclisten="0.0.0.0"
vncunused=0
vncdisplay=0
vncpasswd=""

設定ファイルが準備できたらDomU起動。

# xm create -c /pub/xen_domu_freebsd

相変わらず

xenconsole: Could not read tty from store: No such file or directory

というエラーメッセージが出るが無事に起動しているので、VNCクライアントをインストールした他のPCから接続する。

$ vncviewer xenserver

xenserverってのはDom0のホスト名ね。VNCクライアントの画面が開くとFreeBSDのインストーラが起動している状態になる。後は普通にインストールするだけ。

インストールが終わったら設定ファイルの「disk」の項目からインストールイメージの記述を削除し、「boot」の行も削除しておく。


以上でFreeBSDをDomUにインストールすることが出来た。後は物理PCにインストールした際と同様に環境を構築していくだけ。

今回はFreeBSD/amd64をインストールしたが、FreeBSD/i386だと準仮想化にも対応しているようなので、こちらもいずれ試してみたい。

…しかし、現状のNetBSD/Dom0ではオンボードLANが使えないことやXen4.1がまだ使えない等の不満が残っている。そして、Windowsが必要という点は少し嫌だがGUIクライアントから簡単にVMを作成・操作できる点はやはりXenServerが便利だと感じた。

で、再度XenServerで環境構築し直すことにした。RAIDの問題はオンボードRAIDの機能を使えば解決しそう。あとディスク容量をもう少し確保したいのでRAID10じゃなくてRAID5にしたい。

仮想環境構築の旅はまだまだ続く…。

終わり。

ハイパーバイザ型仮想化ソフト事始め その4 NetBSDでXen/Dom0とRAID構築編

posted by jun-g at Sun, 08 May 2011 14:42 JST

前回の続き

NetBSDのインストール

まずはNetBSD 5.1/amd64をインストール。普通にインストールCDから起動してインストール先をUSBメモリにしてインストールするだけで完了。

…とはいかず。ML110 G6のオンボードLANがNetBSDで認識されなかった。VM用にPlanexのLANアダプタを増設してあってそちらは認識されたので無事インストールできた。

PLANEX PCI-EX 1000BASE-T LANアダプタ  GPE-1000T

PLANEX PCI-EX 1000BASE-T LANアダプタ GPE-1000T

インストール後、USBから問題なくブートする事を確認。NetBSDを初めて触ったのでFreeBSDとの違いにやや戸惑う。cvsupすら無いのか。でもって最新のpkgsrcをcvsからcheckoutして下準備。USBメモリの書込速度が遅いことも手伝ってめちゃくちゃ時間がかかった。

Dom0の構築

4月上旬に最新のXen4.1がpkgsrcに登録されたことを知り早速インストールしようとしたが、pkgsrcのMakefileを見るとNetBSD-currentでしか使えないみたいだった。残念。

というわけで、pkgsrcに登録されている一つ前のバージョンであるXen3.3を使う事にした。インストールおよびセットアップは以下のページを参考にした。

NetBSD/xen環境の構築 64bit編

Xenのインストール及び設定が完了し、無事Dom0が起動していることが確認できた。

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   512     1     r-----     10.3

RAID10の構築

続いてRAID10の構築。 NetBSDでは標準で RAIDframe という機能が搭載されていて、これを使ってRAIDを構築する。

FreeBSDでRAID10を構築した際はgmirrorでRAID1アレイを複数作成し、それらをgstripeでRAID0に束ねるという方法を使ったが、NetBSDでも同様の方法で構築する、とraidctl(8)のマニュアルに書いてあったのでその通りにする。RAID構築にあたっては下記のページを参考にした。

Raidframe: ソフトウエア RAID 1 の設定例

まずはRAID1でraid0とraid1(ややこしいがそれぞれデバイス名)の設定ファイルを作成。

# cat /etc/raid0.conf
START array
1 2 0

START disks
/dev/wd0e
/dev/wd1e

START layout
128 1 1 1

START queue
fifo 100

# cat /etc/raid1.conf
START array
1 2 0

START disks
/dev/wd2e
/dev/wd3e

START layout
128 1 1 1

START queue
fifo 100

次に実際にRAID1アレイを構築して初期化。

# raidctl -C /etc/raid0.conf raid0
# raidctl -I 0 raid0
# raidctl -iv raid0
# raidctl -C /etc/raid1.conf raid1
# raidctl -I 1 raid1
# raidctl -iv raid1

でもってdisklabelを設定してnewfsして使えるようにする。disklabelはこんな感じ。

# disklabel raid0
# /dev/rraid0d:
type: RAID
disk: raid
label: fictitious
flags:
bytes/sector: 512
sectors/track: 128
tracks/cylinder: 8
sectors/cylinder: 1024
cylinders: 1907739
total sectors: 1953524992
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0

4 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a: 1953524992         0     4.2BSD      0     0     0  # (Cyl.      0 - 1907739*)
 d: 1953524992         0     unused      0     0        # (Cyl.      0 - 1907739*)

raid1のdisklabelも同じ内容。続いてRAID0の構築。raid0とraid1を束ねる。

# cat /etc/raid2.conf
START array
1 2 0

START disks
/dev/raid0a
/dev/raid1a

START layout
128 1 1 0

START queue
fifo 100

# raidctl -C /etc/raid2.conf raid2
# raidctl -I 2 raid2
# raidctl -iv raid2

あとは同じようにdisklabelを書きこんでnewfsして完了。マウントしてファイルの読み書きが出来ることを確認。

しかし再起動してみるとraid2が認識されない。どうもautoconfigというモードを有効にしないといけないらしいのでautoconfigを有効にする。

# raidctl -A raid0
# raidctl -A raid1
# raidctl -A raid2

raid0とraid1はしなくても良かったのかもしれないが念の為。これで再起動しても自動的にraid2が認識されるようになったので、/etc/fstabにマウントの設定を追加して作業完了。

# echo '/dev/raid2a /pub ffs rw 1 2' >> /etc/fstab

続く。