Edit
Xenとは?

ここでは解読性を向上させるために、Xen特有のHypervisorとDomain0のことを「ホストOS」、DomainUのことを「ゲストOS」と呼ぶことにとしている。

Edit
ホストOSのInstall

ここでは、まっさらなマシン上にXENを導入する手順を説明する。

Edit
OSイメージの取得

# wget http://ftp.iij.ad.jp/pub/linux/centos/5.7/isos/i386/CentOS-5.7-i386-netinstall.iso

Edit
ホストOSへのXENの導入確認

ホストOSが導入されたら、ログインしたのち以下のコマンドで、XENが正しくインストールされているか確認する。最初にプロセスの起動を行う。すでに起動していれば問題ない。

# service xendomains start

XMコマンドで確認する。

# xm list
  Name                                  ID Mem(MiB) VCPUs State   Time(s)
  Domain-0                               0     1500     2 r-----     12.5

上記のように表示されれば、無事インストールは終了したと見てよい。また、念のためにホストOSインストール後は、yumを最新にしておく。

# yum update -y

またゲストOSを導入する前に、SELinuxをOFFにしておくとインストールが早くなる場合があるため、ここではSELinuxをOFFにしておく、必要であれば後でONにしておくこと。

# setenforce permissive

Edit
xm listのStateの解説

State領域の状態の説明
r稼働中であり、CPUを使用している状態です
bI/O待ち、またはタスクがなくCPUを使用していない状態です
p一時停止中。xm pauseコマンドによってこの状態になります
sシャットダウン中。但し、完全にシャットダウンした後は一覧には表示されない
c不具合によって稼働不能となった状態
d上記、c状態になるまでの経過状態

Edit
ゲストドメイン の作成

先に、イメージファイルの場所を作っておく

# mkdir /xen/images
# virt-install
     -n srv-name        <- ゲストOSの名前を設定する。
     --nographics       <- GUIを利用しない
     -p                 <- 準仮想化で作成する
     --vcpus=1          <- 設定するCPU数
     -r 256             <- メモリを256MBに設定
     -s 8               <- 割当ディスク容量はGigabyte単位で指定
     --nonsparse
     -f /xen/images/server.domain.com.img <- 仮想サーバの作成ファイル
     -l http://ftp.riken.jp/Linux/centos/5.3/os/i386 <-Install元ファイル場所

※上記コマンドは、1行として利用する。(区切はスペースを利用)
例:virt-install -n proxy --nographics -p --vcpus=1 -r 256 -s 8 --nonsparse -f /xen_images/proxy.img -l http://ftp.riken.jp/Linux/centos/5/os/i386

Edit
オプションの説明

Edit
ゲストOS から ホストOS への復帰

キーボードで、

CTRL+]

を押す。

Edit
ホストOS からゲストOSの操作

現在登録されているドメインの一覧表示

# xm list
 Name                    ID Mem(MiB) VCPUs State   Time(s)
 Domain-0                 0     7624     4 r-----    111.8
 centos53                 2      255     1 -b----     14.8

※ゲストOSが起動していない場合には、ゲストOS名(ここではcentos53)などの表示がされない。あくまで起動しているものだけが表示される。

Edit
その他のゲストOSコマンド

centos53というドメインにコンソールを切り替える

# xm console centos53

コンソールにつながらないときは、xenconsoledが落ちている場合がおおいので、

# xenconsoled

で起動。ps ax コマンドで起動確認。

centos53というドメインの終了

# xm shutdown centos53

centos53というドメインの起動

# xm create -c centos53   <- -c を付けるとそのままゲストOSにコンソール移動

centos53というドメインの強制終了

# xm destroy centos53

centos53というドメインの削除。但し、正常に動いたことがない。現在、削除の方法が不明。

# virsh unregister domain-name              <- domain IDでも可 (undefineかも)

domain情報の表示

# virsh dominfo domain-name

Edit
ゲストOSの複製

xenでは、ゲストOSの設定ファイルを、/etc/xen/ゲストOS名、に保存しており、また、ゲストOSのディスクイメージを、/xen/images/ゲストOS名に保存する。(上記設定の場合)そこで、停止しているゲストOSを以下の手順で複製する。

# cp /etc/xen/ゲストOSの設定 /etc/xen/新ゲストOSの設定
# cp /xen/images/ゲストOSのイメージ /xen/images/新ゲストOSのイメージ

Edit
設定ファイルの修正

# emacs /etc/xen/新ゲストOSの設定

このファイルの「uuid」「name」「disk」「vif」を修正する。uuidとvifの番号はユニークである必要があるため、番号を修正する。
ホストOSで認識しているデバイスをゲストOSでも認識させる。

# emacs /etc/xen/<guestos-name>
 disk = [ "tap:aio:/xen_images/www.img,xvda,w" , "phy:sdb1,sdb1,w" ]

この後ろに追加した"phy:sdb1,sdb1,w"で、/dev/sdb1 をゲストOSでも認識できるようになる。

Edit
ゲストOS の自動起動

# ln -s /etc/xen/centos53 /etc/xen/auto/centos53

Edit
起動中のゲストOSの容量を増やす

# cd /xen-images                       <- 自分が保存しているxenのイメージの場所
# dd if=/dev/zero bs=1M count=0 seek=8192 of=./zero.img     <- 8GB追加予定
# mv guestos.img guestos.img.bak
# cat guestos.img.bak zero.img > guestos.img                <- 結合
# losetup -f
  /dev/loop0
# losetup /dev/loop0 guestos.img
# losetup -a
# fdisk -lu /dev/loop0

など、詳細はここ

Edit
注意点およびトラブルシューティング

  1. ゲストOSに物理HD(/dev/sda等)を割り振ることは、非常に慎重に対応する必要がある。またfdiskを利用したMBRパーテーションではなく、partedコマンドを利用したgptフォーマットに対応していないようだ。なんどもHDDが使い物にならなくなっている。
  2. 当然のことながら、物理HDを複数でマウントすると確実にHDが破壊される。この点については理論上ロックをかけられないことから運用でカバーする必要がある。

Edit
Centos6

6からは、xenではなくkvmベースの仮想化が基本としてインストールされている。そのため、xmコマンドがインストールされていないため、以下のコマンドで利用する。

コマンド機能
virt-top各仮想化されたマシンのCPU時間などの確認を行う。
virt-dfdf コマンドを同じ
virt-tartar コマンドと同じ。HOST側からbackupを取るときなどに利用
virt-lsls コマンドと同じ

Edit
参考リンク