Xen 2.0.6
XenはVMWareやcoLinuxのような仮想マシン提供技術で、ただしXen自体がホストOSになることとゲストOSをXen対応にする点が違う。面倒そうだけどパフォーマンスでは有利と言われている。
何が面倒って、検証用マシンを確保するのが面倒ですた。古いx386にも最新のx64にも対応してないので、中途半端な新鮮さのx686のマシンにメモリとHDDをそこそこ積んだものを用意しないといけない。
構成例
検証目的なのでネタっぽい構成例にしてみた。
ドメイン0: 適当 RAM32MB ドメイン1〜54: RAM16MB,DISK2.8GB
インストール
- http://www.cl.cam.ac.uk/Research/SRG/netos/xen/ から Stable binary release を取ってきて展開。
- /boot/grub/menu.lst に下記のようなエントリを追加する。dom0_memにはメモリをKB単位で指定する。最低でも8MB,今回試してみたら16MB程度はいるみたいだ。
title Xen 2.0 / XenLinux 2.6 kernel /boot/xen-2.0.gz dom0_mem=32768 module /boot/vmlinuz-2.6-xen0 root=/dev/hda1 ro
- TLS(Thread Local Storage)ライブラリを無効にする。 mv /lib/tls /lib/tls.disabled
- modules.dep と initrd.img を作る。ぁーやっぱ色々足りないな。。
/bin/ls -1 /lib/modules|perl -ne 'chomp; system "depmod -eF /boot/System.map-$_ $_"' /bin/ls -1 /lib/modules|perl -ne 'chomp; system "mkinitrd -o /boot/initrd.img-$_ $_"'
仮想マシン用のディスクとファイルの準備
- xenのバイナリ配布のカーネルにはLVMは入ってないようだ。今回は避ける。ただしユーザマニュアルにdisk = ['phy:vg/lvm1,sda2,w'] という記述はあるので、domain0で扱えるようにカーネルを調整すればいいのかもしれない。
- fdiskでは/dev/hda60までしか作れない。
xenのdomain-からfdiskでパーティション操作を行うと
Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
と文句を言われる。
とりあえず以下の感じで54個のパーティションを切ってみた。
# デバイスノードを作る 63までだったか? perl -e 'for(6..63){ (-e "/dev/hda$_") or system "mknod /dev/hda$_ b 3 $_"}' # パーティションを作る。あ、60までしか作れないのか perl -e 'print map{"n\nl\n\n+2800M\n"}(6..60);print"w\n"' |fdisk /dev/hda # ここでリブート reboot # ファイルシステムをフォーマットする perl -e 'for(6..60){ warn "# format hda$_\n";system "mkreiserfs -q /dev/hda$_"}' # debianを入れる mount /dev/hda6 /mnt debootstrap sarge /mnt (cd /mnt;tar cpzf ~/diskdata.tgz *) umount /mnt perl -e 'for(7..60){ warn "$_\n"; system "mount /dev/hda$_ /mnt ; (cd /mnt; tar xzf ~/diskdata.tgz ) ; umount /mnt"}' # /lib/modulesと/bootをコピーする perl -e 'for(6..60){ warn "$_\n"; system join ";" ,"mount /dev/hda$_ /mnt" ,"cp -afu --target-directory=/mnt /boot" ,"cp -afu --target-directory=/mnt/lib /lib/modules" ,"sync" ,"umount /mnt" ;}'
全部必要なわけじゃないんだよな。。特定のカーネルのだけでいいはず
ドメイン設定ファイル
# cat /etc/xen/hda6 name = "hda6" restart = 'never' memory = 16 disk = [ 'phy:hda6,hda1,w' ] nics=1 # vif = [ 'mac=aa:00:00:00:00:11, bridge=xen-br0' ] kernel = "/boot/vmlinuz-2.6.11.10-xenU" # ramdisk = "/boot/initrd.img-2.6.11.10-xenU" root = "/dev/hda1 ro" # Sets runlevel 4. extra = "4" #cpu = -1 # leave to Xen to pick #dhcp="dhcp" #netmask= #gateway= #hostname= "vm%d" % vmid
perl -e 'for $n (7..60){ @src=`cat hda6`; open(OUT,">hda$n"); for(@src){ s/hda6/hda$n/g; print OUT; }}'
ブート前に可能な設定作業
mv /lib/tls /lib/tls/disabled /etc/hostname /etc/hosts (localhost行の最初のエントリ) /etc/resolv.conf /etc/fstab /etc/network/interfaces /etc/apt/sources.list
ドメインの起動
# (まだ起動してないなら) xend start # 仮想マシンの開始 xm create hda6 -c # 一覧 xm list コンソールのデタッチは CTRL-] で、アタッチは xencons localhost <ポート番号>
ドメインの初期作業
apt-get update # timezoneなど apt-get install ntpdate lv bzip2 tzconfig rootパスワードの設定
xm balloon
xenは実行中のドメインのメモリ使用量減らすことができる。
ドメインの中のlinuxからはused memory が増えたように見える。
ただし、逆にドメインのメモリ使用量を増やすことはできないようだ。
dom0# xm balloon hda6 16 dom0# xm info system : Linux host : wiggin release : 2.6.11.10-xen0 version : #1 Sun May 22 11:38:50 BST 2005 machine : i686 cores : 1 hyperthreads_per_core : 1 cpu_mhz : 1836 memory : 1023 free_memory : 865 guest# free total used free shared buffers cached Mem: 13996 7240 6756 0 316 2700 -/+ buffers/cache: 4224 9772 Swap: 0 0 0 dom0# xm balloon hda6 8 dom0# xm info system : Linux host : wiggin release : 2.6.11.10-xen0 version : #1 Sun May 22 11:38:50 BST 2005 machine : i686 cores : 1 hyperthreads_per_core : 1 cpu_mhz : 1836 memory : 1023 free_memory : 873 guest# free total used free shared buffers cached Mem: 13996 13252 744 0 144 700 -/+ buffers/cache: 12408 1588 Swap: 0 0 0 dom0# xm balloon hda6 32 dom0# xm info system : Linux host : wiggin release : 2.6.11.10-xen0 version : #1 Sun May 22 11:38:50 BST 2005 machine : i686 cores : 1 hyperthreads_per_core : 1 cpu_mhz : 1836 memory : 1023 free_memory : 865 guest# free total used free shared buffers cached Mem: 13996 7020 6976 0 252 2556 -/+ buffers/cache: 4212 9784 Swap: 0 0 0
ドメインごとの設定
# 用意するファイル /etc/fstab /resolv.conf /apt/sources.list /network/interfaces /hostname /hosts # TLSの無効化 mv /lib/tls /lib/tls.disabled # あと、ドメインの設定ファイル/etc/xen/... も
起動させた
# xm list Name Id Mem(MB) CPU State Time(s) Console Domain-0 0 120 0 r---- 458.8 helix06 58 15 0 -b--- 2.8 9658 helix07 59 15 0 -b--- 1.1 9659 helix08 60 15 0 -b--- 1.1 9660 helix09 61 15 0 -b--- 1.1 9661 helix10 62 15 0 -b--- 1.1 9662 helix11 63 15 0 -b--- 1.1 9663 helix12 64 15 0 -b--- 1.1 9664 helix13 65 15 0 -b--- 1.1 9665 helix14 66 15 0 -b--- 1.1 9666 helix15 67 15 0 -b--- 1.1 9667 helix16 68 15 0 -b--- 1.1 9668 helix17 69 15 0 -b--- 1.1 9669 helix18 70 15 0 -b--- 1.1 9670 helix19 71 15 0 -b--- 1.1 9671 helix20 72 15 0 -b--- 1.1 9672 helix21 73 15 0 -b--- 1.1 9673 helix22 74 15 0 -b--- 1.1 9674 helix23 75 15 0 -b--- 1.1 9675 helix24 76 15 0 -b--- 1.1 9676 helix25 77 15 0 -b--- 1.1 9677 helix26 78 15 0 -b--- 1.1 9678 helix27 79 15 0 -b--- 1.1 9679 helix28 80 15 0 -b--- 1.1 9680 helix29 81 15 0 -b--- 1.1 9681 helix30 82 15 0 -b--- 1.1 9682 helix31 83 15 0 -b--- 1.1 9683 helix32 84 15 0 -b--- 1.1 9684 helix33 85 15 0 -b--- 1.1 9685 helix34 86 15 0 -b--- 1.1 9686 helix35 87 15 0 -b--- 1.1 9687 helix36 88 15 0 -b--- 1.1 9688 helix37 89 15 0 -b--- 1.1 9689 helix38 90 15 0 -b--- 1.1 9690 helix39 91 15 0 -b--- 1.1 9691 helix40 92 15 0 -b--- 1.1 9692 helix41 93 15 0 -b--- 1.1 9693 helix42 94 15 0 -b--- 1.1 9694 helix43 95 15 0 -b--- 1.1 9695 helix44 96 15 0 -b--- 1.1 9696 helix45 97 15 0 -b--- 1.1 9697 helix46 98 15 0 -b--- 1.1 9698 helix47 99 15 0 -b--- 1.1 9699 helix48 100 15 0 -b--- 1.1 9700 helix49 1 15 0 -b--- 1.1 9601 helix50 2 15 0 -b--- 1.1 9602 helix51 3 15 0 -b--- 1.1 9603 helix52 4 15 0 -b--- 1.1 9604 helix53 5 15 0 -b--- 1.1 9605 helix54 6 15 0 -b--- 1.1 9606 helix55 7 15 0 -b--- 1.1 9607 helix56 8 15 0 -b--- 1.1 9608 helix57 9 15 0 -b--- 1.1 9609 helix58 10 15 0 -b--- 1.1 9610 helix59 11 15 0 -b--- 1.1 9611 helix60 12 15 0 -b--- 1.2 9612 wiggin:/etc/xen/mass-conf# hdparm -t /dev/hda /dev/hda: Timing buffered disk reads: 10 MB in 3.07 seconds = 3.26 MB/sec wiggin:/etc/xen/mass-conf# hdparm -v /dev/hda /dev/hda: multcount = 0 (off) IO_support = 0 (default 16-bit) unmaskirq = 0 (off) using_dma = 0 (off) keepsettings = 0 (off) readonly = 0 (off) readahead = 256 (on) geometry = 19929/255/63, sectors = 320173056, start = 0 wiggin:/etc/xen/mass-conf# hdparm -c 1 -d 1 /dev/hda /dev/hda: setting 32-bit IO_support flag to 1 setting using_dma to 1 (on) HDIO_SET_DMA failed: Operation not permitted IO_support = 1 (32-bit) using_dma = 0 (off) wiggin:/etc/xen/mass-conf# hdparm -t /dev/hda /dev/hda: Timing buffered disk reads: 16 MB in 3.18 seconds = 5.03 MB/sec