virt-managerによる仮想マシンの操作
今回は、仮想マシンの運用・管理に伴う次の操作方法を説明します。
仮想マシンの作成(ゲストOSのインストール)
仮想マシンの起動/停止
仮想マシンのバックアップ(クローニング)
これらの操作はGUIツールのvirt-managerから行う方法に加えて、virshコマンドなどのコマンドラインツールを利用する方法があります。また、libvirtが提供するAPIを用いて、Pythonスクリプトから仮想マシンの起動/停止を行うことも可能です。これは、仮想マシンの起動/停止を自動化する場合に利用できます。
virt-managerでは、これらの操作をGUIを利用して直感的に行うことができます。新規の仮想マシンを作成する際は、virt-managerの起動画面(仮想マシン一覧画面)で対象のホストLinux(通常は「localhost(QEMU)」 )を右クリックして「新規」を選択します。この後は、ウィザード形式で仮想マシンにアサインするリソースなどを指定していきます。インストールが完了した仮想マシンの起動/停止を行う際は、仮想マシン一覧画面で操作対象の仮想マシンをダブルクリックして、仮想マシンの管理画面を開きます。この時、図1のようなコンソール画面が表示されます。画面上部のボタンで仮想マシンの起動/停止を行います。
図1 virt-mangerの仮想マシンコンソール
なお、ゲストOSのGUIデスクトップにログインしているユーザがいる場合、仮想マシンのシャットダウンを実行すると、デスクトップ上にシャットダウンの確認を求めるウィンドウが表示される場合があります。この場合は、ユーザが確認ウィンドウのボタンを押すまでシャットダウンが開始しないので注意が必要です。
最後に、仮想マシンのクローニング(複製)を行う際は、仮想マシン一覧画面で操作対象の仮想マシンを右クリックして「クローン」を選択します。この後は、ウィザード形式で複製先の仮想マシンの名前などの情報を指定していきます。仮想マシンを停止した状態で実施してください。これは、既存の仮想マシンのディスクイメージをそのままコピーしますので、仮想マシンのバックアップとして利用することができます。ただし、複製先の仮想マシンは、NICのMACアドレスなどが異なります。ゲストOS内のMACアドレスに依存する設定などは修正が必要です。第4回 で紹介した自動複製ツールなども参考にしてください。
コマンドによる操作
コマンドラインツールによる仮想マシンの操作方法を説明します。新規の仮想マシンを作成してゲストOSをインストールする際は、virt-installコマンドを使用します。次は実行例です。
# virt-install --accelerate \
--name rhel60vm01 --ram 1024 --vcpus 2 \
--disk path=/var/lib/libvirt/images/rhel60vm01.img,size=10,sparse=false \
--network network:default \
--os-type linux --os-variant rhel6 \
--location http://xx.xx.xx.xx/RHEL60-x86_64/ \
--vnc
GUI環境で実行すると、VNCによるコンソール画面のウィンドウが開いて、インストールが開始されます。事前にRHEL6.0のインストールメディアの内容をWebサーバ(http://xx.xx.xx.xx/RHEL60-x86_64/ ※任意のアドレス )で公開しておき、これを利用してネットワークインストールを行います。
--netowrkオプションは、仮想マシンを接続する仮想ネットワークを指定します。第3回の図1で説明したように、KVMの仮想ネットワークには2種類あります。物理NICにブリッジ接続した仮想ネットワークを使用する場合は「--network bridge:br0」のように指定します。その他のオプションの詳細については、virt-install(1)のmanページを参照してください。
インストールが完了した仮想マシンを起動/停止するには次のコマンドを用います。「 rhel60vm01」の部分は仮想マシンの作成時に--nameオプションで指定した名前です。
# virsh list 起動中の仮想マシンを一覧表示
# virsh list --all 停止中の仮想マシンを含めて一覧表示
# virsh start rhel60vm01 仮想マシンを起動
# virsh shutdown rhel60vm01 仮想マシンをシャットダウン
# virsh destroy rhel60vm01 仮想マシンを強制停止
最後に仮想マシンのクローニング(複製)には、virt-cloneコマンドを使用します。次は実行例です。
# virt-clone --original rhel60vm01 --name rhel60vm01clone \
--file /var/lib/libvirt/images/rhel60vm01clone.img --nonsparse
これは仮想マシンを停止した状態で実施してください。オプションの詳細については、virt-clone(1)のmanページを参照してください。
Python APIの利用
libvirtが提供するAPIを利用してPythonスクリプトから仮想マシンを起動/停止する例を紹介します。次のスクリプトは、それぞれ「停止中の仮想マシンをすべて起動」「 起動中の仮想マシンをすべてシャットダウン」するものです。
#!/usr/bin/python
import libvirt, time
Conn = libvirt.open( "qemu:///system" )
for name in Conn.listDefinedDomains():
vm = Conn.lookupByName( name )
print "Starting " + vm.name()
vm.create()
time.sleep( 1 )
#!/usr/bin/python
import libvirt, time
Conn = libvirt.open( "qemu:///system" )
for id in Conn.listDomainsID():
vm = Conn.lookupByID( id )
print "Stopping " + vm.name()
vm.shutdown()
time.sleep( 1 )
これらに含まれる代表的なメソッドの説明は次のとおりです。libvirt.open()でlibvirtを利用するためのオブジェクトを取得します。listDefinedDomains()とlistDomainID()は、それぞれ停止中の仮想マシン名の一覧、および起動中の仮想マシンIDの一覧を取得します。これらをもとに、lookupByName()、およびlookupByID()で仮想マシンのオブジェクト(vm)を取得して、vm.create()、およびvm.shutdown()で該当の仮想マシンの起動/停止を行います。
Python APIで利用できるメソッド全体の説明は次のコマンドで参照してください。仮想マシンの操作以外に、仮想ネットワークや仮想リソースの操作も可能です。
# pydoc libvirt