既にゲスト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 は次のコマンドでインストールすることができます。
# yum install qemu-guest-agent
$ 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