Virtualizationの最近のブログ記事

2010年11月 4日

CentOS 5.5 へ kvm を導入-その4

CentOS 5.5 へ kvm を導入-その1 で、ブリッジインターフェイスをつくって eth0 のリンクアップを mii-tool で確認すると 100baseTx になっていた件。

ハブのリンクアップランプはちゃんと 1000baseTx になっている。おや?と思い ethtool で確認してみた。

# ethtool eth0
Settings for eth0:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Half 1000baseT/Full 
	Supports auto-negotiation: Yes
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Half 1000baseT/Full 
	Advertised auto-negotiation: Yes
	Speed: 1000Mb/s
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 1
	Transceiver: internal
	Auto-negotiation: on
	Supports Wake-on: g
	Wake-on: g
	Current message level: 0x000000ff (255)
	Link detected: yes

ちゃんと、Speed: 1000Mb/s となっていた。mii-tool で確認したのがまずかった。
mii-tool は古いコマンドなので、ギガビットなNICに対応してないそうだ。

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に対応してないそうだ。

カテゴリ

このアーカイブについて

このページには、過去に書かれたブログ記事のうちVirtualizationカテゴリに属しているものが含まれています。

前のカテゴリはLinuxです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。