第22章 virsh でゲストを管理

virsh はゲストと hypervisor を管理するための コマンドラインインターフェイスです。
virsh ツールは libvirt 管理 API を 土台にして構築されており、xm コマンドとグラフィカルゲスト マネージャ (virt-manager) への代替として機能します。 virsh は特別権限のないユーザーにより読み込み専用モードで 使用可能です。 virsh を使用してゲストマシン用のスクリプトを 実行することができます。
virsh コマンドのクイックリファレンス

以下の表では、全ての virsh コマンドラインオプションのクイックリファレンスを 提供します。

表22.1 ゲスト管理のコマンド

コマンド 説明
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 リソースを 管理します:

表22.2 リソース管理のオプション

コマンド 説明
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 オプションを示します:

表22.3 その他のオプション

コマンド 説明
version virshのバージョンを表示します。
nodeinfo hypervisor に関する情報を出力します。
Hypervisor への接続

virsh で hypervisor セッションへ接続します:

# virsh connect {hostname OR URL}
ここで、<name> は hypervisor のマシン名です。読み込み専用の接続を開始したい場合、上記のコマンドに -readonly を追記します。
仮想マシン XML ダンプ(設定ファイル)を作成

virsh でゲストの XML 設定ファイルを出力します:

# virsh dumpxml {domain-id, domain-name or domain-uuid}
このコマンドはゲストの XML 設定ファイルを標準出力 (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}
ゲストが休止状態にある時も、まだシステム RAM は消費していますが、プロセッサリソースは 消費しません。休止中にはディスク、又はネットワークの I/O はありません。この運用は直ちに 実行されますので、ゲストは 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
これが、保存していたゲストを再開始しますが、少々時間を取ります。ゲストの名前と UUID は保持されていますが、新しい id に割り当てされます。
ゲストのシャットダウン

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 を取得

ゲストのドメイン ID を取得するには:

# virsh domid {domain-name or domain-uuid}
ゲストのドメイン名を取得

ゲストのドメイン名を取得するには:

# virsh domname {domain-id or domain-uuid}
ゲストの 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-managerxm pause、 又は virsh suspend で、pause ボタンを使用する ことで発生します。ゲストが休止している時は、メモリーとその他のリソースを消費しますが、スケジュールと hypervisor からの CPU リソースには無視できる量です。
  • shutdown 状態は シャットダウンプロセスにある ゲスト用のものです。ゲストはシャットダウン信号を受けてその運用を丁寧に終了するプロセスに 入るべき状態です。これは全てのゲストオペレーティングシステムでは機能しないかも知れません。 一部のオペレーティングシステムはこの信号に良く反応しません。
  • dying 状態のドメインはご臨終のプロセスにある ものです。これはドメインがシャットダウンやクラッシュを完全に終了していない状態を指します。
  • crashed の場合、ゲストは実行中に障害を受け、もう 実行していない状態です。この状態はクラッシュ時にゲストが再スタートしないように設定されている 場合にのみ発生します。
仮想 CPU 情報の表示

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 を使用して、仮想 CPU の類似物を設定するには:

# virsh vcpupin domain-id vcpu cpulist
domain-id パラメータはゲストの ID 番号、又は名前です。
vcpu パラメータは、ゲストに割り当てられた仮想 CPU の数を示します。 vcpu パラメータは必須項目です。
cpulist パラメータは、コンマで区切られた物理 CPU の 識別子番号の一覧です。cpulist パラメータはどの物理 CPU で VCPU が稼働するかを決定します。
仮想 CPU カウントの設定

virsh を使用してゲストに割り当てられた CPU の数を 修正するには:

# virsh setvcpus {domain-name, domain-id or domain-uuid} count
新しい count 値はゲストが作成された時に指定されたカウントを 超過することは出来ません。
メモリー割り当ての設定

virsh を使用してゲストのメモリー割り当てを修正するには:

# virsh setmem {domain-id or domain-name} count
count はキロバイトで指定する必要があります。新しいカウントは ゲストを作成した時に指定した数量を超えることができないことに注意して下さい。64 MB より低い値はほとんどのオペレーティングシステムでは多分機能しないでしょう。最大メモリーを上げても 活動中ゲストに影響することはありません。新しい値がより低い場合、利用可能なメモリーは 縮小し、ゲストはクラッシュする可能性があります。
ゲストブロックデバイス情報の表示

virsh domblkstat を使用すると稼働中のゲストの ブロックデバイス統計が表示できます。

# virsh domblkstat GuestName block-device
ゲストネットワークデバイス情報の表示

virsh domifstat を使用すると、稼働中のゲストの ネットワークインターフェイス統計が表示できます。

# virsh domifstat GuestName interface-device 
virsh でゲスト移行を管理

ゲストは virsh を使用して別のホストへ移行することが できます。ドメインを別のホストへ移行します。ライブ移行用には --live を追加します。 migrate コマンドは以下の形式のパラメータを受け付けます:

# virsh migrate --live GuestName DestinationURL
--live パラメータはオプションです。ライブ移行用には --live パラメータを追加します。
GuestName パラメータは移行したいゲストの名前を示します。
DestinationURL パラメータは移行先システムの URL 又はホスト名です。移行先システムは以下を必要とします:
  • Red Hat Enterprise Linux の同じバージョン
  • 同じ hypervisor (KVM か Xen)、それに
  • libvirt サービスが開始する必要があります。
コマンドが入力された後は、目的地システムの root パスワードを 要求されます。
仮想ネットワークの管理

このセクションでは、virsh コマンドを使用した仮想化 ネットワークの管理を説明します。仮想化ネットワークを一覧表示するには:

# virsh net-list
このコマンドは以下のような出力を出します:
# virsh net-list
Name                 State      Autostart
-----------------------------------------
default              active     yes      
vnet1                     active     yes      
vnet2                     active     yes
特定の仮想ネットワークの為のネットワーク情報を表示するには:
# virsh net-dumpxml NetworkName
この画面は指定された仮想ネットワークに関する情報を XML 形式で表示します:
# 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-namenetwork-name として指定された ネットワークを破棄します。
  • virsh net-name networkUUID — 指定された networkUUID をネットワーク名に変換します。
  • virsh net-uuid network-name — 指定された network-name をネットワーク UUID に変換します。
  • virsh net-start nameOfInactiveNetwork — 休止中のネットワークを開始します。
  • virsh net-undefine nameOfInactiveNetwork — 休止中のネットワークを定義解除します。