推奨される方式である libvirt
ライブラリによる管理 ( パートII「libvirt
を利用した仮想マシンの管理」 ) とは別に、コマンドラインから Xen 専用のツールである xl
を使用することで、 Xen のゲストドメインを管理することもできます。
xl
コマンドは Xen ゲストドメインを管理するためのツールです。このプログラムは xen-tools パッケージ内に含まれています。 xl
コマンドは LibXenlight ライブラリをベースにして作られていますので、ドメインの作成や一覧表示、一時停止やシャットダウンなど、一般的なゲスト管理を行うことができます。通常は xl
コマンドを実行するのに root
の権限が必要となります。
xl
コマンドは設定ファイルを指定しますが、動作中のゲストドメインのみを管理することができます。対象のゲストドメインが動作中ではない場合、 xl
コマンドによる管理を行うことができません。
従来の xm
コマンドで実現できていた、一般ユーザからのゲストドメイン管理を行いたい場合は、 libvirt
側に用意されている virsh
と virt-manager
の各ツールをお使いください。詳しくは パートII「libvirt
を利用した仮想マシンの管理」 をお読みください。
xl
を動作させるには、 xenstored
サービスと xenconsoled
サービスを開始しておく必要があります。下記を実行して開始しておいてください:
>
systemctl start xencommons
"\n \n"
xenbr0
ネットワークブリッジの設定について最も一般的なネットワーク設定では、ホストドメイン側に xenbr0
という名前のブリッジを作成して、ゲストドメインのネットワークを動作させます。
xl
コマンドの基本構造は下記のとおりです:
xl <サブコマンド> [オプション] ドメイン_ID
ここで、 <サブコマンド> には実行すべき xl のサブコマンドを、 ドメイン_ID にはドメインに対して割り当てられた ID か、仮想マシンの名前を、そして [オプション] にはサブコマンドごとに固有のオプション類を指定します。
利用可能な全ての xl
のサブコマンドの一覧を表示するには、 xl help
コマンドを実行してください。このほか、各サブコマンドに対して詳細なヘルプも表示することができます。この場合は、サブコマンドのオプションとして --help
を指定してください。また、サブコマンドに関する詳細は、 xl
のマニュアルページにも記載があります。
たとえば xl list --help
のように入力して実行すると、 list コマンドに対して指定可能な全てのオプションが表示されます。ちなみに、 xl list
コマンドは、全ての仮想マシンの状態を一覧表示するためのコマンドです。
>
sudo
xl list Name ID Mem VCPUs State Time(s) Domain-0 0 457 2 r----- 2712.9 sles12 7 512 1 -b---- 16.3 opensuse 512 1 12.9
r
(running; 動作中) と b
(blocked; ブロック中) (IO 処理待ち、もしくは何もすべきことが無く、待機中) です。状態 (State) フラグの一覧に関する詳細は、 man 1 xl
のマニュアルページをお読みください。
その他の xl
サブコマンドには、下記のようなものがあります:
xl create
: 指定した設定ファイルから仮想マシンを作成します。
xl reboot
: 仮想マシンを再起動します。
xl destroy
: 仮想マシンを即時に停止します。
xl block-list
: 仮想マシンに接続されている全ての仮想マシンを表示します。
ゲストドメイン (仮想マシン) を動作させるにあたって、 xl
ではゲストドメイン向けの設定ファイルが必要となります。設定ファイルを保存しておくための既定のディレクトリは /etc/xen/
です。
ドメインの設定ファイルは純粋なテキスト形式です。ここには キー = 値 の形式で、さまざまな設定が記述されます。キーによっては必須のものもあるほか、一般的で任意のゲストに適用することができるものや、特定の種類のゲストにのみ適用できるもの (たとえば完全仮想化環境専用の設定など) があります。値は "文字列"
のようにして、単一もしくは二重引用符で括ることもできるほか、数値やブール値、もしくは [ 値_1, 値_2, ... ]
のように括弧で複数の値をまとめることもできます。
/etc/xen/sled12.cfg
#name= "sled12" builder = "hvm" vncviewer = 1 memory = 512 disk = [ '/var/lib/xen/images/sled12.raw,,hda', '/dev/cdrom,,hdc,cdrom' ] vif = [ 'mac=00:16:3e:5f:48:e4,model=rtl8139,bridge=br0' ] boot = "n"
上記のドメインを起動するには、 xl create /etc/xen/sled12.cfg
を実行します。
ホスト側のシステムが起動した際にゲストドメインを自動的に起動したい場合は、下記の手順を実施します:
ドメインの設定ファイルを作成していない場合は、 /etc/xen/
ディレクトリ内に作成します。たとえば /etc/xen/domain_name.cfg
のようになります。
auto/
サブディレクトリ内に、ゲストドメインの設定ファイルに対するシンボリックリンクを作成します。
>
sudo
ln -s /etc/xen/domain_name.cfg /etc/xen/auto/domain_name.cfg
このように設定することで、システムの起動時に domain_name.cfg
で設定されたゲストドメインが開始するようになります。
ゲスト側の設定ファイルでは、さまざまなイベントに対応するアクションを設定することができます。たとえばゲスト側の電源が落とされた際、その後にドメインを再起動させたい場合は、設定ファイル内に下記を記述します:
on_poweroff="restart"
ゲストドメインで利用できるイベントには、下記のようなものがあります:
ドメインをシャットダウンした際に取るべきアクションを指定します。
ドメインが再起動を要求するような理由コード付きのシャットダウンを受け取った際に、取るべきアクションを指定します。
Xen のウオッチドッグタイムアウトにより、ドメインをシャットダウンする際に取るべきアクションを指定します。
ドメインがクラッシュした際に取るべきアクションを指定します。
これらのイベントに対して、下記のアクションを指定することができます:
ドメインを強制停止します。
ドメインを強制停止したあと、同じ設定のまま新しいドメインを作成します。
ドメインを強制停止したあと名前を変更し、元の名前で新しいドメインを作成します。
ドメインを維持します。ここから何らかの調査を行うことができます。調査が終わったら、 xl destroy
で停止を行うことができます。
/var/xen/dump/名前
内にドメインのコアダンプを書き込んだあと、ドメインを強制停止します。
/var/xen/dump/名前
内にドメインのコアダンプを書き込んだあと、ドメインを再起動します。
Time Stamp Counter (TSC) をゲストドメインの設定ファイル (詳しくは 26.1.1項 「ゲストドメインの設定ファイル」 をお読みください) 内に設定することができます。
tsc_mode
の設定を行うことで、 rdtsc インストラクションをネイティブで動作させる (高速に動作するものの、 TSC を厳格に処理するアプリケーションが正しく動作しなくなってしまうことがあります) か、もしくは擬似的に動作させる (常に正しく動作しますが、性能が劣化します) かを制御することができます。
tsc_mode=0
(既定値)性能をできるだけ劣化させず、かつ正確性を維持する方式です。詳しくは https://xenbits.xen.org/docs/4.3-testing/misc/tscmode.txt (英語) をお読みください。
tsc_mode=1
(常に擬似的に動作させる)TSC を厳格に処理するアプリケーションが存在していて、かつ最大限の性能劣化を許容できるシステムである場合に指定する方式です。
tsc_mode=2
(擬似的に動作させない)TSC を厳格に処理するアプリケーションが存在せず、最大限の性能を発揮させる必要のあるシステムである場合に指定する方式です。
tsc_mode=3
(PVRDTSCP)頻繁に TSC を使用するアプリケーションが存在する場合、準仮想化 (修正済み) で動作させることによって、正確性と高性能の両方を実現することができます。未修正のアプリケーションについては、 TSC に対する耐性が必須となります。
背景となる情報について、詳しくは https://xenbits.xen.org/docs/4.3-testing/misc/tscmode.txt をお読みください。
まずは保存したい仮想マシンが動作中であることを確認します。
ホスト側の環境で下記を実行します:
>
sudo
xl save ID 状態ファイル
ここで ID には保存対象の仮想マシンの ID を、 状態ファイル にはメモリの状態を保存するためのファイルを指定します。 既定では、このようにして保存を行った場合、対象のドメインは停止されますが、 -c
を指定することで動作させたままの状態にすることもできます。
まずは対象の仮想マシンが開始されていないことを確認します。
ホスト側の環境で下記を実行します:
>
sudo
xl restore 状態ファイル
ここで、 状態ファイル には保存時に使用したファイルのファイル名 (パス) を指定します。既定では再開を行うと動作中の状態に戻りますが、 -p
を指定することで、一時停止中のままにしておくこともできます。
仮想マシンの状態は xl list
コマンドで表示することができます。このとき、状態は下記に示す 1 文字の略記で表されます。
r
(running (動作中)): 仮想マシンが動作していて、割り当てられたリソースを使用していることを示しています。
b
(blocked (ブロック中)): 仮想マシンのプロセッサが動作しておらず、かつ動作できない状態であることを示しています。 I/O の処理待ち、もしくは停止処理中であることを表しています。
p
(paused (一時停止中)): 仮想マシンが一時停止中であることを表しています。ハイパーバイザとの通信は行われていませんが、メモリなどのリソースは使用したままの状態になります。
s
(shutdown (シャットダウン中)): ゲスト側のオペレーティングシステムでシャットダウンや再起動、サスペンド処理などを行っていて、仮想マシンが停止されつつある状態であることを表しています。
c
(crashed (クラッシュ済み)): 仮想マシンがクラッシュしていて、動作していないことを表しています。
d
(dying (死亡中)): 仮想マシンがシャットダウン中であるか、クラッシュ中であることを表しています。