KVMで仮想マシンを作成してみた
September 24, 2010 – 5:55 pm最近、仮想化技術、特にKVM(Kernel based Virtual Machine)の話題をよく目にするようになった。これを使えば、1台のPCで、複数の異なるOSを試してみることができそうだ。ということで、10日前にインストールしたCentOS5.5(64bit)(インストールのいきさつはここ)をホストマシンとして、このうえにWindows XP、CentOS5.5(32bit)の仮想マシンを、試しに、作成してみることにした。
結果、私の想像以上にうまく動作することがわかった。結構、いろいろなことに使えそうだ。
このエントリーでは、私の今回の経験に基づき、仮想マシン作成について、KVMの導入、仮想マシン作成の手順、そして作成作業を通じて気づいた仮想マシン作成にかかわる課題などについてメモしておいた。
作成した仮想マシン: 上記したように、今回作成した仮想マシンはWindows XP(SP適用なし)とCentOS5.5(32bit)のふたつだ。下図は、ふたつの仮想マシンを動作させた際のPCスクリーンのスナップショット(立ち上げ直後)だ。
この図で、左上には「仮想マシンマネージャ」、中央部にWindows XP、そして右下部にCentOSの初期画面が動作しているのが理解していただけるだろう。
Windows XPについては、半年ほど前にCore i5を搭載したPC上にインストールしようとしたがうまくいかなかったおぼえがある。インストールするにはSerivice Pack2以降のサービスパックが適用されることが前提となっていたのだ(「PCの組み立て、Pentium3からCore i5に」参照)。ところが、同じPC上においても、仮想化した環境下ではこのWindows XPが正常にインストールされた。
余談になってしまうが、サービスパック未適用のWindows XPインストール後、マイクロソフトのサポートサイトを活用して最新のService Pack3を適用することができた。少しだけ、棚からぼたもち気分を味わうことができた。
仮想マシン作成の手順: CentOS5.5(64bit)をホストマシンとし、KVMを用いた仮想マシンを作成するのに、以下の3つのステップを踏んだ:
- BIOSでIntel Vtを動作可能な状態(enable)とする
- ホストマシンCentOS5.5上にKVM(Kernel based Virtual Machine)をインストールする
- Virt-managerにより仮想マシン環境を整え、ターゲットとするOS(ここではWindows XpとCentOS5.5(32bit))をインストールする
なお、今回の仮想マシン作成にあたっては、CentOSのGUI、GNOMEを用いて行っている。
以下、3つのステップ各々について、具体的な手順について記述する。
BIOSの設定: KVMはCPUの仮想化支援技術(Intel VT)を活用している。仮想マシンの作成にあたっては、当然のことながら、このIntel Vtを利用可能な状態に整えなければならない。これにはBIOSを適切に設定しなければならない。
BIOS設定画面の[Advanced]で Intel VT-d オプションを[enable]にすればよい。
因みに、今回の試みで用いているPCのマザーボードはP7P55D、そしてCPUは Core i5-750である。
CentOS上にKVMをインストール: CentOS5.5の初期インストール時にKVMをインストールするには、インストール作業のなかのインストラクションのひとつ「インストールパッケージの選択」において [仮想化] -> [KVM] をチェックすればよい。なお、[仮想化] -> [仮想化] をチェックするとKVMではなくもうひとつの仮想化用ソフトXenがインストールされてしまうので注意が必要だ。
インストール作業の終了しているCentOS5.5のおいてKVMをインストールしよとする場合には、[アプリケーション] -> [ソフトウェアの追加/削除] においてたちあがる「パッケージマネージャ」上でCentOSの初期インストール時と同様の手続きで行なうことができる
Virt-managerの起動と仮想マシンの新規作成: ホストOS(CentOS5.5)上において、[アプリケーション] –> [システムツール] –> [仮想マシンマネージャ] により、Virt-managerが起動する。Virt-manager は、仮想マシンの動作状態のモニターならびに新規作成などを行うグラフィカルツールである。
「仮想マシンマネージャ」(下図)にみられるように、ホストOS(図ではYamasServer02)をクリックし、ツールの右下に[新規(N)]ボタンを押下することにより新規の仮想マシンの生成手続きが開始される。これ以降、ポップアップするウィンドウ画面のインストラクションに沿って、新規作成しようとする仮想マシンの諸情報を設定してやることになる。
以下、仮想マシン生成の手続きについて、設定用画面に沿って、私の経験しについて記述してゆく:
最初に現れるのが下図のような仮想マシン生成開始の画面。図に見られるように、仮想マシンの名前からはじまり、仮想マシンに割り当てるCPU個数とメモリ領域に至るまでの5項目について順次、設定作業を進めることになる。[進む(F)]ボタンを押下し、次に進む。
最初の設定作業として仮想マシンの名前を登録してやることになる。以下の例では、仮の名前としてsample01 を与えている。名前を記入したところで、[進む(F)] ボタンを押下。
次に、仮想化方式の種別をしてやる。ここでは完全仮想化(Fully virtualized)を選択し、CPUアーキテクチャ、ハイパーバイザを選択してやればよい。私の理解では、KVMを使った仮想マシンの生成においては、準仮想化という選択はない。[進む(F)]ボタンを押下し、次に進む。
新規に作成しようとしている仮想マシンのインストール方法ならびにインストールの対象とするOSのタイプと種別を与えてやる。下図に示した例では、CDROM(DVD)をを通じたCentOS 5.5 のインストールに対応して、OSタイプとしてLinux, OSの種別としてRHEL 5.4 or laterを選択している。
OSタイプとしてLinuxのほか、Generic、Other、Solaris、UNIX、Windowsの項目があり、これら各々のOSタイプに対応するOS種別を選択することが可能になっている。図下部の注意書きに見られるようにRHEL5(CentOS5と読み替えて差し支えない)においては全てのOSがサポートされてはいないようだ。
設定が終了したところで、[進む(F)]ボタンを押下。
次に、OSをインストールするメディアを具体的に指定してやる。下図に示した例では、DVDデバイスを通じたインストール時の指定としている。[進む(F)]を押下し、次のステップに移る。
ここで、仮想マシンのStorageを指定する。下図から理解できるように、Storageの指定として、Block deviceとFile(fail image)の2種類の設定法があるようだ。この例では、ホストマシン上の/var/lib/libvirt/images上にsample01.imgというファイル名でディスクイメージを作成している。このファイルのサイズとして、10GBのスペース(例としての仮の値であることに注意)を割り当てている。
ファイルサイズの割り当てにおいて、ホストOS上で利用可能なサイズ以上のものを割り当てようとした場合、エラーとしてはじかれる。
次に仮想マシンに対するネットワークを設定する。ここでは、「仮想ネットワーク」と「共有物理装置」のふたつの方法が可能になっている。下図の例では、「仮想ネットワーク」を選択し、ネットワークを「default」としている。ここでいう「仮想ネットワーク」とは作成しようとしている仮想マシン(ゲスト)に対してIPマスカレードによるネットワークアクセスを提供する。
「仮想ネットワーク(V)」の選択により、libvirtdサービスにより提供される仮想ブリッジvirbrX(具体的にはvirbr0)が生成されこれを介してゲストとホスト間の通信が可能とされる。ただし、ここでは、外部ネットワークとは異なるサブネットとなり、ゲストを外部ネットワークと直接には接続できないことに注意が必要である。ゲストをサーバとして使用しようとする場合など(スタティックな)ネットワークの直接接続を必要とする場合には、「共有物理装置」を選択し、複雑なネットワーク設定手続きが必要になる。
仮想ブリッジvirtbrXを使用することにより、この仮想ブリッジにつながるネットワーク上にDHCPサーバーおよびDSNサーバーの機能が提供される。このとき、生成される仮想マシン(ゲスト)においてのネットワーク設定においてはDHCPによる通信を選択することになる。また、DNSサーバは、ホストの/etc/hostsならびに/etc/resolv.conf)に指定されている外部DNSを参照することになる。なお、このDHCPサーバー、ならびにDNSサーバーの機能はdnsmasqデーモンが提供している。
なお、上記で設定したネットワーク構成は、/etc/libvirt/qemu/networks/default.xmlに記述されており、このファイルは、具体的には、以下のようになっている:
<network> <name>default</name> <uuid>88429c53-46d5-4bde-997c-917a675a70cf</uuid> <bridge name="virbr0" /> <forward/> <ip address="192.168.122.1" netmask="255.255.255.0"> <dhcp> <range start="192.168.122.2" end="192.168.122.254" /> </dhcp> </ip> </network>
ネットワークを構成しおわったところで、仮想マシンのメモリ領域ならびに使用するCPUの個数を設定してやることになる。下図に示した例では、生成する仮想マシンに対し、メモリー領域を512MB、CPUを1個割り当てている。
以上の設定作業が終了すると、設定内容のまとめをした画面が現れる。
ここで、[完了(F)]ボタンの押下により目標とする仮想マシンのインストールが開始される。各OSのインストールは、実マシン上へのOSインストール作業と同様に行うことができる。
以上の仮想マシンの設定内容は、/etc/libvirt/qemu/guest_name.xmlに記述される。上記のようにホスト上でGUIを通じて設定作業を行うことのほか、このxmlファイルを手作業であたえ、編集が完了したところでvirsh defineコマンド(書式は、 virsh define –file ファイル名 )を実行することにより、仮想マシンの環境を実現することができる。
以下に、仮想マシン上にWindows-XPをインストールした際のxmlファイルの例を参考として与える:
/etc/libvirt/qemu/winxp.xml
<domain type='kvm'> <name>winxp</name> <uuid>1713fdcd-7547-a4eb-df9e-daa601b5094e</uuid> <memory>524288</memory> <currentMemory>524288</currentMemory> <vcpu>1</vcpu> <os> <type arch='x86_64' machine='rhel5.4.0'>hvm</type> <boot dev='hd'/> </os> <features> <pae/> </features> <clock offset='localtime'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' cache='none'/> <source file='/var/lib/libvirt/images/winxp-1.img'/> <target dev='hda' bus='ide'/> </disk> <disk type='block' device='cdrom'> <source dev='/dev/hde'/> <target dev='hdc' bus='ide'/> <readonly/> </disk> <interface type='network'> <mac address='54:52:00:6e:07:a4'/> <source network='default'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target port='0'/> </console> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes' keymap='ja'/> </devices> </domain>
今後の課題と展開: 仮想化技術を試し、なんとか動作させることができたのではあるが、2,3解決すべき課題もあった。例えば、
- 今回作成した仮想マシンの環境ではAudioなどPCに付属する各種デバイスが利用できない。
- ホストではグラフィックとしてnVIDIAを用いているが仮想マシンではこのドライバのインストールができない。
といったようなものだ。いづれも、PCのデバイスがらみの設定にかかわるもののようである。
ネットワークがらみの話であるが、仮想化技術の利点を生かすために、スタティックに外部ネットワークと接続可能な環境を整えることが必要になると思う。
おそらく、KVMで利用しているエミュレータqemuについての詳細を理解し、それに基づき適切な機能を実装することにより、こうした課題をクリアすることができると考えている。
現在の状態だけでも、かなりのことができる。例えば、Linuxディストリビューションとして、今までCentOSのみを対象にしてきたが、これ以外のディストリビューションについても試行する環境を獲得することができた。
この記事の作成にあたって、KVM仮想化リソース操作ガイドfor RHEL5.4 version 1.0を参考じした。
1 Trackback(s)