Xenとは

Xenは Walbrixで使用されている仮想化技術です。完全仮想化方式の KVMを採用する通常の汎用 Linuxディストリビューションとは異なり、Walbrixは Xenを採用し準仮想化方式による低負荷で経済的な仮想環境を提供しています。

コマンドラインの利用

Xenを直接制御するにはコマンドラインを利用します。Walbrixのコマンドラインを利用するには、「設定とツール」メニューから「Linuxコンソールの利用」に入るか、sshでLAN内の他のコンピュータからログインしてください(※)。

※ sshは空パスワードでのログインを許可しないため、sshでWalbrixにログインするためには rootのパスワードを事前に設定するか /root/.ssh/authorized_keys に公開鍵を追記しておく必要があります。

実行中の仮想マシン一覧

実行中の仮想マシンを一覧するには xl list コマンドを使用します。

# xl list
Name                                        ID   Mem VCPUs	State	Time(s)
Domain-0                                     0  1023     8     r-----  319728.7
redmine                                     10   768     1     -b----    5087.7
handbrake                                   19   512     1     -b----    3530.1
gentoo                                      22   768     1     -b----    6160.1

Nameは仮想マシン名、IDは仮想マシンの数値ID、Memは割り当てられたRAM容量、VCPUsは割り当てられた仮想 CPU数、、Stateは状態(rはrunning, bはblocking), Timeは起動してから消費された CPU時間の累計(秒)です。

Xenでは各仮想マシンをドメイン(domain)と呼びます。我々が実機だと思って操作している Linux環境も Xenの配下では仮想マシンの扱いとなっており、それを Domain-0 (ドメイン0, dom0) と呼びます。それ以外の仮想マシン(一般的な意味での仮想マシン)は Domain-U (ドメインU, domU) と呼ばれます。

xl listでリストを取ると、dom0の Stateは常にrとなります(xl listの処理そのものをしているため)。もし Stateが常に r のままになっているような domUがある場合、長い時間のかかる処理を行っているか、何らかのプロセスが暴走している可能性が高いと思われます。

仮想マシンの停止

仮想マシンをシャットダウンするには、xl shutdown コマンドを使用します。

# xl shutdown redmine

xl shutdownコマンドを発行すると仮想マシンはシャットダウン処理を行い、のちに停止します(xl listコマンドに現れなくなります)。暴走しており通常のシャットダウンができない場合など、正常なシャットダウンのプロセスを経ずに強制停止する必要がある場合は代わりに xl destroy コマンドを使用してください。

# xl destroy redmine

この場合仮想マシンは即時に停止されますが、実機で言えばいきなり電源を切る行為に等しいためファイルシステムに全ての更新が反映されている保証はありません。

仮想マシンへのログイン

仮想マシンがネットワークに接続されており sshでリモートログインできる状況であればそうすれば良いのですが、何らかの理由でリモートからログインできない場合は仮想マシンのコンソールへ直接アクセスする必要があります。仮想マシンのコンソールに接続するには、xl console コマンドを使用します。

# xl console redmine

redmine login: 

コマンド入力後に何も表示されない場合は Enterキーを押してみて下さい。ログインプロンプトが表示されれば、ユーザー名とパスワードを入力してシステムにログインすることができます。WalbrixのGUIから作成した仮想マシンの場合、rootのパスワードは Walbrixのシリアルナンバー(未登録の場合は英大文字と数字で WBFREE01)となっています。

仮想マシンのコンソールから離脱するには Ctrlキーを押しながら ] (カギ括弧閉じ)を押して下さい(※)。コンソールからの離脱はシステムからログアウトして login: プロンプトの出た状態で行うと良いでしょう。

※ カギ括弧閉じのキーはキーボード種別の設定が合っていないと効かないので注意してください(Walbrixのデフォルトは日本語キーボードです)。

仮想マシンの起動

停止されている(xl listに出現しない)仮想マシンを起動するには、xl createコマンドを使用します。コマンドのパラメータとして、仮想マシンの設定ファイル名を与える必要があります。

仮想マシンの設定ファイルは /etc/xen 以下にあります。

# xl create /etc/xen/redmine

設定ファイルの内容に誤りがある場合や、仮想マシンに割り当てるためのメモリが不足している場合はエラーとなります。xl create コマンドが成功すると xl listコマンドに仮想マシンが表示されるようになりますが、Stateが p のままいくら待っても変化しない場合は何らかの問題でシステムの起動ができない状態ですので xl destroyコマンドで強制停止して問題の原因を調査してください。

仮想マシンの起動と同時にコンソールに接続することもできます。これにより OSの起動メッセージを確認することができます。xl create コマンドに -c オプションを付けて下さい。

# xl create -c /etc/xen/redmine

仮想マシンのコンソールに接続した後の操作については前述の「仮想マシンのへのログイン」を参照して下さい。

仮想マシンの設定ファイル

前述の通り、仮想マシンの設定ファイルは慣習的に /etc/xen 以下に仮想マシン名=ファイル名で保存されることになっています。

仮想マシンの設定ファイルはテキストファイルです。UNIX文化圏では vi を使用してテキストファイルを編集するのが通常ですが、viの操作に慣れていない人は nano という初心者向けのテキストエディタがありますのでそちらを使ってみて下さい。nano /etc/xen/redmine で redmine仮想マシンの設定ファイルを開くことができます。エディタの終了は Ctrl+X です。

name="redmine"
memory=192
kernel="/usr/lib/xen/boot/pv-grub-x86_32.gz"
extra="(hd0)/boot/grub/menu.lst"
vcpus=1
disk=[ "phy:/dev/wbvg/redmine,xvda1,w" ]
vif=[""]
パラメータ意味
name仮想マシン名です。Walbrixは仮想マシンの設定ファイル名と仮想マシン名が一致している前提で処理を行いますので、ここを変更した場合は仮想マシンの設定ファイル名もあわせて変更してください。
memory仮想マシンに割り当てるメモリ容量です。単位はMBです。
kernel, extra仮想マシンのカーネルに関する設定です。意味が分かる場合以外は変更しないでください。
vcpus仮想マシンのCPU数です。Walbrixでは通常1CPUのみが仮想マシンに与えられますが、仮想マシンに複数CPUを割り当てたい場合はここの値を増やして下さい。メモリと違い、CPUは各仮想マシンに独占的に与えられるわけではないので、同時に稼働する仮想マシンにおけるこの値の合計がシステムの実CPUコア数を越えていても問題ありません。
disk仮想ディスクの設定です。Walbrixでは、論理ボリュームを作成してそれをXFSでフォーマットしたものを各仮想マシンの第1ストレージ・第1パーティション(/dev/xvda1)として割り当てます。(Xenの準仮想マシンには、ストレージとしてディスクではなくパーティションを直接与えることができます)
vif仮想ネットワークインターフェイスの設定です。vif=[""] とだけ指定すると、仮想マシンの eth0が実インターフェイスの eth0として割り当てられます。省略せずに書くと vif=["bridge=eth0"] です。

仮想マシンの作成

Xen自体には仮想マシンの新規作成を支援する機能はありませんので、このセクションは Xen一般ではなく Walbrixの場合について言及します。

準仮想化では完全仮想化と違って OSのインストーラを動作させることができないため、仮想マシンを新規に作成するには準仮想化環境用にあらかじめ構築された OSイメージを展開する必要があります。(準仮想化技術が Amazon EC2で採用されているにも関わらずいまいち世間に理解されない理由の一つはこのハードルの高さだと思います)

Walbrixでは、仮想マシンの新規作成を内部で下記のように行っています。

  1. 仮想ディスクとなる論理ボリュームの作成(lvcreate)
  2. ボリュームのフォーマット(mkfs.xfs)
  3. ボリュームをマウントし、既成の仮想マシンイメージをダウンロードすると同時に展開(tar Jxpf)
    ダウンロードと展開を完全にひとつのストリームで行うことで仮想マシンの高速な作成を実現しています
  4. /etc/xen 以下に仮想マシンの設定ファイルを作成

Linuxのボリューム管理によほど慣れていなければこれらの操作を手動で行うのは困難なため、それを代行するものとして WalbrixのGUIがあるわけですが、Walbrixにはさらにそれをコマンドラインで行う方法もあります。ワルブリックス株式会社が提供している準仮想化環境用 CentOS 6.4(32bit)のイメージを使用して仮想マシンを新規作成するには下記のようにします。

wb install-va http://va.walbrix.net/i686/centos-i686-jp.json

centos-i686-jp.json は http経由でもローカルファイルでも構いません。内容は下記のようになっています。

{
	"id":"centos",
	"title":"CentOS 6.4",
	"images":[{"url":"http://va.walbrix.net/img/centos01.png"}],	
	"tarball":"http://dist.walbrix.net/va/centos-6.4-i686-jp.tar.xz",
	"description":"CentOS",
	"minimum_ram":96,
	"minimum_hd":2
}

関係ないけど、vagrantの githubでの最初の履歴が2010年3月、Walbrixが弊社ブログで公表されたのは 2010年4月頃だったようです。

wb install-vaコマンドは与えられた jsonファイルから id, tarball, minimum_ram, minimum_hd フィールドを読み取って仮想マシンの作成処理を一括で行います。オプション指定については wb install-va --help で確認してください。

お気づきかもしれませんが、Walbrixで使用される仮想マシンイメージファイルは OVFでもなんでもなく単なる tarアーカイブなので、これを展開・カスタマイズして再アーカイブするだけでごく簡単に自分独自のテンプレートを作成することができます。