KVMはじめた。

スイッチの方じゃなくて、VM動かす方のKVM(Kernel Based Machine)を最近、常用しはじめた。

インストール

ホストになっているPCのスペック

という感じ。まな板(DC-ACPCD/R)で組んで、むき出しで足下にとりあえず放置。

ホストのOSは、使い慣れたGentooを入れる。
CD-ROMドライブとかついとらんので、このへんのドキュメントでかかれているようなUSBメモリとかでブートして入れる。Ubuntuとか、KNOPPIXで起動してインストールもGentooは簡単なのが好き。

んで、カーネルはとりあえず新しいのをもってきます。RCまではがんばりましょう。今だと、2.6.27-rc8。

  • KVM関連を有効にする
  • TIMER関係は、virtioの性能向上のために、高精度、高頻度にしとくのが吉らしい

くらいで。

で、KVM-80がリリースされているので、それをKVM本家から持ってくる。
でも、KVMのBlogとかにもかいてるけど、virtio_netがこのリリースではうまく動かんので、ちょっとだけパッチ当てる。
パッチは、ここを参照。
offsetを0で初期化するの忘れてたーってやつらしい。

ゲストのインストール - Gentoo

とりあえず、クロスコンパイルとかやる作業用ゲストを一個作る。
手順は、:

  • ディスクイメージ作成(qemu-img create -f qcow2 gentoo.img 60GB)
  • インストール用ISOイメージもってくる
  • 起動

という感じ。
起動時のオプションは、Gentooのインストールイメージとかだとkernelがそんなに新しくなくて、virtio関連のドライバが入ってないので、とりあえず、ディスクはide,ネットは、e1000で起動する。以下みたいな感じ。

~/kvm/bin/qemu-system-x86_64 \
  -m 2048m -monitor stdio -curses -vnc :1 \
  -vga std \
  -soundhw ac97 \
  -localtime -k ja \
  -net nic,vlan=0,model=e1000,macaddr=52:54:00:12:34:51 \
  -net tap,vlan=0,ifname=qtap1,script=no \
  -drive file=hdd_image/gentoo.img,if=ide,boot=on
  -cdrom install_image/install-x86-minimal-2008.0.iso -boot d

あ、ちなみに、ネットワーク設定は、ブリッジbr0をつくって、eth0,qtap1がaddifされていることが前提です。

これ以降は、また、普通のインストールをすればOK。

virtio関連を有効にする

vrtioっていうのは、ディスクやNICの準仮想化の仕組みです。
まあ、たいていの場合、はやくなります。ただし、ゲスト側にドライバ必要です。

なんで、とりあえず、virtioを有効にせず、インストールをして、それから設定変更という手順を踏みます。
ちなみに、Ubuntuとかだと、2.6.25以降のインストーラだったりして、そのままインストールできます。

設定変更箇所は、たぶん以下。

  • /etc/fstabの/dev/hda*を/dev/vda*に変更する
  • /boot/grub/device.mapの(hd0, 0)を/dev/vdaに変更する
  • /boot/grub/menu.listのroot=を/dev/vda*に変更する

これくらいやっておけば、ディスクは認識されて起動するはず。
ネットワークは、virtio_netをちゃんとロードすれば、eth0として認識される。

これは、virtio_netに関しては、Windows版ドライバも提供されていて、Windowsでも動きます。

Windows XPのインストール

グラフィック系は、vmwareを指定してみたのですが、ドライバうまく入らず。結局、デフォルトのcirrusを指定してます。
まあ、リモートデスクトップ経由なら、問題ない動き。

インストール自体は、まったく問題なく終わりました。
パフォーマンスの問題もありそうだったので、nLiteでがりがり削りまくったバージョンですが。

まとめ

これで、WindowsGentooが動く状態になりました。基本的に、起動しっぱなしで試してます。
snapshotを使ってシステム破壊も何回かためしましたが、ちゃんとうごきました。
つぎは、ライブマイグレーションかなぁ。