Xenのインストール
参考Webサイト
- Xen v3.0 User's Manual 本家のマニュアル.これを確認しながら作業するのが一番手っ取り早い.
- 仮想化技術の大本命「Xen」を使ってみよう 読み物.Xenがどういうものか理解するのに役に立つ.
- 水中モーターXenのゲストOS作成
- http://wiki.xensource.com/xenwiki/XenNetworking Xenのネットワークまわりの説明.図がすばらしい.
- http://wiki.xensource.com/xenwiki/XenFaq
- http://blog.open-network.jp/2006/09/error_device_769_vbd_could_not.html
作業手順
(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に持っていってもそのまま起動するはずである.