Mon, 09 May 2011

ハイパーバイザ型仮想化ソフト事始め その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にしたい。

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

終わり。

Thu, 31 Dec 2009

2009年send-prまとめ

posted by jun-g at Thu, 31 Dec 2009 13:59 JST

何か回数多いなと思ったら、いくつかのメンテナ不在のportsメンテナに立候補したからか。

  • ports/130196
  • ports/130790
  • ports/131443
  • ports/131608
  • ports/131691
  • ports/131712
  • ports/131736
  • ports/131737
  • ports/132210
  • ports/132211
  • ports/132308
  • ports/132609
  • ports/133463
  • ports/134259
  • ports/134339
  • ports/135560
  • ports/137995
  • ports/138403
  • ports/138287
  • ports/138843
  • ports/139190
  • ports/139759
  • ports/142021

来年もぼちぼちやる。

Wed, 15 Oct 2008

gmirrorの復旧

posted by jun-g at Wed, 15 Oct 2008 21:00 JST

以前gmirror+gstripeで構築したRAID環境で、HDDのひとつがうまく認識されなくなる、という問題が発生しました。再起動すると認識されたりされなかったりと、かなり不安定な感じだったので、HDDを交換する事にしました。

まずは現状把握。

# gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ad2
                      ad3
mirror/gm1  DEGRADED  ad4
mirror/gm2  COMPLETE  ad6
                      ad7

ad5がいない。/devの下を確認してもいないので、HDD自体が認識されていない様子。

一旦マシンを停止してHDDを交換し、マシンを再度起動して、交換したHDDがad5で認識されている事を確認し、次のコマンドを実行。

# gmirror forget gm1

これでgm1のDEGRADED状態がクリアされる。

# gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ad2
                      ad3
mirror/gm1  COMPLETE  ad4
mirror/gm2  COMPLETE  ad6
                      ad7

でもって交換したad5をgm1に追加。

# gmirror insert -v gm1 ad5

すると、自動的にミラーリングのリビルドが開始され、しばらく待つとリビルドが完了し、無事gm1が復旧しました。簡単。

以下、参考にしたサイト。

Mon, 30 Jun 2008

上半期send-prまとめ

posted by jun-g at Mon, 30 Jun 2008 01:08 JST

今年も半分終わった(早!!)ので、上半期にsend-pr(1)した内容を振り返る。

自分がメンテナじゃないportsのパッチも書くようになったのは良い傾向かな。簡単なものしか作れないのは相変わらずやけど。

無ければ作る、古ければパッチ書く、という方針で下半期もがんばろう。

Wed, 07 May 2008

GEOMでRAID構築

posted by jun-g at Wed, 07 May 2008 00:04 JST

手元にHDDが沢山余っていたので、FreeBSD-7Rで構築した自宅のファイルサーバにRAIDを構築してみました。

最初、ストライプしてからミラーするべきか、ミラーしてからストライプするべきか、という素朴な疑問で悩んだのですが、RAID01とRAID10の違い:佐野裕のサーバ管理者日記:ITproという記事を読んで、RAID01とRAID10は別モノで、ストライピンググループをミラーしたRAID01よりも、ミラーしたグループをストライピングしたRAID10のほうが可用性が上である、ということがわかったので、RAID10を構築することにしました。

HDDの構成は、マザーボード上のATAセカンダリに160GBx2、増設ATAカードに120GBx4で、デバイス名はそれぞれad2~7になりました。

まずはgmirrorでRAID1のグループを3つ作ります。

# gmirror label gm0 /dev/ad2 /dev/ad3
# gmirror label gm1 /dev/ad4 /dev/ad5
# gmirror label gm2 /dev/ad6 /dev/ad7

問題なく構築できているか確認。

# gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ad2
                      ad3
mirror/gm1  COMPLETE  ad4
                      ad5
mirror/gm2  COMPLETE  ad6
                      ad7

問題なくできているようです。次にこのRAID1アレイを束ねてgstripeでRAID0を構築します。

# gstripe create -s 131072 gs0 mirror/gm0 mirror/gm1 mirror/gm2

問題なく構築できた?

# gstripe status
      Name  Status  Components
stripe/gs0      UP  mirror/gm0
                    mirror/gm1
                    mirror/gm2

問題なし!newfsしてマウントします。

# newfs /dev/stripe/gs0
...snip...
# mount /dev/stripe/gs0 /mnt
# df -h /mnt
Filesystem         Size    Used   Avail Capacity  Mounted on
/dev/stripe/gs0    334G    4.0K    333G     0%    /mnt

できた!160+120+120=400GBなのに334GBになっているけど、細かいことは気にしません。

ということで、無事RAID環境が構築できました。この環境なら突然HDDが1本死んでも大丈夫だし、RAID10なので単純なRAID1よりもパフォーマンスも良いはず(ベンチマークは取っていませんが…)。手元に予備の160/120GBのHDDもあるので安心です。ただ、6本もHDDを使っていながらたった334GBしか容量が確保できてないというのが、電気の無駄遣いに感じてしまいますが…。最近HDD安いですもんね。

以下、今回参考にしたサイト。

Page 0 of 6  >>