■Xenの設定
ログ
virshのためのxend-http-serverの有効化
virshでCPU関連の制御
xentopをバッチモードで動作、CSV出力
virshのsaveとrestore
virshの一時停止と再開
virsh/xmシャットダウン
virshのテンプレート生成、編集、テンプレートからdomain-Uの生成
Xenの仮想マシンの自動起動(シンボリックリンク/virsh autostart)
domain-Uの一括停止/domain-Uの一括起動
■デフォルトではDEBUGログが出力される。
設定できるログレベルはmanにある。
$ grep "^#(log" /etc/xen/xend-config.sxp
$ man xend-config.sxp | grep -A 2 loglevel
loglevel
Filters out messages below the specified level. Possible values
are DEBUG, INFO, WARNING, ERROR, CRITICAL. Defaults to DEBUG.
■ログレベルをINFOに変更する。
ログファイルの場所はデフォルトのままだが、明示的に指定する。
$ sudo sed -i s/"^#(log"/"(log"/g /etc/xen/xend-config.sxp
$ sudo sed -i s/"^(loglevel DEBUG"/"(loglevel INFO"/g /etc/xen/xend-config.sxp
$ grep "^(log" /etc/xen/xend-config.sxp
(logfile /var/log/xen/xend.log)
(loglevel INFO)
■反映。tailでしばらくDEBUGレベルのログが出なくなったことを確認。
$ sudo /etc/init.d/xen restart
$ sudo tail -f /var/log/xen/xend.log
■virshについて
$ apt-cache show libvirt-bin | grep -A 6 ^Description-ja
Description-ja: libvirt ライブラリ用のプログラム
libvirt は最近のバージョンの Linux (や他の OS) の仮想化機能と連携する C の
ツールキットです。このライブラリは、異なる仮想化機構に対して長期にわたり変
わらない C の API を提供することを目的としています。現在のところ QEMU, KVM,
XEN, OpenVZ, LXC と VirtualBox をサポートしています。
.
このパッケージには libvirt を利用するための補助バイナリが含まれます。
$ dpkg -L libvirt-bin | grep bin/ | grep -v doc/
/usr/sbin/libvirtd
/usr/bin/virt-xml-validate
/usr/bin/virt-pki-validate
/usr/bin/virt-host-validate
/usr/bin/virsh
■xend-http-portを有効にして、virshコマンドを使用可能にする。
対象は以下。
$ grep "(xend-[hap]" /etc/xen/xend-config.sxp
■設定しないと接続拒否のエラーとなる。
$ sudo virsh list
error: Failed to reconnect to the hypervisor
error: no valid connection
error: unable to connect to 'localhost:8000': 接続を拒否されました
■xend-http-serverの設定変更
$ sudo sed -i s/"#\((xend-[hap]\)"/"\1"/ /etc/xen/xend-config.sxp
$ sudo sed -i s/"(xend-address '')"/"#&"/ /etc/xen/xend-config.sxp
$ sudo sed -i s/"(xend-http-server no)"/"(xend-http-server yes)"/ /etc/xen/xend-config.sxp
$ grep "^(xend-[hap]" /etc/xen/xend-config.sxp
(xend-http-server yes)
(xend-port 8000)
(xend-address localhost)
$ sudo /etc/init.d/xen restart
■localhost:8000で待ち受けていることを確認。
virsh listコマンドが正常に
$ netstat -an | grep 8000
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN
$ sudo virsh list
Id Name State
----------------------------------------------------
0 Domain-0 running
1 vmvm2 running
■virshでCPU関連の制御コマンドを確認
$ sudo virsh help domain | grep vcpu
maxvcpus connection vcpu maximum
setvcpus change number of virtual CPUs
vcpucount domain vcpu counts
vcpuinfo detailed domain vcpu information
vcpupin control or query domain vcpu affinity
■最大で32個のCPUを割り当てることができる。
domain-0が持つ2つのCPUのうち、1つがdomain-U(vmvm2)に割り当てられている。
$ sudo virsh maxvcpus
32
$ sudo virsh vcpuinfo 0
VCPU: 0
CPU: 0
State: idle
CPU time: 51.9s
CPU Affinity: yy
VCPU: 1
CPU: 1
State: running
CPU time: 45.2s
CPU Affinity: yy
$ sudo virsh vcpuinfo 1
VCPU: 0
CPU: 0
State: idle
CPU time: 13.4s
CPU Affinity: yy
■CPUの数を変更するには、setvcpusサブコマンドを使用するが、
vcpucount以上に割り当てることはできない。
$ sudo virsh vcpucount 0
maximum config 2
maximum live 2
current config 2
current live 2
$ sudo virsh vcpucount 1
maximum config 1
maximum live 1
current config 1
current live 1
$ sudo virsh setvcpus 1 2
error: invalid argument: requested vcpus is greater than max allowable vcpus for the domain: 2 > 1
■VCPUとCPUの紐付けを変更するには、vcpupinサブコマンドを使用する。
$ sudo virsh vcpupin 1 0 1
$ sudo virsh vcpuinfo 1
VCPU: 0
CPU: 1
State: idle
CPU time: 16.8s
CPU Affinity: -y
$ sudo virsh vcpupin 1 0 0
$ sudo virsh vcpuinfo 1
VCPU: 0
CPU: 0
State: idle
CPU time: 16.9s
CPU Affinity: y-
■xentopをバッチモードで動作、CSV出力
$ sudo xentop -h
Usage: /usr/lib/xen-4.1/bin/xentop [OPTION]
Displays ongoing information about xen vm resources
-h, --help display this help and exit
-V, --version output version information and exit
-d, --delay=SECONDS seconds between updates (default 3)
-n, --networks output vif network data
-x, --vbds output vbd block device data
-r, --repeat-header repeat table header before each domain
-v, --vcpus output vcpu data
-b, --batch output in batch mode, no user input accepted
-i, --iterations number of iterations before exiting
-f, --full-name output the full domain name (not truncated)
Report bugs to <xen-tools@lists.xensource.com>.
■5秒単位で2回取得
$ sudo xentop -b -i 2 -d 5 | sed s/"no limit"/"no_limit"/g | sed s/" *"/"\",\""/g | sed s/"^\|\$"/"\""/g
"","NAME","STATE","CPU(sec)","CPU(%)","MEM(k)","MEM(%)","MAXMEM(k)","MAXMEM(%)","VCPUS","NETS","NETTX(k)","NETRX(k)","VBDS","VBD_OO","VBD_RD","VBD_WR","VBD_RSECT","VBD_WSECT","SSID"
"","Domain-0","-----r","84","0.0","901124","86.0","no_limit","n/a","2","0","0","0","0","0","0","0","0","0","0"
"","vmvm2","--b---","8","0.0","131072","12.5","131072","12.5","1","1","0","0","2","0","1212","37","33130","568","0"
"","NAME","STATE","CPU(sec)","CPU(%)","MEM(k)","MEM(%)","MAXMEM(k)","MAXMEM(%)","VCPUS","NETS","NETTX(k)","NETRX(k)","VBDS","VBD_OO","VBD_RD","VBD_WR","VBD_RSECT","VBD_WSECT","SSID"
"","Domain-0","-----r","84","1.3","901124","86.0","no_limit","n/a","2","0","0","0","0","0","0","0","0","0","0"
"","vmvm2","--b---","8","0.5","131072","12.5","131072","12.5","1","1","0","0","2","0","1212","37","33130","568","0"
■確認方法。
20列目が最後のデータでその値はSSIDの列のものと一致する。
後は、calcなりexcelなりで確認する。
$ sudo xentop -b -i 2 -d 5 | \
sed s/"no limit"/"no_limit"/g | \
sed s/" *"/"\",\""/g | \
sed s/"^\|\$"/"\""/g | \
awk -F\, '{print NF,$NF}'
20 "SSID"
20 "0"
20 "0"
20 "SSID"
20 "0"
20 "0"
■saveとrestoreは、手動のマイグレーションのようなもの。
稼働中の仮想マシンの状態をメモリからステータスファイルに保存し、
仮想マシンを停止するsaveサブコマンドと、
状態ファイルから復元するrestoreサブコマンド。
$ sudo virsh help domain | grep "save\|restore"
managedsave managed save of a domain state
managedsave-remove Remove managed save of a domain
restore restore a domain from a saved state in a file
save save a domain state to a file
save-image-define redefine the XML for a domain's saved state file
save-image-dumpxml saved state domain information in XML
save-image-edit edit XML for a domain's saved state file
$ sudo virsh save 1 test.save
Domain 1 saved to test.save
$ sudo virsh list
Id Name State
----------------------------------------------------
0 Domain-0 running
$ sudo virsh restore test.save
Domain restored from test.save
$ sudo virsh list
Id Name State
----------------------------------------------------
0 Domain-0 running
2 vmvm2 idle
■一時停止と再開
$ sudo virsh suspend 2
Domain 2 suspended
$ sudo virsh list
Id Name State
----------------------------------------------------
0 Domain-0 running
2 vmvm2 paused
$ sudo virsh resume 2
Domain 2 resumed
$ sudo virsh list
Id Name State
----------------------------------------------------
0 Domain-0 running
2 vmvm2 idle
■シャットダウン
$ sudo virsh shutdown 2
Domain 2 is being shutdown
$ sudo virsh list
Id Name State
----------------------------------------------------
0 Domain-0 running
$ sudo xm shutdown vmvm0
$ sudo xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 750 2 r----- 188.4
vmvm0 128 1 9.6
vmvm2 3 128 1 -b---- 12.4
$ sudo virsh list --inactive
Id Name State
----------------------------------------------------
- vmvm0 shut off
$ sudo virsh list --all
Id Name State
----------------------------------------------------
0 Domain-0 running
3 vmvm2 idle
- vmvm0 shut off
■テンプレートの作成
$ sudo virsh help domain | grep dumpxml
dumpxml domain information in XML
save-image-dumpxml saved state domain information in XML
$ sudo virsh dumpxml vmvm2 > /tmp/template_guest.xml
■テンプレートの編集
名前、UUID、MACアドレス、IPアドレス、ディスクなどをエディタで変更。
ここではvmvm0とした。
今回は名前を変えるので、直接エディタを起動したが、
「virsh edit vmvm0」とすると、
サブコマンドはEDITOR環境変数に設定されたエディタを起動する。
$ sudo uuidgen
8b6dc072-ef7d-434c-9f51-d8f67aece5ea
また、ディスクは設定に合わせてコピーしておく。
$ ls /var/local/domains/vmvm2/
disk.img swap.img
$ sudo cp -r /var/localdomains/vmvm2/ /var/localdomains/vmvm0
■テンプレートからdomain-Uの生成
$ sudo virsh define /tmp/template_guest.xml
Domain vmvm0 defined from /tmp/template_guest.xml
*** glibc detected *** virsh: double free or corruption (out): 0x00000000011ba8d0 ***
======= Backtrace: =========
...
======= Memory map: ========
...
$ sudo virsh start vmvm0
Domain vmvm0 started
$ sudo virsh list
Id Name State
----------------------------------------------------
0 Domain-0 running
3 vmvm2 idle
4 vmvm0 idle
$ sudo xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 752 2 r----- 167.9
vmvm0 4 128 1 -b---- 5.1
vmvm2 3 128 1 -b---- 8.6
■ゲストOS側でインターフェイスのIPを固定にしていたりすると、一度コンソールログインが必要になる。
どちらのコマンドで入るかは問題ではない。
インターフェイスのIPを修正、ifdown/ifupしてsshログインができることを確認。
テンプレートとしての設計をするとこんなことにはならないはず。
$ sudo xm console vmvm0
$ sudo virsh conole vmvm0
■Xenの仮想マシンの自動起動
シンボリックリンクを作成
$ test -d /etc/xen/auto || sudo mkdir /etc/xen/auto
$ sudo ln -s /etc/xen/vmvm2.cfg /etc/xen/auto/vmvm2.cfg
■domain-Uの一括停止
$ sudo /etc/init.d/xendomains stop
[ ok ] Saving Xen domain vmvm2 (3).........done.
$ sudo xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 750 2 r----- 202.0
vmvm0 128 1 9.6
vmvm2 128 1 0.0
$ sudo virsh list --inactive
Id Name State
----------------------------------------------------
- vmvm0 shut off
- vmvm2 shut off
■domain-Uの一括起動
ここで自動起動に設定したゲストだけ起動する。
$ sudo /etc/init.d/xendomains start
[ ok ] Restoring Xen domain vmvm2 (from /var/lib/xen/save/vmvm2)...done.
$ sudo xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 750 2 r----- 208.0
vmvm0 128 1 9.6
vmvm2 5 128 1 -b---- 0.3
■virsh autostartサブコマンドで自動起動を設定する。
$ sudo virsh autostart vmvm0
Domain vmvm0 marked as autostarted
■自動起動の解除
$ sudo rm /etc/xen/auto/vmvm2.cfg
$ sudo virsh autostart --disable vmvm0
Domain vmvm0 unmarked as autostarted