Xen

Xenのインストールをしたので整理をしておきます。インストール自体はFedora Core 5, SUSE Linux、Debian が簡単にできるようですが、一番なじみがあるFedora Core 5を使いました。

目次

マシンスペック

CPU Intel Pentium D Processor 820 (Intel EM64T)
MEM 1GB x 2 (SAMSUNG x 1, ELPIDA x 1) DDR2 667 Asahi Co.Ltd.
M/B GIGABYTE GA-8I945G (Intel 945G chip, Intel Graphics GMA950)
HDD 160GB HDT722516DLAT80 ATA Ultra 133(Parallel) 7200rpm

これに、USB接続のDVDドライブを接続してUSB起動でインストールをしています。また、使わない機能はすべてBIOSで無効としています。

ディスクイメージ

# fdisk /dev/hda
Command (m for help): p

Disk /dev/hda: 164.6 GB, 164696555520 bytes
255 heads, 63 sectors/track, 20023 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          65      522081   82  Linux swap / Solaris
/dev/hda2              66          78      104422+  83  Linux
/dev/hda3              79       13132   104856255   83  Linux
/dev/hda4           13133       20023    55351957+   5  Extended
/dev/hda5           13133       14176     8385898+  83  Linux
/dev/hda6           14177       15220     8385898+  83  Linux
/dev/hda7           15221       15707     3911796   83  Linux
/dev/hda8           15708       16681     7823623+  83  Linux
/dev/hda9           16682       20023    26844583+  83  Linux

ここでは、ホストOS用に下記の2つを使っています。

/dev/hda3 ... Xen Host /
/dev/hda2 ... Xen Host /boot

仮想マシン用のOSイメージ取得用に下記の4つを用意しておきます。debootstrapやrpmstrapを使えばもっと簡単かもしれませんが、Xenでうまく起動できない場合のときのことも考えて、実マシンでも動作するようにしています。どれもきちんと動作しますが、Xenでうまく動作するのはFC5だけです。CentOSは若干問題があるもののとりあえずは動いています。SuSEはかなり問題がありますが、最低限は動いています。KNOPPIXはブートできていません。一応、実マシンでは動作したということで報告しておきます。

/dev/hda5 ... Xen Guest CentOS 4.1用 /
/dev/hda6 ... Xen Guest Fedora Cora 5用 /
/dev/hda7 ... Xen Guest KNOPPIX 4.3用 /
/dev/hda8 ... Xen Guest SuSE 10.0用 /

OSイメージの保存用、作業用領域として下記の1つを用意しておきます。

/dev/hda9 ... OSイメージ保存用

スワップ領域はインストール時では共有し、実際の運用時ではホストOS(もしくは起動中のOS)しか使いません。共有がいやな場合はSWAP領域を複数用意し、各OSの /etc/fstab で参照する領域を設定すればいいでしょう。

/dev/hda1

ホストOSのインストール

最新のチップセットに対応していて、Xenもyumで簡単にインストールできるFedora Core 5 を使うことにしました。ホストOSについては、ブートローダのGRUBをMBRへインストールするようにします。

  • ブートローダのインストールはMBRへする
  • ファイアウォールの設定は無効にする
  • SELinuxの設定は無効にする
  • ネットワークはstaticなIPアドレスが決まっているのなら、それを設定しておいた方が簡単

インストールが終わったら、Xenのインストールと、OSのアップデートをしておきます。

yum -y install xen kernel-xen0 kernel-xenU
yum -y update

デフォルトではXenは起動しませんから、「/boot/grub/grub.conf」を編集して「title Fedora Core (2.6.17-1.2157_FC5xen0)」が起動するように設定します。通常は「default=0」とすればいいはずです。準備ができたら、再起動をしてXenが有効になったか確認をしましょう。xmコマンドを使えば確認ができます。

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

OSイメージの用意

ハードディスクへOSをインストールします。面倒ですが、仮想マシン用のOSイメージを入手するために、必要な分だけOSをインストールします。仮想マシン用OSインストールにあたって注意する点は下記の通りです。インストールを完全にするためには、ホストOSのGRUBを編集して、各領域が起動するように起動メニューを用意するのがいいでしょう(例を最後に掲載しておきます)。

  • 仮想マシン用OSのインストール先パーティションはひとつだけ選択し、「/」へマウントする
  • パーティションは必ずカスタマイズを選択して他のパーティションを上書きしないように注意
  • パーティションラベルがよくわからない場合は使わない方が安全
  • ブートローダのインストールはしない(必要な場合はインストール先パーティションへインストール)
  • ファイアウォールの設定は無効にする
  • SELinuxの設定は無効にする
  • ネットワークはstaticなIPアドレスが決まっているのなら、それを設定しておいた方が簡単

ホストOSのファイルとして仮想マシンイメージを作成

まず、仮想マシン用にディレクトリを用意します。ここでは、CentOS4用の作業だけを例として示しておきます。必要な仮想マシン分だけ同様にしてください。

mkdir /vm
mkdir /vm/cent4
mkdir /mnt/cent4
mkdir /mnt/hda5_cent4

次に、仮想マシン用スワップイメージの作成をします。

dd if=/dev/zero of=/vm/cent4/hda1.swap count=1024 bs=1M
mkswap -f /vm/cent4/hda1.swap

次に、仮想マシンOSイメージの作成をします。8Gの領域を用意して、ext3でフォーマットしてからloopマウントをしています。ファイルは単純にあらかじめインストールしておいたものをコピーしています。カーネルはホストOSのXenU版を使うので、それに必要なモジュールもコピーしています。TLSライブラリを使わないようにした方がいいとあるので、一応無効化しています。ただし、これはOSによって対応が異なるようです。例えば、Fedora Core 5 の仮想マシンならXenが統合されているので、こういった対処は必要ありません。

dd if=/dev/zero of=/vm/cent4/hda2.img bs=1M count=8192
mkfs -t ext3 -L "/" /vm/cent4/hda2.img
mount -o loop /vm/cent4/hda2.img /mnt/cent4
mount /dev/hda5 /mnt/hda5_cent4
cp -ar /mnt/hda5_cent4/* /mnt/cent4
umount /mnt/hda5_cent4
cp -ar /lib/modules/2.6.17-1.2157_FC5xenU /mnt/cent4/lib/modules/
mv /mnt/cent4/lib/tls/ /mnt/cent4/lib/tls.disabled

仮想マシンは実マシンでインストールされた状態のものをもってきているので、仮想マシンの「/etc/fstab」を編集する必要があります。

vi /mnt/cent4/etc/fstab

たとえば、次のようにします。「/」をマウントするデバイスに「/dev/hda2」を指定しておきます。

/dev/hda2              /                       ext3    defaults        1 1
none                    /dev/pts                devpts  gid=5,mode=620  0 0
none                    /dev/shm                tmpfs   defaults        0 0
none                    /proc                   proc    defaults        0 0
none                    /sys                    sysfs   defaults        0 0
/dev/hda1               swap                    swap    defaults        0 0

SELinuxは無効にしておいた方がいいようです。「/mnt/cent4/etc/selinux/config」 を編集して、「SELINUX=disabled」とします。

vi /mnt/cent4/etc/selinux/config

作業が終了したら、「/mnt/cent4」をアンマウントします。

umount /mnt/cent4

Xen設定ファイルの作成

例えば、次のような感じでXen設定ファイルを用意します。

# cat /etc/xen/xmcent4 
kernel = "/boot/vmlinuz-2.6.17-1.2157_FC5xenU"
ramdisk = "/boot/initrd-2.6.17-1.2157_FC5xenU.img"
memory = 512
name = "CentOS4"
vif = [ '' ]
disk = [ 'file:/vm/cent4/hda2.img,hda2,w', 'file:/vm/cent4/hda1.swap,hda1,w' ]
root = "/dev/hda2 ro"
extra = "4"

Xenの起動

いくつかコマンドを覚えておくといいでしょう。「xm list」で起動中の仮想マシンを一覧表示する事ができます。最初は次のようにDomain-0の仮想マシン、つまりホストOSしか稼働していません。

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

起動するには、createコマンドを使います。

cd /etc/xen
xm create -c xmcent4

起動時にkudzuのウィザードが表示されますが、何もしないで無視しておきましょう。ログインしたら、kudzuは無効にしておきます。

chkconfig --level 345 kudzu off

今回使用したマザーボードの場合、Xen上のCentOS4.1では、そのままではネットワークの設定がうまくいきません。modprobeコマンドでxennetを組み込んだ後、serviceコマンドでnetworkの再起動をすると使えるようになりました。

# modprobe xennet
# service network restart

毎回この作業をするのは大変なので「/etc/modprobe.conf」を編集してeth0にxennetを使うように指定します。

# cat /etc/modprobe.conf
alias eth0 xennet

停止は、仮想マシンコンソールから行うには「shutdown -ht0 now」とします。ホストOSのコンソールから行うには、次のようにします。

# xm list
Name                              ID Mem(MiB) VCPUs State  Time(s)
Domain-0                           0      987     2 r-----   681.2
CentOS4                             4     1024     1 -b----     8.3
# xm shutdown CentOS4

ちなみに、「xm create」で「-c」オプションを使わないと仮想マシンコンソールが表示されません。ホストOSのコンソールから仮想マシンコンソールへ接続するには仮想マシンのIDを引数にして「xm console」コマンドを使います。

# xm create xmcent4
# xm list
Name                              ID Mem(MiB) VCPUs State  Time(s)
Domain-0                           0      987     2 r-----   681.2
CentOS4                             4     1024     1 -b----     8.3
# xm console 4

GRUB

ホストOSの「/boot/grub/grub.conf」 の例です。

#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,1)/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.17-1.2157_FC5xen0)
        root (hd0,1)
        kernel /xen.gz-2.6.17-1.2157_FC5
        module /vmlinuz-2.6.17-1.2157_FC5xen0 ro root=LABEL=/ rhgb quiet 3
        module /initrd-2.6.17-1.2157_FC5xen0.img
title Fedora Core (2.6.17-1.2157_FC5xenU)
        root (hd0,1)
        kernel /vmlinuz-2.6.17-1.2157_FC5xenU ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.17-1.2157_FC5xenU.img
title Fedora Core (2.6.17-1.2157_FC5smp)
        root (hd0,1)
        kernel /vmlinuz-2.6.17-1.2157_FC5smp ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.17-1.2157_FC5smp.img
title KNOPPIX4 Debian GNU/Linux, kernel 2.6.12 Default  (/dev/hda7)
    kernel (hd0,6)/boot/vmlinuz root=/dev/hda7 vga=791 ro ramdisk_size=100000 lang=ja apm=power-off nomce 
    initrd (hd0,6)/boot/initrd.img
title SUSE Linux 10.1
    root (hd0,7)
    kernel /boot/vmlinuz root=/dev/hda8 vga=0x31a    resume=/dev/hda1  splash=silent showopts
    initrd /boot/initrd
title Fedora Core for XenU (2.6.17-1.2157_FC5smp)
        root (hd0,5)
        kernel /boot/vmlinuz-2.6.17-1.2157_FC5smp ro root=LABEL=/12 rhgb quiet
        initrd /boot/initrd-2.6.17-1.2157_FC5smp.img
title CentOS for XenU (2.6.9-11.ELsmp)
        root (hd0,4)
        kernel /boot/vmlinuz-2.6.9-34.0.2.ELsmp ro root=LABEL=/1 rhgb quiet
        initrd /boot/initrd-2.6.9-34.0.2.ELsmp.img

参考

同じカテゴリの記事: Linux