これまで「ホストOSのインストール」および「ゲストOSのインストール」で準備を整えた。個人的にはディスククラッシュがあり、構築しなおす羽目になったが、このブログに手順をまとめてあったので、すぐに構築しなおせた。やはり手順は残すものだ。
ゲストOSのインストールについて補足。ブートローダーはインストールしないとは述べたが、実際には、追加設定やパッケージの追加で起動する必要があるので、ホストOS側の/boot/grub/menu.lst に直接記述して起動するとよい。
さて、とうとう仮想マシンを起動する段階に来た。現在、xm コマンドを打つと次のような状態になっている。
# xm list Name Id Mem(MB) CPU VCPU(s) State Time(s) Domain-0 0 322 0 1 r---- 18.0
メモリを買い足し、さらにビデオメモリとして share していた分量も調整し、メインメモリに322MBを確保できていることがわかる。しかしこれをホストOSに全部を割り当てると、仮想ホストを動作させることができない。それで次のように xm コマンドを実行し、メモリの使用量を調節する。
# xm mem-max 0 128 # xm mem-set 0 120
以上を実行すると、次のようになる。
# xm list Name Id Mem(MB) CPU VCPU(s) State Time(s) Domain-0 0 120 0 1 r---- 20.6
これで適正なメモリを設定できた。しかしこの設定は、Xenが起動するたびに必要だ。このメモリの値をどこでセットしよう。e-ueda が考えたのは、/etc/xen の下に scripts というディレクトリがあるので、そこに memory という名のスクリプトを置き、rc スクリプトの start および restart の条件の時に /etc/xen/scripts/memory を呼び出すことにした。
memory スクリプト (/etc/xen/scripts/memory)
#!/bin/bash xm mem-max 0 128 xm mem-set 0 120
rc スクリプト (/etc/rc.d/init.d/xend)
・
中略
・
case "$1" in
start)
/usr/sbin/xend start
await_daemons_up
/etc/xen/scripts/memory ←ここを追加
;;
・
中略
・
これでいいのか分からないが、もっとXenの流儀にかなったやり方を発見したら、あらためてご報告する。
次に仮想マシンの設定ファイルを記述する。/etc/xen/VM_1 を一台目の仮想ホスト用設定ファイルとする。ファイル名は任意の名前が付けられる。
kernel = "/boot/vmlinuz-2.6.12-1.1454_FC4xenU" ← ゲストOS用カーネル memory = 100 ← 割り当てるメモリの量 name = "VM1" ← 仮想ホストの名前 disk = [ 'phy:hda3,hda3,w','phy:hda5,hda5,w' ] ← 認識させるディスク root = "/dev/hda5 ro" ← ルートデバイス
カーネルはホストOS側でインストールした /boot/vmlinuz-2.6.12-1.1454_FC4xenU を利用。いくつ仮想ホストを起動させようと、カーネルはひとつでよい(共用すればよい)ので、/boot にインストールしたゲストOS用カーネルを指定する。
以上の設定ファイルを記述し配置したら、xm コマンドで仮想ホストを起動させる。コンソールからでも、ssh のターミナルからでも起動できる。
# xm create -c VM_1
-c オプションは、カレントのコンソールに仮想ホストを起動する指定である。VM_1は設定ファイル名。/etc/xen/のパスはxmコマンドが補完する。設定に間違いがなければ、いとも簡単にゲストOSが起動する。
RAMDISK driver initialized: 16 RAM disks of 16384K size 1024 blocksize
Xen virtual console successfully installed as tty1
Event-channel device installed.
xen_blk: Initialising virtual block device driver
Registering block device major 3
xen_net: Initialising virtual ethernet driver.
xen_net: Using grant tables.
md: md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27
NET: Registered protocol family 2
IP: routing cache hash table of 256 buckets, 4Kbytes
TCP established hash table entries: 4096 (order: 4, 65536 bytes)
TCP bind hash table entries: 4096 (order: 3, 49152 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
Initializing IPsec netlink socket
NET: Registered protocol family 1
NET: Registered protocol family 17
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
kjournald starting. Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
VFS: Mounted root (ext3 filesystem) readonly.
Freeing unused kernel memory: 156k freed
***************************************************************
***************************************************************
** WARNING: Currently emulating unsupported memory accesses **
** in /lib/tls libraries. The emulation is very **
** slow. To ensure full performance you should **
** execute the following as root: **
** mv /lib/tls /lib/tls.disabled **
** Offending process: init (pid=1) **
***************************************************************
***************************************************************
***************************************************************
Continuing...
SELinux: Disabled at runtime.
SELinux: Unregistering netfilter hooks
INIT: version 2.85 booting
Welcome to Fedora Core
Press 'I' to enter interactive startup.
Starting udev: [FAILED]
Initializing hardware... storage network audio done[ OK ]
Setting clock (localtime): 2006 xx xx xx xx:04:10 JST [ OK ]
Setting hostname Virtual_Server_1: [ OK ]
Setting up Logical Volume Management: No volume groups found [ OK ]
Checking filesystems
Checking all file systems.
[/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/hda5
/backup: clean, 56898/526592 files, 304265/526120 blocks [ OK ]
Remounting root filesystem in read-write mode: [ OK ]
Mounting local filesystems: [ OK ]
Enabling local filesystem quotas: [ OK ]
Enabling swap space: [ OK ]
INIT: Entering runlevel: 3
Entering non-interactive startup
Checking for new hardwaremmap /dev/mem: Resource temporarily unavailable
mmap /dev/mem: Resource temporarily unavailable [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
Starting automount: [ OK ]
Starting sshd: [ OK ]
Starting xinetd: [ OK ]
Starting sendmail: [ OK ]
Starting sm-client: [ OK ]
Starting udev: [FAILED]
Fedora Core release 4 (Stentz)
Kernel 2.6.12-1.1454_FC4xenU on an i686
Virtual_Server_1:
あっけないほど簡単だ。起動途中に
modprobe: FATAL: Could not load /lib/modules/2.6.12-1.1454_FC4xenU/modules.dep: No such file or directory
というようなメッセージが出るので、ログインして、
# depmod
とやっておく。
いくつかコマンドを打ってみる。
# free
total used free shared buffers cached
Mem: 97204 36328 60876 0 3184 23076
-/+ buffers/cache: 10068 87136
Swap: 506036 0 506036
割り当てたとおり、およそ100MBのメモリを使用して、仮想ホストが動作していることが分かる。
# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda5 2038472 1151112 782136 60% / /dev/shm 48600 0 48600 0% /dev/shm # uname -a Linux Virtual_Server_1 2.6.12-1.1454_FC4xenU #1 SMP Fri Sep 9 00:45:34 EDT 2005 i686 athlon i386 GNU/Linux
基本コマンドを実行しても、問題なく動作しており、まるで仮想ホストであることを忘れさせる。
ホストOSに戻りたいときは、「Ctrl」キーを押しながら「 ] 」(要するにエスケープキャラクター)を押せばよい。
そうしたらxm コマンドで動作状況を見てみよう。
# xm list Name Id Mem(MB) CPU VCPU(s) State Time(s) Domain-0 0 120 0 1 r---- 77.9 VM1 2 99 0 1 ----- 12.0
Domain-0の名がついたホストOSと、VM1という名の仮想ホストがちゃんと動作していることが分かる。
この状態から仮想ホストのコンソールに切り替えたいときは、次のようにする。
# xm console VM1
仮想ホスト側でシャットダウンをかけると、ホストOSのコンソールに戻る。
以上が仮想ホストの設定と動作である。思いのほか簡単である。簡単すぎてつまらない。しかし、これで満足してはいけない。使っているうちにいくつか不安定な現象に直面したし、正常に実行されないコマンドもある。それに仮想ホストを増やすために、いちいち新しいパーティションにインストールするなんてナンセンスだ。
今後は、不安定動作に対する対処を行ないたい。また、仮想ホストの雛形を作り、それをコピって使い回しができるような手法を見出したいと考えている。