GPLPVドライバをインストールしてベンチマークをとってみた
構成
Domain-0の情報
- Domain-0
- CentoOS5.3
- Xen3.3.1
- HDD 1TB x 3 (RAID5)
- Domain-U
- WindowsXPSP3
- DiskはXenのファイルイメージタイプ
Domain-0のHDDの情報
# hdparm -tf /dev/mapper/VolGroup00-LogVol00 /dev/mapper/VolGroup00-LogVol00: Timing buffered disk reads: 416 MB in 3.04 seconds = 137.05 MB/sec
NICの情報
マシン | NIC |
---|---|
Windows(WindowsXP/hostname:crimson) | ReadtekRTL8168 PCI-E Gigabit Ethernet NIC |
Domain-0(CentOS5.3/hostname:epitaph) | Broadcom NetXtreme BCM5722 Gigabit Ethernet NIC |
Domain-U(WindowsXP/hostname:wolf) | NOGPLPV - RealtekRTL8139 |
Domain-U(WindowsXP/hostname:wolf) | GPLPV - Xen Net Device Driver |
HDDのベンチマーク
CrystalDiskMark22を使ってHDDの簡単なベンチマークを取ってみました。
結果は値がおかしい。PVドライバを入れる前でもSSD並に速い。しかもPVドライバいれたらさらにとんでもない値が出ているし。XenのDomain-UにCrystalDiskMark22だと正しくベンチマークが取れないのかな?
これではベンチマークとして信用できないので、参考レベルですがCygwinのddコマンドでディスクアクセスの簡単な確認することにしてみた。/dev/zero や /dev/null だとテストにならないので/dev/urandomを使用。
GPLPVインストール前。
$ time dd if=/dev/urandom bs=1M count=512 of=bench.img 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 98.481 s, 5.5 MB/s real 1m38.515s user 0m36.252s sys 0m2.723s
GPLPVインストール後。
$ time dd if=/dev/urandom bs=1M count=512 of=bench.img 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 63.976 s, 8.4 MB/s real 1m4.000s user 0m35.841s sys 0m2.443s
あまり信用置けるベンチマークではありませんが、少しは速くなっているようです。
ネットワークの簡単なベンチマーク
Netperfを使ってネットワーク速度をベンチしました。
パターンは4つ
- get Windows(hostname:crimson) <= NOGPLPV Domain-U Windows(hostname:wolf)
- put Windows(hostname:crimson) => NOGPLPV Domain-U Windows(hostname:wolf)
- get Windows(hostname:crimson) <= GPLPV Domain-U Windows(hostname:wolf)
- put Windows(hostname:crimson) => GPLPV Domain-U Windows(hostname:wolf)
数値は Mbit/sec です。
パターン | 1回目 | 2回目 | 3回目 |
---|---|---|---|
crimson <= wolf (NOGPLPV) | 24.06 | 24.20 | 24.50 |
crimson => wolf (NOGPLPV) | 55.64 | 55.74 | 55.33 |
crimson <= wolf (GPLPV) | 433.38 | 463.18 | 420.73 |
crimson => wolf (GPLPV) | 470.82 | 453.16 | 508.85 |
ネットワークの性能は約10-20倍にアップしています。これはかなりうれしい結果になりました。
追記
HDDベンチマークのありえない値を叩き出している件ですが、どうもDomain-Uがファイル形式だとおかしな値になるようです。
デバイス指定でインストールしたWindowsXPにGPLPVをインストールして再度確認してみた結果です。
こっちはCygwinのddコマンド。
$ dd if=/dev/random bs=1M count=512 of=bench.img 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 125.596 s, 4.3 MB/s
GPLPV入れても書き込み速度は遅すぎるままでした。大丈夫か?
読み込みが速いのはDomain-0がRAID5だからかな。ディスクアクセスに関してはGPLPV入れてもまだ効果は期待できないということでしょうね。GPLPVはまだまだ開発中ですし、しばらくはウォッチしていきたいです。
GPLPVドライバをインストールしてみた
Citrix社のXenServerにはWindows-PVDrivers、Novell社のSuSEだと仮想マシンドライバパック、このようにXenのベンダーはDomain-U用のPVドライバを用意してパフォーマンスの優位性を出しています。RedHat社もPVドライバを出していますが、CentOSには当然ありません。この時点でCentOSを使うアドバンテージはないです。しかしそれだと面白くないのでオープンソースのWindowsPVドライバを導入してみました。
GPLPVドライバインストール
ダウンロードはここになります。
インストーラがたくさんあり、どれをダウンロードしたらよいのかわかりにくいですが、http://wiki.xensource.com/xenwiki/XenWindowsGplPv をみると、32bitのWindowsXPのPVドライバの場合 は gplpv_fre_wxp_x86_X.XXX.msi のようです。
Recent binaries are available from http://www.meadowcourt.org/downloads/ * There is now one download per platform/architecture, named as follows: gplpv_<chk/fre>_<platform>_<arch>_<version>.msi * chk is a 'checked' build which contains debug info (please use these if you want any assistance in fixing bugs) * fre is a 'free' build which contains no debug info * platform is 'wxp' for XP, 'wnet' for 2003, and 'wlh' for Vista/2008 * arch is 'x86' for 32 bit and 'AMD64' for 64 bits
2009.06.10時点で最新のgplpv_fre_wxp_x86_0.10.0.69.msiをインストール。
新しいバージョンではboot.iniにオプションは必要ないようだけど、いちおう設定しておく。*1
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional GPLPV" /GPLPV /noexecute=optout /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional NOGPLPV" /NOGPLPV /noexecute=optout /fastdetect
インストールが終わったら一度シャットダウンして、/etc/xen/hoge.cfg設定ファイルのmacアドレスを消します。
vif = ['']
起動したあとのデバイスマネージャ。IDEのHDDとNICにエラーのマークがつき、XenのPV SCSIディスクとXen Net Device Driverが増えています。
次はPVドライバを導入して本当にパフォーマンスがあがっているかどうか確認してみたいと思います。
*1:/NOGPLPVだとGPLPVを読み込まないモードで起動します
Domain-0経由で仮想マシンにVNCで接続してみる
普段はDomain-Uの中にVNCをインストールして接続しているのですが、Xen3.3.1が原因なのか、Domain-UのWindowsXPにUltraVNCで接続するとマウスのカーソルがうまく動かず使いにくくなってしまいました。仕方がないので、直接Domain-U経由で仮想マシンの外から直接VNCで接続してみることにしました。*1
Xen3.1以降はsxpファイルで管理されるのですが、virshの使い方やフォーマットに慣れていないので旧式の設定ファイルに変更します。*2
対象Domain-Uを停止します。(winxp_wolfがvncもっさりになったうちの windows xp)
# virsh destroy winxp_wolf
sxpのファイルの情報を確認。uuidやmacアドレスなどを覚えておく。
# virsh dominfo winxp_wolf Id: - 名前: winxp_wolf UUID: 31b42c35-2d7b-7649-f7e0-d832f2f9d429 OS タイプ: hvm 状態: シャットオフ CPU: 1 CPU 時間: 1.5s 最大メモリー: 1048576 kB 使用メモリー: 1048576 kB Autostart: disable # grep mac /var/lib/xend/domains/31b42c35-2d7b-7649-f7e0-d832f2f9d429/* (mac 00:16:36:02:89:4b)
sxpファイルをバックアップ
# cd /var/lib/xend/domains # tar cvzf winxp.tgz ./31b42c35-2d7b-7649-f7e0-d832f2f9d429
対象Domain-Uの定義を削除
# virsh list --all Id 名前 状態 ---------------------------------- 0 Domain-0 実行中 1 centos_zappa ブロックされています - winxp_wolf シャットオフ # virsh undefine winxp_wolf ドメイン winxp_wolf の定義は削除されています
/etc/xen以下にxen3.0.x系までの定義を作成。先ほどのuuidとmacを忘れずに。
# vim /etc/xen/winxp_wolf.cfg name = "winxp_wolf" uuid = "31b42c35-2d7b-7649-f7e0-d832f2f9d429" maxmem = 1024 memory = 1024 vcpus = 1 builder = "hvm" kernel = "/usr/lib/xen/boot/hvmloader" boot = "c" pae = 1 acpi = 0 apic = 0 localtime = 1 on_poweroff = "destroy" on_reboot = "restart" on_crash = "restart" device_model = "/usr/lib64/xen/bin/qemu-dm" usbdevice = "tablet" sdl = 0 vnc = 1 #=> VNCを有効に vncunused = 0 vnclisten="0.0.0.0" #=> listenはオールカマー keymap = "ja" vncdisplay = "1" #=> vncdisplay番号が (vncポート5900 + vncdisplay)になるので1だと5901 disk = [ "file:/var/lib/xen/images/winxp_wolf.img,hda,w" ] vif = [ "mac=00:16:36:02:89:4b,bridge=xenbr0,script=vif-bridge" ] serial = "pty"
Domain-Uを起動
# xm create -f /etc/xen/winxp_wolf.cfg Using config file "/etc/xen/winxp_wolf.cfg". Started domain winxp_wolf
ポートスキャンしてvncのポートが開いているか確認
# nmap localhost -p 5900-5910 Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-06-09 02:22 JST Interesting ports on localhost (127.0.0.1): PORT STATE SERVICE 5900/tcp open vnc 5901/tcp closed vnc-1 5902/tcp closed vnc-2 5903/tcp closed vnc-3 5904/tcp closed unknown 5905/tcp closed unknown 5906/tcp closed unknown 5907/tcp closed unknown 5908/tcp closed unknown 5909/tcp closed unknown 5910/tcp closed unknown
VNC-Viewerを使って接続。hostname:{vncdisplay} の形式で接続します。Domain-0が 192.168.1.4 なら 192.168.1.4:1 とします。
Thanks!
これでまた快適になりました。ありがとう vnc, virsh. あとmanpagerもありがとう。
- Ultra VNC
- 第15章 virsh で仮想マシンを管理
- man xmdomain.cfg
CentOS5.3 + Xen3.3.1 にしてみた
少し前にRedHat社は正式に仮想アプライアンスをKVMにすることを発表しています。そのせいかRHEL5のXenのバージョンを更新する気はまったくない感じです。Novell SuSE Enterprise Linux 11 は Xen3.3.1になっているのに、RHEL5(CentOS5)は Xen3.0.3。それはないよなーと思います。ここの人が http://www.gitco.de/repo/ Xenの3.3.1を用意してくれておりましたので、SuSE11にあわせてうちのCentOS5.3もXen3.3.1にアップデートしてみました。
最初に万が一があるといやなのでノーマルカーネルをインストール
$ sudo yum install kernel.x86_64
リブートしてノーマルカーネルで起動。
$ sudo reboot
www.gitco.deさんのyumリポジトリを追加。
$ cd /etc/yum.repos.d/ $ sudo wget http://www.gitco.de/repo/CentOS5-GITCO_x86_64.repo $ sudo yum clean all $ sudo yum list
そのまま、yum update をしてみたところ、なんだかコンフリクトしている警告でまくり。問題の衝突しているっぽいものをアンインストール。
$ sudo yum remove libvirt-python ========================================================================================== Package Arch Version Repository Size ========================================================================================== Removing: libvirt-python x86_64 0.3.3-14.el5_3.1 installed 230 k Removing for dependencies: gnome-applet-vm x86_64 0.1.2-1.el5 installed 121 k python-virtinst noarch 0.300.2-12.el5 installed 614 k virt-manager x86_64 0.5.3-10.el5 installed 3.9 M xen
xen-libが抜けてた。そもそもi386,x86_64のものが2つ入ってたのか。よろしくない構成だったのね。。
$ sudo yum remove xen-libs ========================================================================================== Package Arch Version Repository Size ========================================================================================== Removing: xen-libs i386 3.0.3-80.el5_3.2 installed 252 k xen-libs x86_64 3.0.3-80.el5_3.2 installed 250 k Removing for dependencies: libvirt i386 0.3.3-14.el5_3.1 installed 3.4 M libvirt x86_64 0.3.3-14.el5_3.1 installed 3.4 M virt-viewer x86_64 0.0.2-2.el5 installed 48 k
新しいxenをインストール。
$ sudo yum install xen ========================================================================================== Package Arch Version Repository Size ========================================================================================== Installing: xen x86_64 3.3.1-0 gitco 8.8 M Installing for dependencies: libvirt x86_64 0.4.4-3 gitco 1.8 M libvirt-python x86_64 0.4.4-3 gitco 111 k python-virtinst noarch 0.400.0-5 gitco 333 k xen-libs x86_64 3.3.1-0 gitco 159 k
virt-manager忘れてた。
$ sudo yum install virt-manager ========================================================================================== Package Arch Version Repository Size ========================================================================================== Installing: virt-manager x86_64 0.6.0-1 gitco 1.3 M Updating: gtk-vnc x86_64 0.3.7-2 gitco 78 k gtk-vnc-python x86_64 0.3.7-2 gitco 13 k Installing for dependencies: gtkglext-libs x86_64 1.2.0-6 gitco 143 k
リブートしてxenカーネルで起動。
$ sudo reboot
問題なく起動できた。xenのバージョンもちゃんと3.3.1になってる。
$ sudo xm dmesg __ __ _____ _____ _ \ \/ /___ _ __ |___ / |___ / / | \ // _ \ '_ \ |_ \ |_ \ | | / \ __/ | | | ___) | ___) || | /_/\_\___|_| |_| |____(_)____(_)_| (XEN) Xen version 3.3.1 (root@gitco.tld) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)) Tue Jan 20 23:00:48 CET 2009
virt-managerもちょっと良くなった。
- Console、概要、ハードウェアプロパティがタブで切り替えられる。
- ハードウェアプロパティでBoot Optionsが増えた。AutostartVMとか設定できる。
Xen.orgの3.3.1のページにあるようにかなりいい感じです。*1
http://www.xen.org/download/index_3.3.1.html
- Power management (P & C states) in the hypervisor
- HVM emulation domains (qemu-on-minios) for better scalability, performance and security
- PVGrub: boot PV kernels using real GRUB inside the PV domain
- Better PV performance: domain lock removed from pagetable-update paths
- Shadow3: optimisations to make this the best shadow pagetable algorithm yet, making HVM performance better than ever
- Hardware Assisted Paging enhancements: 2MB page support for better TLB locality
- CPUID feature levelling: allows safe domain migration across systems with different CPU models
- PVSCSI drivers for SCSI access direct into PV guests
- HVM framebuffer optimisations: scan for framebuffer updates more efficiently
- Device passthrough enhancements
- Full x86 real-mode emulation for HVM guests on Intel VT: supports a much wider range of legacy guest OSes
- New qemu merge with upstream development
- Many other changes in both x86 and IA64 ports
RHELの古いXenから開放されたのでやっとGPLPVが使えそうです。
*1:最初からXenServer使えばいいっていうのはなしで。
Xenのディスクイメージファイルを拡張してみた
Xenのディスクイメージファイルを拡張してみました。]]Ubuntu Japan[[ にXenのディスクイメージの拡張方法が書いてあったので試してみたのですが、なかなかうまくいきませんでした。
# cd /etc/xen/images # mv sarge-root.img sarge-root.img.old # dd if=/dev/zero of=zero-1gb.img bs=1024k count=1024 # cat sarge-root.img.old zero-1gb.img > sarge-root.img # e2fsck -fv sarge-root.img # resize2fs sarge-root.img # e2fsck -fv sarge-root.img # xm create /etc/xen/sarge -c
上記の手順だと少なくともOSがLinuxでLVMでインストールした場合はうまくいきません。とりあえず色々調べてみて、一応できるようになったので備忘録として残しておきます。
手順はこんな感じ
作業はすべてrootでおこなっています。
- DomainUを停止
- ddやcatでディスクイメージのサイズを大きくする
- losetupでXenイメージファイルをループバックデバイスで制御できるようにする
- fdiskで区画を変更する
- 使ったループバックデバイスを削除する
- DomainUを起動
- pvresizeでFree領域を拡張する
- lvresizeでlvを拡張
- resize2fsでスライス拡張
DomainUを停止
適当に停止してください。
$ xm destroy test001
ディスクイメージのサイズを大きくする
通常の場合。ここでは3GB増やしてみる。
$ mv test001.img test001.img.bak $ dd if=/dev/zero bs=1M count=0 seek=3072 of=./zerofile.img $ cat test001.img.bak zerofile.img > test001.img
スパースファイルの場合(ここ参考)
$ cp -p --sparse=auto test001.img test001.img.bak # sparse-fileを維持してコピー $ ls -ls test001.img 1081764 -rwxr-xr-x 1 root root 2147483649 Apr 16 03:16 test001.img $ ruby -e 'File.open("test001.img","a").truncate(5<<30)' $ ls -ls test001.img 1081764 -rwxr-xr-x 1 root root 5368709120 Apr 16 03:45 test001.img
losetupでXenイメージファイルをループバックデバイスで制御
空きloopbackデバイスを調べてループバックデバイスを設定します。
$ losetup -f /dev/loop0 $ losetup /dev/loop0 ./test001.img $ losetup -a /dev/loop0: [fd00]:19367365 (./test001.img) $ fdisk -lu /dev/loop0 Disk /dev/loop0: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders, total 10485760 sectors Units = sectors of 1 * 512 = 512 bytes Device Boot Start End Blocks Id System /dev/loop0p1 * 63 208844 104391 83 Linux /dev/loop0p2 208845 4192964 1992060 8e Linux LVM
fdiskで区画を変更する
fdiskで対象のスライスをいったん削除してシリンダサイズを再設定します。
$ fdisk /dev/loop0 Command (m for help): d Partition number (1-4): 2 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (14-652, default 14): Using default value 14 Last cylinder or +size or +sizeM or +sizeK (14-652, default 652): Using default value 652 Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Linux LVM) Command (m for help): p Disk /dev/loop0: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/loop0p1 * 1 13 104391 83 Linux /dev/loop0p2 14 652 5132767+ 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
使ったループバックデバイスを削除する
マナーとしてちゃんと後処理をする。
$ losetup -d /dev/loop0
DomainUを起動
$ xm create test001 -c
pvresizeでFree領域を拡張する
最初のpvscanでは "0 free" だが、pvresizeのpvscanでは "3.00 GB free" になっていることを確認。
$ pvscan PV /dev/xvda2 VG VolGroup00 lvm2 [1.88 GB / 0 free] Total: 1 [1.88 GB] / in use: 1 [1.88 GB] / in no VG: 0 [0 ] $ pvresize /dev/xvda2 Physical volume "/dev/xvda2" changed 1 physical volume(s) resized / 0 physical volume(s) not resized $ pvscan PV /dev/xvda2 VG VolGroup00 lvm2 [4.88 GB / 3.00 GB free] Total: 1 [4.88 GB] / in use: 1 [4.88 GB] / in no VG: 0 [0 ]
lvresizeでlvを拡張
$ lvscan ACTIVE '/dev/VolGroup00/LogVol00' [1.47 GB] inherit ACTIVE '/dev/VolGroup00/LogVol01' [416.00 MB] inherit $ lvdisplay /dev/VolGroup00/LogVol00 --- Logical volume --- LV Name /dev/VolGroup00/LogVol00 VG Name VolGroup00 LV UUID oeAdv9-Cml8-04Ja-uZDM-3cvt-ZwIn-KXzEAM LV Write Access read/write LV Status available # open 1 LV Size 1.47 GB Current LE 47 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 $ lvresize -L +3G /dev/VolGroup00/LogVol00 Extending logical volume LogVol00 to 4.47 GB Logical volume LogVol00 successfully resized
resize2fsでスライス拡張
resize2fsでスライスを拡張します。LV Sizeは 先ほどは 1.47GBだったのが 4.47GBになっていることを確認。
$ resize2fs /dev/VolGroup00/LogVol00 resize2fs 1.39 (29-May-2006) Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required Performing an on-line resize of /dev/VolGroup00/LogVol00 to 1171456 (4k) blocks. The filesystem on /dev/VolGroup00/LogVol00 is now 1171456 blocks long. $ lvdisplay /dev/VolGroup00/LogVol00 | grep "LV Size" LV Size 4.47 GB $ df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/mapper/VolGroup00-LogVol00 4.4G 901M 3.3G 22% / /dev/xvda1 99M 13M 81M 14% /boot tmpfs 151M 0 151M 0% /dev/shm
参考
Thanks!
- http://old.ubuntulinux.jp/wiki/HowToUseXen/
- http://d.hatena.ne.jp/gunshot/20080604/p1
- https://www.palmtb.net/wiki/?cmd=view&p=%A5%C7%A5%A3%A5%B9%A5%AF%A5%A4%A5%E1%A1%BC%A5%B8%A4%CE%B3%C8%C4%A5&key=Xen
- http://sokohakato.wordpress.com/linux/centos/xenimgmount/
- https://lumiere.atobe.com/blog/?item=lvm-xen-lvm
- http://sugi.nemui.org/diary/20060113.html#p03
OpenSolaris 2008.11版インストールしてみた
日本製のOpenSolarisディストリビューションの「Jaris」がクールな感じで使ってみたかったのですが、僕のDELL Inspiron 1420 ではNICが認識しませんでした。無線NICは認識しているんだけど私の家は無線使ってないのでアウト。Compiz Fusionもグリグリできてクールなのに残念。
DELL Inspiron 1420 の NICドライバ は BCM5906M。ぐぐってみるとOpenSolarisの snv_100 で 対応してくれているようです。*1
http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6603710
Bug ID 6603710
Synopsis Request: support for Broadcom NetLink BCM5906M Fast Ethernet PCI Express(pci14e4,1713.17aa.3861.2)
State 10-Fix Delivered (Fix available in build)
Category:Subcategory driver:bge
Keywords
Responsible Engineer Yong Tan
Reported Against snv_83 , snv_85 , snv_87 , osol_2008.05
Duplicate Of
Introduced In solaris_nevada
Commit to Fix snv_100
2008.11版のOpenSolarisは snv_101b(Solaris Nevada build バージョンでいいのかな?) ですので、こっちに乗り換えてみました。
OpenSolaris 2008.11版ダウンロード
OpenSolarisダウンロードセンターから2008.11版をダウンロード。適当にDVDにでも焼いてください。
wget http://dlc.sun.com/osol/opensolaris/2008/11/osol-0811.iso
OpenSolaris 2008.11版インストール
OpenSolarisのメディアをbootさせるとそのままLiveCDとして起動します。
デスクトップにある「OpenSolarisをインストールする」アイコンをクリックしてインストールを始めます。
ネットワークの設定
ネットワークの設定をします。スタティックにIPを割り振るので[手動](Manually)で設定します。[システム] -> [システム管理] -> [ネットワーク]
名前解決でDNSをちゃんと参照するように/etc/nsswitch.confを修正
$ vi /etc/nsswitch.conf hosts: files dns
extraリポジトリの追加
ここを参考。Sun Online Account を取得してSun ID と Passoword を入れログインして2つのファイルを取得。Sun ID は登録時のメールアドレスになります。
- Download(key)
- Doenload Certificate
$ pfexec mkdir -m 0755 -p /var/pkg/ssl $ pfexec cp -i ./OpenSolaris_extras.key.pem /var/pkg/ssl $ pfexec cp -i ./OpenSolaris_extras.certificate.pem /var/pkg/ssl $ pfexec pkg set-authority \ > -k /var/pkg/ssl/OpenSolaris_extras.key.pem \ > -c /var/pkg/ssl/OpenSolaris_extras.certificate.pem \ > -O https://pkg.sun.com/opensolaris/extra/ extra
パッケージマネージャで必要なアプリをインストール
好みのアプリをインストール。
$ sudo pkg install SUNWgcc SUNWruby18 SUNWscreen
Xenを使えるように設定
Domain0に必要なものをインストール。ここ参考。あとxvmとかvirtと付くものは適当にインストール。
$ sudo pkg install SUNWvirt-manager SUNWvirtinst SUNWxvmhvm SUNWvirtinst SUNWlibvirt SUNWurlgrabber
Xen-kernelをgrubのmenu.lstに追加
$ sudo vim /rpool/boot/grub/menu.lst title OpenSolaris 2008.05 snv_101b_rc2 X86 xVM bootfs rpool/ROOT/opensolaris kernel$ /boot/$ISADIR/xen.gz module$ /platform/i86xpv/kernel/$ISADIR/unix /platform/i86xpv/kernel/$ISADIR/unix -B $ZFS-BOOTFS module$ /platform/i86pc/$ISADIR/boot_archive
Domain0で起動するkernelを追加したgrubのmenu.lstをリンク
$ sudo ln -s /rpool/boot/grub/menu.lst /boot/grub/menu.lst
感想
*1:Jarisの2008.10リリース版は nv_98 みたい。
ネットワーク上にある仮想マシンを探す方法
仮想マシンがたくさん増えるとその管理も大変になります。仮想化を推し進めればコストダウンになると思いきや、単純にサーバの数が増えるので管理コストが増えしまいます。いいかげんな開発環境によっては勝手にIPを振り仮想マシンをボコボコ起動させる人もいますので、ネットワーク上にある仮想マシンを探すようにしてみました。
検索方法
nmapを使うだけで検知できます。仮想マシンはMACアドレスのベンダー部が決まっているのでそこから判別しています。これだと少し見難いです。
C:\admin>nmap -sP 192.168.1.0/24 Starting Nmap 4.76 ( http://nmap.org ) at 2009-02-07 02:44 東京 (標準時) Host 192.168.1.1 appears to be up. MAC Address: 00:0D:02:23:7D:91 (NEC AccessTechnica) Host crimson (192.168.1.3) appears to be up. Host epitaph (192.168.1.4) appears to be up. MAC Address: 00:22:19:19:98:F8 (Dell) Host moonchild (192.168.1.10) appears to be up. MAC Address: 00:1C:23:FB:7C:74 (Dell) Host bound (192.168.1.11) appears to be up. MAC Address: 00:0C:29:98:0D:33 (VMware)
コード
もう少し綺麗に出力したいので、nmap-parserを使った簡単なコードを書いてみました。
- nmap-parserをインストールします。
C:\admin>gem install nmap-parser Successfully installed nmap-parser-0.3.1 1 gem installed Installing ri documentation for nmap-parser-0.3.1... Installing RDoc documentation for nmap-parser-0.3.1...
- サンプルコード
#!/usr/bin/ruby require 'rubygems' require 'nmap/parser' array = [] parser = Nmap::Parser.parseread($stdin) parser.hosts {|host| array << [host.addr, host.mac_addr] } xen_mac = /^00:16:3E/ vmw_mac = /^00:0C:29/ array.select {|a| puts "#{a.join(" ")} xen" if a[1] =~ xen_mac puts "#{a.join(" ")} vmware" if a[1] =~ vmw_mac }
使用方法ですが上記コードを適当な名前で保存して実行してください。nmap の -oX は結果をXMLで出力します。
C:\admin>nmap -oX - 192.168.1.0/24 | ruby vir_scan.rb 192.168.1.11 00:0C:29:98:0D:33 vmware 192.168.1.12 00:0C:29:4D:B4:61 vmware 192.168.1.31 00:0C:29:57:ED:E6 vmware 192.168.1.41 00:16:3E:67:F3:E7 xen 192.168.1.43 00:16:3E:0C:DC:55 xen 192.168.1.44 00:16:3E:7E:09:A5 xen
nmapには対象ホストのOSを推測する OS fingerprinting 機能があります。 この機能を使えばさらに詳細に調べることができると思います。
*1:centos5.2のNmap4.11ではnmap-parserを使ったコードが失敗してしまった