2010年9月アーカイブ
2010年9月15日
CentOS 5.5 へ kvm を導入-その3
VM のインストールが終わって、ある程度環境を作ったらせっかくなのでスナップショットを作っておくことにする。
ちなみに、CentoS には qemu-img コマンドは2種類ある。qemu パッケージに入っている qemu-img コマンドではスナップショットを作ったりできない。また、後述する CoW (Copy on Write) 用のイメージ作ろうとするとイメージが壊れた。必ず kvm-qemu-img パッケージの qemu-img コマンドを使おう。
こういう混乱を避けるためにも他のディストリビューションでは kvm-qemu-img の qemu-img コマンドを kvm-img コマンドとしてるみたい。
まずは、シンプルにディスクイメージに対してスナップショットを作ってみる。
# qemu-img snapshot -c 20100915#1 Windows_XP.img
スナップショットの確認。
# qemu-img snapshot -l Windows_XP.img
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 20100915#1 0 2010-09-15 09:12:50 00:00:00.000
スナップショットに書き戻す場合は以下の用に通り。
# qemu-img snapshot -a 20100915#1 Windows_XP.img
スナップショットを削除するには以下の通り。
# qemu-img snapshot -d 20100915#1 Windows_XP.img
さて、問題なくスナップショットが取れたのはいいけどスナップショットを作るのも、戻すのもかなり時間がかかる。それぞれ、15分以上待たされた。
それじゃあということで、CoW (Copy on Write) によるスナップショットを試すことに。
CoW (Copy on Write) はマスターのディスクイメージは読み込み専用になり、そのディスクイメージへの書き込みは別の差分ファイルに対して行われるというもの。
差分ディスクイメージを用意してあげれば、マスターディスクイメージに手を加えず、ディスクイメージへの変更は、差分ディスクイメージファイルに対して行われるようになる。
差分ディスクイメージを指定して起動すれば、変更は差分ディスクに記録されてマスターイメージを指定して起動すれば、すぐに戻れるという寸法。
複数のスナップショットを取りたい場合には向かないが、こちらの方が自分の使い方には向いている気がする。
差分ディスクイメージは qemu-img で作る。
# qemu-img create -b Windows_XP.img -f qcow2 Windows_XP.diff.img
/etc/libvirt/qemu/Windows_XP.xml の ブートディスクのパスを差分ディスクイメージに書き換える。
<source file="/var/lib/libvirt/images/Windows_XP.diff.img">
設定反映させればおしまい。
# virsh define /etc/libvirt/qemu/Windows_XP.xml
差分をマスターディスクにマージするには、以下のようにする。
qemu-img commit -f qcow2 Windows_XP.diff.img
しばらくコレで運用してみようと思います。
CentOS 5.5 へ kvm を導入-その2
ブリッジ接続している eth0 が 100baseTx になっているのは、とりあえずおいといてバーチャルマシンを作ることにする。
virt-manager で VM を作ると、ディスクのフォーマットが raw 形式になる。raw 形式のイメージは取り回しも便利でいいのだけど、qcow2 形式のディスクイメージの方がディスクの圧縮されるし、スナップショットが使えたりと便利。
なので、あらかじめ qcow2 形式のイメージを用意しておくか、virt-manager で VM 作成した後に変換しておく。
あらかじめ作っておく場合ならこんな感じで。
# qemu-img create -f qcow2 Windows_XP.img 32G
あとから変換するなら、こんな感じ。
# mv Windows_XP.img Windows_XP.img.tmp
# qemu-img convert Windows_XP.img.tmp -O qcow Windows_XP.img # rm Windows_XP.img.tmp
あとは、virt-manager で VM に OS のインストールなど実施。インストールが終わったら外部から VNC で接続できるように設定を変更。/etc/libvirt/qemu/Windows_XP.xml の graphics セクションを
<graphics type='vnc' port='-1' autoport='auto' listen='127.0.0.1' keymap='ja'/>
以下のように書き換える。
<graphics type='vnc' port='5950' autoport='no' listen='0.0.0.0' keymap='en-us'/>
これで、外部からホストOSの 5950番ポートへ VNC で接続すると VM が見れる。ウチはUSキーボードなのでキーマップも en-us へ書き換えておいた。xml を書き換えたら virsh define で設定を反映させる。
# virsh define /etc/libvirt/qemu/Windows_XP.xml
VNC クライアントから接続するときの注意として、VNC クライアントの Encoding で Hextile を使わないこと。ウチの環境では Encoding に Hextile の指定があると画面ぐちゃぐちゃ。VNC クライアントも落ちたりした。
CentOS 5.5 へ kvm を導入-その1
VMware Server が色々とアレで先がないことがわかってきたので、どうしようか悩んだ結果知人の勧めもあって、kvm を本格的に導入し始めるコトにした。
まず、前提条件として現在 VMware Server 1.x で VM がいくつか稼働しているがこれらはマイグレーションせずに全部破棄。ただ、すぐには止められないので VMware Server 稼働したまま kvm をインストールしてみた。結果共存可能だった。
まぁ、まずはお約束の yum で必要なものをインストール。
# yum install install kvm kmod-kvm kvm-qemu-img libvirt virt-manager
<略>
# modprobe kvm
# modprobe kvm_amd
# lsmod | grep kvm
kvm_amd 69416 1
kvm 226336 2 ksm,kvm_amd
これでまずは OK。ブリッジインターフェイスを作る。まずは、既存の eth0 をベースにするので、eth0 を br0 としてコピー。
# cd /etc/sysconfig/network-scripts
# cp ifcfg-eth0 ifcfg-br0
ifcfg-br0 を編集して、DEVICE= br0 に変更。TYPE=Bridge を追記。
次に、ifcfg-eth0 を編集して必要ない項目を削除して、ブリッジへ接続する。
DEVICE=eth0
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes
BRIDGE=br0
ここらへんちょっとわかってないので、後日ちゃんと調べようと思う。
# /etc/init.d/network restart
ネットワークを再起動して、ifconfig してちゃんと動いているか確認したらオッケー。
最後に次にホストOSで自分以外のパケットも受け取るためにeth0をpromiscモードに設定する。
# ifconfig eth0 promisc
これで、OKのはず。なのだけど、ちょっと気になって eth0 のネゴシエーションされたリンク速度とリンク状態が気になったので確認してみた。
# mii-tool
eth0: negotiated 100baseTx-FD flow-control, link ok
100baseTx になってるぞ?あれ?
ちゃんと確認したところ、1000baseTX になっていました。
mii-tool は古いコマンドなので、ギガビットなNICに対応してないそうだ。