第22章 virsh でゲストを管理
virsh
はゲストと hypervisor を管理するための コマンドラインインターフェイスです。
virsh
ツールは libvirt
管理 API を 土台にして構築されており、xm
コマンドとグラフィカルゲスト マネージャ (virt-manager
) への代替として機能します。 virsh
は特別権限のないユーザーにより読み込み専用モードで 使用可能です。 virsh
を使用してゲストマシン用のスクリプトを 実行することができます。
以下の表では、全ての virsh コマンドラインオプションのクイックリファレンスを 提供します。
コマンド | 説明 |
---|---|
help | 基本的なヘルプ情報を表示します。 |
list | 全てのゲストを一覧表示します。 |
dumpxml | ゲスト用の XML 設定ファイルを出力します。 |
create | XML 設定ファイルからゲストを作成して新規のゲストを開始します。 |
start | 停止中のゲストを開始します。 |
destroy | ゲストを強制的に停止します。 |
define | ゲスト用の XML 設定ファイルを出力します。 |
domid | ゲストの ID を表示します。 |
domuuid | ゲストの UUID を表示します。 |
dominfo | ゲスト情報を表示します。 |
domname | ゲスト名を表示します。 |
domstate | ゲストの状態を表示します。 |
quit | 対話式のターミナルを終了します。 |
reboot | ゲストを再起動します。 |
restore | ファイル内に以前に保存されているゲストを復元します。 |
resume | 休止中のゲストを復帰します。 |
save | ゲストの現在の状態をファイルに保存します。 |
シャットダウン中 | ゲストを丁寧にシャットダウンします。 |
suspend | ゲストを休止します。 |
undefine | ゲストに関連のファイルをすべて削除します。 |
migrate | ゲストを別のホストに移行します。 |
virsh
コマンドはゲストと hypervisor リソースを 管理します:
コマンド | 説明 |
---|---|
setmem | ゲストのために割り当てたメモリーを設定します。 |
setmaxmem | hypervisor 用の最大メモリー限度を設定します。 |
setvcpus | ゲストに割り当てた仮想 CPU の数を変更します。 |
vcpuinfo | ゲストに関して仮想 CPU 情報を表示します。 |
vcpupin | ゲストの仮想 CPU 同類を制御します。 |
domblkstat | 実行中ゲストのブロックデバイス統計を表示します。 |
domifstat | 実行中のゲストのネットワークインターフェイス統計を表示します。 |
attach-device | XML ファイル内のデバイス定義を使用してゲストへデバイスを添付します。 |
attach-disk | 新規のディスクデバイスをゲストに添付します。 |
attach-interface | 新規のネットワークインターフェイスをゲストに添付します。 |
detach-device | ゲストからデバイスを分離し、attach-device コマンドと 同じ種類の XML 記述を提示します。 |
detach-disk | ゲストからディスクデバイスを分離します。 |
detach-interface | ゲストからネットワークインターフェイスを分離します。 |
virsh
オプションを示します:
コマンド | 説明 |
---|---|
version | virsh のバージョンを表示します。 |
nodeinfo | hypervisor に関する情報を出力します。 |
virsh
で hypervisor セッションへ接続します:
# virsh connect {hostname OR URL}
<name>
は hypervisor のマシン名です。読み込み専用の接続を開始したい場合、上記のコマンドに -readonly
を追記します。
virsh
でゲストの XML 設定ファイルを出力します:
# virsh dumpxml {domain-id, domain-name or domain-uuid}
stdout
) に 出力します。出力をファイルにパイプすることでデータを保存できます。guest.xml と言うファイルへ出力をパイプする例として:
# virsh dumpxml GuestID > guest.xmlと出来ます。このファイル
guest.xml
はゲストを再作成できるものです。 (ゲスト設定ファイルの編集 を参照) この XML 設定ファイルを編集して追加のデバイスを設定したり、 又は追加のゲストを導入したりすることも出来ます。virsh dumpxml
を使用した ファイルの修正に関する情報には、「virsh を用いた XML 設定ファイルの使用」 を参照して下さい。
virsh dumpxml
出力の例:
# virsh dumpxml r5b2-mySQL01 <domain type='xen' id='13'> <name>r5b2-mySQL01</name> <uuid>4a4c59a7ee3fc78196e4288f2862f011</uuid> <bootloader>/usr/bin/pygrub</bootloader> <os> <type>linux</type> <kernel>/var/lib/libvirt/vmlinuz.2dgnU_</kernel> <initrd>/var/lib/libvirt/initrd.UQafMw</initrd> <cmdline>ro root=/dev/VolGroup00/LogVol00 rhgb quiet</cmdline> </os> <memory>512000</memory> <vcpu>1</vcpu> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <interface type='bridge'> <source bridge='xenbr0'/> <mac address='00:16:3e:49:1d:11'/> <script path='vif-bridge'/> </interface> <graphics type='vnc' port='5900'/> <console tty='/dev/pts/4'/> </devices> </domain>
ゲストは XML 設定ファイルから作成することができます。以前に作成されているゲストから 既存の XML をコピーするか、又は dumpxml
オプションを使用します。 (仮想マシン XML ダンプ(設定ファイル)を作成 参照) virsh
を 使用して XML ファイルからゲストを作成するには:
# virsh create configuration_file.xml
dumpxml
オプション ( 仮想マシン XML ダンプ(設定ファイル)を作成 を参照) を使用する代わりに、 ゲストは、それが稼働中でも、オフライン中でも編集することができます。virsh edit
コマンドがこの機能を提供します。例えば、softwaretesting
と 言う名前のゲストを編集するには:
# virsh edit softwaretesting
$EDITOR
シェルパラメータです(デフォルトで vi
にセット)。
virsh
を使用してゲストを休止します:
# virsh suspend {domain-id, domain-name or domain-uuid}
resume
(ゲストの復帰) オプションで再開始する必要があります。
resume
オプションと共に virsh
を 使用して休止中のゲストを復帰します:
# virsh resume {domain-id, domain-name or domain-uuid}
suspend
と resume
操作用に保持されます。
virsh
コマンドを使用してゲストの現在の状態をファイルに 保存します:
# virsh save {domain-name, domain-id or domain-uuid} filename
restore
(ゲストの復帰) オプションで復帰することができます。保存は休止と似ていますが、単なる休止の代わりに ゲストの現在の状態が保存されます。
virsh save
コマンド(ゲストを保存) で以前に保存されたゲストを virsh
を使用して 復帰します:
# virsh restore filename
virsh
コマンドを使用してゲストをシャットダウンします:
# virsh shutdown {domain-id, domain-name or domain-uuid}
on_shutdown
パラメータを修正することで制御できます。
virsh
コマンドを使用してゲストを再起動します:
#virsh reboot {domain-id, domain-name or domain-uuid}
on_reboot
エレメントを修正することで制御できます。
virsh
コマンドを使用してゲストの停止を強制します:
# virsh destroy {domain-id, domain-name or domain-uuid}
virsh destroy
を使用すると、ゲストのファイルシステムを 破損するかも知れません。destroy
オプションは、ゲストが 反応しない時にのみ使用して下さい。para-virtualized ゲスト用には代わりに shutdown
オプション (ゲストのシャットダウン) を使用します。
ゲストのドメイン ID を取得するには:
# virsh domid {domain-name or domain-uuid}
ゲストのドメイン名を取得するには:
# virsh domname {domain-id or domain-uuid}
ゲストの UUID(Universally Unique Identifier)を取得するには:
# virsh domuuid {domain-id or domain-name}
virsh domuuid
の出力の例:
# virsh domuuid r5b2-mySQL01 4a4c59a7-ee3f-c781-96e4-288f2862f011
ゲストのドメイン ID、ドメイン名、あるいは UUID と共に virsh
を 使用すると、指定したゲストの情報を表示することができます:
# virsh dominfo {domain-id, domain-name or domain-uuid}
virsh dominfo
出力の例を示します:
# virsh dominfo r5b2-mySQL01 id: 13 name: r5b2-mysql01 uuid: 4a4c59a7-ee3f-c781-96e4-288f2862f011 os type: linux state: blocked cpu(s): 1 cpu time: 11.0s max memory: 512000 kb used memory: 512000 kb
ホストに関する情報を表示するには:
# virsh nodeinfo
virsh nodeinfo
出力の例 :
# virsh nodeinfo CPU model x86_64 CPU (s) 8 CPU frequency 2895 Mhz CPU socket(s) 2 Core(s) per socket 2 Threads per core: 2 Numa cell(s) 1 Memory size: 1046528 kb
virsh
コマンドを使用してゲストの一覧とその現在状態を 表示するには:
# virsh list
--inactive
オプション 。そして
--all
オプション。 例えば:
# virsh list --all Id Name State ---------------------------------- 0 Domain-0 running 1 Domain202 paused 2 Domain010 inactive 3 Domain9600 crashed
virsh list
からの出力は6つの状態の1つとして 分類されます(以下の一覧)。
running
状態は CPU 上で現在活動中のゲストを 示します。blocked
として表示してあるゲストは阻止されており、 実行していないか、又は実行不可能です。これは I/O 待ちのゲスト(旧来の wait 状態)か、 スリープモードのゲストがその要因です。paused
状態は休止中のドメインを一覧表示します。 これは、管理者がvirt-manager
、xm pause
、 又はvirsh suspend
で、pause ボタンを使用する ことで発生します。ゲストが休止している時は、メモリーとその他のリソースを消費しますが、スケジュールと hypervisor からの CPU リソースには無視できる量です。shutdown
状態は シャットダウンプロセスにある ゲスト用のものです。ゲストはシャットダウン信号を受けてその運用を丁寧に終了するプロセスに 入るべき状態です。これは全てのゲストオペレーティングシステムでは機能しないかも知れません。 一部のオペレーティングシステムはこの信号に良く反応しません。dying
状態のドメインはご臨終のプロセスにある ものです。これはドメインがシャットダウンやクラッシュを完全に終了していない状態を指します。crashed
の場合、ゲストは実行中に障害を受け、もう 実行していない状態です。この状態はクラッシュ時にゲストが再スタートしないように設定されている 場合にのみ発生します。
virsh
を使用してゲストからの仮想 CPU の情報を 表示するには:
# virsh vcpuinfo {domain-id, domain-name or domain-uuid}
virsh vcpuinfo
出力の例:
# virsh vcpuinfo r5b2-mySQL01 VCPU: 0 CPU: 0 State: blocked CPU time: 0.0s CPU Affinity: yy
物理 CPU を使用して、仮想 CPU の類似物を設定するには:
# virsh vcpupin domain-id vcpu cpulist
domain-id
パラメータはゲストの ID 番号、又は名前です。
vcpu
パラメータは、ゲストに割り当てられた仮想 CPU の数を示します。 vcpu
パラメータは必須項目です。
cpulist
パラメータは、コンマで区切られた物理 CPU の 識別子番号の一覧です。cpulist
パラメータはどの物理 CPU で VCPU が稼働するかを決定します。
virsh
を使用してゲストに割り当てられた CPU の数を 修正するには:
# virsh setvcpus {domain-name, domain-id or domain-uuid} count
count
値はゲストが作成された時に指定されたカウントを 超過することは出来ません。
virsh
を使用してゲストのメモリー割り当てを修正するには:
# virsh setmem {domain-id or domain-name} count
virsh domblkstat
を使用すると稼働中のゲストの ブロックデバイス統計が表示できます。
# virsh domblkstat GuestName block-device
virsh domifstat
を使用すると、稼働中のゲストの ネットワークインターフェイス統計が表示できます。
# virsh domifstat GuestName interface-device
ゲストは virsh
を使用して別のホストへ移行することが できます。ドメインを別のホストへ移行します。ライブ移行用には --live を追加します。 migrate
コマンドは以下の形式のパラメータを受け付けます:
# virsh migrate --live GuestName DestinationURL
--live
パラメータはオプションです。ライブ移行用には --live
パラメータを追加します。
GuestName
パラメータは移行したいゲストの名前を示します。
DestinationURL
パラメータは移行先システムの URL 又はホスト名です。移行先システムは以下を必要とします:
- Red Hat Enterprise Linux の同じバージョン
- 同じ hypervisor (KVM か Xen)、それに
libvirt
サービスが開始する必要があります。
このセクションでは、virsh
コマンドを使用した仮想化 ネットワークの管理を説明します。仮想化ネットワークを一覧表示するには:
# virsh net-list
# virsh net-list Name State Autostart ----------------------------------------- default active yes vnet1 active yes vnet2 active yes
# virsh net-dumpxml NetworkName
# virsh net-dumpxml vnet1 <network> <name>vnet1</name> <uuid>98361b46-1581-acb7-1643-85a412626e70</uuid> <forward dev='eth0'/> <bridge name='vnet0' stp='on' forwardDelay='0' /> <ip address='192.168.100.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.100.128' end='192.168.100.254' /> </dhcp> </ip> </network>
virsh
コマンドを以下に示します:
virsh net-autostart [network name]
— network-name で指定された ネットワークを自動開始します。virsh net-create XMLfile
— 既存の XML ファイルを使用して新規のネットワークを生成して開始します。virsh net-define XMLfile
— 既存の XML ファイルから新規のネットワークデバイスを生成しますが開始しません。virsh net-destroy network-name
— network-name として指定された ネットワークを破棄します。virsh net-name networkUUID
— 指定された networkUUID をネットワーク名に変換します。virsh net-uuid network-name
— 指定された network-name をネットワーク UUID に変換します。virsh net-start nameOfInactiveNetwork
— 休止中のネットワークを開始します。virsh net-undefine nameOfInactiveNetwork
— 休止中のネットワークを定義解除します。