VirshコマンドによるKVMゲストOSの管理


既にゲストOSのインストールは完了しているものとします。

履歴

2015/06/16: ngyuki さんコメントよりvirsh define コマンドの説明と、virsh edit コマンド周りについて加筆修正

ゲストOSの登録

もし他のホストマシンなどからイメージと定義ファイルをコピーしてきた場合、virsh コマンドでそのイメージを管理するにはvirsh define コマンドを使用してlibvirt 管理下に登録することができます。
例えば/etc/libvirt/qemu ディレクトリ配下に定義ファイルがある場合、その定義ファイルを指定してvirsh define コマンドを実行することで、ゲストOS をvirsh コマンドで管理できるようになります。

コマンド例
# virsh define /etc/libvirt/qemu/kvm_centos7.xml

なお、このxml 定義ファイルは直接編集せず、virsh edit コマンドを使用して編集するようにしてください。
virsh edit コマンドを使用して編集することで、定義ファイルに誤りがあった場合に保存時にエラーとなるため、安全です。

ゲストOSの確認

追加したゲストOS を確認するには、virsh list --all コマンドを実行します。
停止状態のゲストOS も表示するには、--all オプションも追加します。

コマンド例
# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     kvm_centos7                    shut off

ゲストOSの起動

登録されているゲストOS を起動するには、virsh start DOMAIN_NAME_OR_UUID [--console] コマンドを実行します。

コマンド例
# virsh start kvm_centos7

--console オプションを指定すると、ゲストOS 起動と同時にコンソール接続をします。

ゲストOSの停止

virsh shutdown DOMAIN_NAME コマンドを使用することで、登録されているゲストOS を停止することができます。

コマンド例
# virsh shutdown kvm_centos7

これで停止しない場合は、destroy オプションで強制終了してください。

コマンド例
# virsh destroy kvm_centos7

ゲストOS のコンソールに接続する

virsh console DOMAIN コマンドを実行することで、ゲストOS のコンソールに接続することができます。

コマンド例
# virsh console kvm_centos7

ゲストOS へシリアル接続できない場合

ゲストOS へシリアル接続する場合、ゲストOS 側でシリアル接続する設定が含まれている必要があります(ここでは説明を割愛)。

OS起動時にゲストOS を起動する

OS 起動時にゲストOS を起動する場合は、virsh autostart コマンドを使用します。

コマンド例
$ sudo virsh autostart kvm_centos7

/etc/libvirt/qemu/autostart/ ディレクトリ以下にファイルが作成されていれば、OKです。

コマンド例
$ ls /etc/libvirt/qemu/autostart/
kvm_centos7.xml

ゲストOS の自動起動を解除する

virsh autostart によって、自動起動するよように設定されたゲストOS を元に戻す場合は、virsh autostart --disable コマンドを実行します。

コマンド例
$ sudo virsh autostart --disable kvm_centos7

ゲストOS の保存

virsh save DOMAIN_NAME FILE_NAME ゲストOS の状態を保存し、ゲストOS を停止します。

コマンド書式
# virsh save <domain_name> <file>
コマンド例
# virsh save kvm_centos7 /var/kvm/save/kvm_centos7_01.vmsave

ゲストOS のリストア

virsh restore FILE_NAME コマンドを実行することで、ゲストOS の状態を保存したファイルからリストアすることができます。

コマンド例
# virsh restore /var/kvm/save/kvm_centos7_01.vmsave

ゲストOSにCPU を追加する

virsh setvcpus [domain-name] [count] コマンドを実行することで、ゲストOS に仮想CPU を追加することができます。

コマンド例
# virsh setvcpus kvm_centos7 2

CPU の設定状況を確認するには、virsh vcpuinfo [domain] コマンドを実行します。

コマンド例
# virsh vcpuinfo kvm_centos7
VCPU:           0
CPU:            3
State:          running
CPU time:       41.5s
CPU Affinity:   yyyy

VCPU:           1
CPU:            2
State:          running
CPU time:       15.2s
CPU Affinity:   yyyy

上限を超えてVCPU を追加することはできない

KVM のゲストOS に追加できるVCPU の上限は、ゲストOS 作成時に指定したCPU 数が上限となっています。
上限を超えてVCPU を登録しようとすると次のようなエラーメッセージが出力されます。

コマンド例
# virsh setvcpus kvm_centos7 4
error: invalid argument: requested vcpus is greater than max allowable vcpus for the domain: 4 > 2

既に作成されているゲストOS のVCPU 上限数を変更するには、一度virsh edit [domain] コマンドを実行し、vcpu の値を変更します。

コマンド例
# sudo virsh edit kvm_centos7

vcpu エレメントの値を変更します。今回は2 から4 に変更しました。

コマンド例
<vcpu placement='static'>4</vcpu>

ゲストOS が既に起動している場合はshutdown してからstart します。(reboot では反映されませんでした(2015/01 現在))

コマンド例
# virsh shutdown kvm_centos7
# virsh list --all

※停止しているのが確認できたら
# virsh start kvm_centos7

起動したら、virsh vcpuinfo [domain] コマンドを実行してcpu 数が増えて事を確認します。

コマンド例
# virsh vcpuinfo kvm_centos7

動的にvcpu の数を変更する

※できませんでした・・・。今後できるようになるかもしれないので、備忘録として残しておきます

CPU のHot Plug 機能を利用するには、現状下記のような制限があります。


MAX CPU(KVM ゲストOS のXML に記載) は2 以上であること

MAX CPU を超えるvcpu 数を追加することはできない(MAX CPU を増やす場合はゲストOS 再起動が必要)

libvirt のバージョンが1.0.6.5 以上(Fedora の場合は1.0.5.5 とも)

参考:

http://blog.etsukata.com/2013/09/qemukvm-cpu-hotplug.html

なお、ここではゲストOS にログインして実施する方法と、ホストOS からゲストOS を操作するQemu guest agent を使用した方法を説明します。
Qemu guest agent を使用する場合は、ゲストOS 側にQemu guest agent パッケージをインストールできるOS でなければできません。
Qemu guest agent は次のコマンドでインストールすることができます。

RedHat系
# yum install qemu-guest-agent
Debian系
$ sudo apt-get install qemu-guest-agent

チップセットエミュレータのバージョン指定

チップセットエミュレータのバージョンが1.5 以上であることを確認してください。
1.5 未満の場合は1.5 以上になるようにvirsh edit DOMAIN_NAME で変更してください。
(※2015/01 現在、"machine='pc-i440fx-utopic'" のチップセットエミュレータでも問題なく動作しそうです)

コマンド例
$ virsh edit kvm_centos7

<os>
  <type arch#"x86_64" machine"pc-1.2">hvm</type>
</os>

↓↓↓

<os>
  <type arch#"x86_64" machine"pc-1.5">hvm</type>
</os>

vcpu の確認及び変更(ゲストOS から実行する場合)

ゲストOS へログインし、vcpu の数を確認します。

コマンド例
# egrep -c '^processor\s+' /proc/cpuinfo
8

online なvcpu の確認(Qemu guest agent を使用する場合)

TODO:
2015/01 現在、ホストOS からゲストOS を直接操作することはサポート対象外らしい。ゲストOS をCentOS 7 にして実施してみたが、そもそもqemu-guest-agent デーモンが起動しない。

参考
http://wiki.libvirt.org/page/Qemu_guest_agent
http://blog.etsukata.com/2013/09/qemukvm-cpu-hotplug.html
http://lost-and-found-narihiro.blogspot.jp/2013/08/fedora-19-kvm-qemu-guest-agent.html

qemu-quest-agent を起動しようとすると次のようなエラーログ

コマンド例
[root@localhost ~]# systemctl status qemu-guest-agent.service
qemu-guest-agent.service - QEMU Guest Agent
   Loaded: loaded (/usr/lib/systemd/system/qemu-guest-agent.service; static)
   Active: inactive (dead)

Jan 21 11:48:03 localhost.localdomain systemd[1]: Dependency failed for QEMU ...
Hint: Some lines were ellipsized, use -l to show in full.

ゲストOS のIP アドレスを取得する (Cent OS ではできなかった)

qemu-guest-agent を使用してゲストOS のIPアドレスを取得する。
※現状CentOS 7 ではうまくいかないので保留。インターネットに出回っているサンプルではFedora が多い
http://d.hatena.ne.jp/NeoCat/20140401/1396304174

ゲストOS メモリサイズを変更する

ゲストOS を一旦停止させてからメモリを増設させる方法です。
ゲストOS を停止します(ドメイン名:kvm_centos7)。

コマンド例
# virsh shutdown kvm_centos7

ゲストOS のxml ファイルをvirsh edit コマンドで開きmemory 要素(最大メモリ)とcurrentMemory 要素(実質メモリ)を編集します。

virsh edit kvm_centos7
~~~抜粋~~~
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
~~~抜粋~~~

※上記のサンプルでは、1 * 1024 * 1024 * 2 の2GiB を指定しています。

ゲストOS を起動したら、ゲストOS にログインし、free コマンドを実行してメモリを確認してください。

ゲストOS メモリサイズを動的に変更する(結果・現段階では動的にメモリサイズの変更はできないっぽい)

※これも今後できるようになるかもしれないので備忘録として残しておきます。
まず、最大メモリサイズを変更します。現在、最大メモリサイズとカレントメモリサイズが1G として、2G にメモリを増設する手順を説明します。

コマンド例
# virsh setmaxmem kvm_centos7 2G --config
# echo $?
0

最大メモリサイズを変更したら、(動的には変更できないようなので)ゲストOS をシャットダウンします。

コマンド例
# virsh shutdown kvm_centos7

ゲストOS が停止したら、次のコマンドで、カレントメモリサイズを変更します。

コマンド例
# virsh setmem kvm_centos7 2G --config

設定を変更したら、ゲストOS を起動して反映完了です。

コマンド例
# virsh start kvm_centos7