Xenのインストール

概要

Xenをインストールし,Domain 0のOSにはDebianを使う.

環境

  • Debian Sarge (Domain 0)
    • kmutoさんのsarge-custom-0304.imgからインストール
  • Xen v3.0

参考Webサイト

作業手順

(1) Debian を普通にインストール
(2) Xenをインストール

# apt-get install xen-linux-system-2.6.18-4-xen-686
# apt-get install xen-tools
# apt-get install xen-utils-3.0.3-1
# apt-get install xen-ioemu-3.0.3-1

/boot/grub/menu.lst 編集

title  Xen 3.0.3-1-i386-pae / Debian GNU/Linux, kernel 2.6.18-4-xen-686
root   (hd0,0)
kernel /boot/xen-3.0.3-1-i386-pae.gz dom0_mem=65536
  : (省略)

dom0_memを追加する.これは,Domain-0が使用するメモリ容量を指定する.sshdを動かすだけであれば,64MB(dom0_mem=65536)もあれば十分.

(3) 再起動.GRUBメニューの最上段に「Xen」が存在するので,選択して起動する.

# mv /lib/tls /lib/tls.disabled

現在のXenではTLS(Thread Local Storage)ライブラリが動かないようであるので,これを実行しておく.
(Xen v3.0 User's Manualの2.5.3 TLS Librariesを参照のこと)

(4) Domain-U用のOSイメージファイルを作る.
OSイメージ用ファイルを作る.以下は,100GB分の容量を確保する場合の例.

# mkdir /home/xen; cd /home/xen
# dd if=/dev/zero of=hostname.img bs=1k seek=100m count=1
# mkfs.ext3 hostname.img

seekを指定しているのがみそ.これで「穴開きファイル」(sparse file)を作る.
sparse fileにしておくと,ls -lなどで確認したときにはddで指定した分のファイルサイズに見えるのだが,実際にデータが書き込まれていない部分は「穴」になっており,ディスク容量を消費しない.実際にデータが書き込まれた際にはじめてi-nodeを割り当てるため,ディスクの容量に対して経済的である.

swap用のファイルも作っておく(2GB分).

# dd if=/dev/zero of=hostname.img bs=1k seek=2m count=1

(5) Domain-UのOS環境構築
まずループバックでmount.

# mount -o loop hostname.img /mnt

OSイメージを作る.

# apt-get install debootstrap
# debootstrap --arch i386 sarge /mnt http://ftp.jp.debian.org/debian

続いてchrootして,/etc/apt/{sources.list,preference}, /etc/hostname, /etc/network/interfaces, /etc/fstabあたりを編集する.

# chroot /mnt /bin/bash

apt-get update && apt-get upgradeしておいてもいいかも.

/etc/fstabは以下のようにする.

/dev/hda1       /       ext3    errors=remount-ro       0 1
/dev/hda2       none    swap    sw                      0 0
proc            /proc   proc    defaults                0 0

終わったらumountしておく(重要).Xen FAQによると,loopback mountしている状態でXenのDomain-Uとして起動してしまうと,最悪の場合,Domain-Uのシステムが壊れることがあるようだ.

# umount /mnt

(6) Domain-U用の設定ファイルを作成

# cd /etc/xen
# vi xen-hostname.conf

ファイルの中身は以下のようにする.kernelおよびramdiskは,Domain-0上に存在する実ファイルを指定しておく.

kernel = "/boot/vmlinuz-2.6.18-4-xen-686"
ramdisk = "/boot/initrd.img-2.6.18-4-xen-686"
memory = 908
name = "Domain-U"
disk = [
  'file:/home/xen/hostname.img,hda1,w',
  'file:/home/xen/hostname.swp,hda2,w'
]
root = "/dev/hda1 ro"
vif = [ 'mac=00:16:3E:00:00:02,bridge=xenbr0' ]

(7) Domain-U起動

# xm create /etc/xen/xen-hostname.conf -c

すべてが問題なければ,まるでシリアルコンソールからOSを起動したような感じになり,そのまま起動してlogin:プロンプトが出るところまで行く.

[CTRL]+] を押すことで,もとのDomain-0環境に戻ることができる.ふたたびコンソールにつなぎたくなったら以下のコマンドを入力.

# xm console Domain-U

(8) 操作方法
起動しているOSの一覧を確認するには

# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0       64     1 r-----   9586.4
Domain-U                                   2      908     1 -b----   9027.3

Domain-Uをシャットダウンするには,Domain-0より以下のコマンドを入力.

# xm shutdown Domain-U

Domain-U内では,shutdown nowを入力したかのように停止スクリプトが動いて,安全に停止する.

(9) loopbackデバイスを多めにしておく
以下,Domain-0上で作業.
参考: http://blog.open-network.jp/2006/09/error_device_769_vbd_could_not.html

# echo "loop" >> /etc/modules
# echo "options loop max_loop=16" > /etc/modprobe.d/loop

(10) Domain-0起動時に,自動的にDomain-U環境が起動するように設定
設定ファイルを /etc/xen/auto 上に移動する.参考: /etc/default/xendomains の XENDOMAINS_AUTO 行と,/etc/init.d/xendomains より.

# mkdir /etc/xen/auto
# mv /etc/xen/xen-hostname.conf /etc/xen/auto

(11) Domain-0内でカーネルモジュール等をインストール

# apt-get install linux-modules-2.6.18-4-xen-686

雑感

Xen v3.0は実用レベルに達しているようだ.かなり良く動いている印象.
Domain-0には必要最小限のパッケージのみインストールしておき,Domain-Uにがしがし環境を作っておく,という使い方が良さそう.Domain-Uの環境は1つのファイルの中にまとまっているので,別のマシン上のDomain-0に持っていってもそのまま起動するはずである.