仮想化に挑戦

どうにか例のUSBのワイヤレスネットワークカードを使いたいということで、なんか方法は無いかと考えた。

思いついた。

仮想化。

仮想化するしかないだろ。
ということで、仮想化といえばxen。
使ったこと無いけどやってみようということで、レッツトライ。

まず、うちのサーバ機の簡単なディスク構成。

# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/md1              9.2G  1.1G  7.7G  13% /
tmpfs                 2.0G     0  2.0G   0% /lib/init/rw
udev                   10M  236K  9.8M   3% /dev
tmpfs                 2.0G     0  2.0G   0% /dev/shm
/dev/sdc1             230G  130G   89G  60% /backup
/dev/md0               92M   62M   25M  72% /boot
/dev/md2               46G  4.4G   40G  11% /data
/dev/md3               92G   23G   65G  26% /home
/dev/md6              3.7G   72M  3.5G   3% /tmp
/dev/md4               19G  1.5G   16G   9% /usr
/dev/md5               19G  3.5G   14G  20% /var

本当に簡単ですいません。
とりあえず、SATAのディスクが3本ついてて、sda, sdbでミラーリングしてます。
sdcがバックアップ用のディスクですはい。

じゃ、そういうことでxenのインスコ。

# aptitude install xen-linux-system-2.6.26-2-xen-amd64

さて。
とりあえずインストールはした。
んで再起動してxenカーネルをgrubのメニューから選んで起動してみる。

怒られた。

"error: you need to load multiboot kernel first"

だそうだ。

サーバ機はgrub2なので、/boot/grub/grub.cfgをみてみる。
他のカーネルと同じ起動オプションになっている。
ところが、調べてみるとどうもそれではダメなようだ。
まず、multibootでxenカーネルを起動し、そこからLinuxカーネルを起動する形になるようだ。
xenの仕組みを考えると自然な流れだ。
ということで、grub.cfgにエントリを追加してみる。

menuentry “Xen 3.2-1-amd64″ {
insmod raid mdraid
set root=(md0)
search –fs-uuid –set 60d0003a-83aa-419a-a5ca-3868822cc6e7
multiboot /xen-3.2-1-amd64.gz dom0_mem=3G
module /vmlinuz-2.6.26-2-xen-amd64 root=UUID=7d0cecc1-e020-4d48-9ba4-77190cb2424c ro quiet
module /initrd.img-2.6.26-2-xen-amd64
}

基本的にはgrub2が自動生成したメニューをちょこっといじくった感じだ。
linux行とinitrd行をmoduleにして、その前にmultibootでxenそのものをロードするように記述。
dom0_memでドメイン0で利用するメモリ量を指定している。
ちなみにドメイン0ってのはホストドメインで、ドメインUがゲストドメインとなる。
そして再起動。

こけた。

なんかダンプはいて死んでる。
いろいろと起動の仕方変えてみたけどやっぱりダメ。
そこで、sidじゃなくて枯れてるやつ使ってみようということで

# aptitude install xen-linux-system-2.6.18-6-xen-amd64

として設定してみたけど、Unknown Interruptとかいわれてやっぱり死ぬ。
何が原因だろうかと思って調べてみたところ、こんなのを見つけた。

XenServer currently does not support software RAID of Dom0.

あ、はい。
おもいっきりソフトウェアRAIDでミラーリングしてます。
mdraid使ってますはい。

これはあきらめるかと思ったが、ひらめいた。
ゲストにしたいと思っていた32bitのカーネルの方をホストにしてやればいいんじゃね?
ざ・逆転の発想。
ということで、まず、バックアップ用のディスクのサイズを縮めようか。
今めいいっぱい使ってるんで。

# umount /dev/sdc
# e2fsck -f /dev/sdc1
# resize2fs -p /dev/sdc1 230G
resize2fs 1.41.5 (23-Apr-2009)
Resizing the filesystem on /dev/sdc1 to 55050240 (4k) blocks.
Begin pass 2 (max = 192656)
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 1864)
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 4 (max = 61920)
Updating inode references     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/sdc1 is now 55050240 blocks long.
# fdisk /dev/sdc
# mount /dev/sdc1

ということで、縮小した。
ちなみにファイルシステムを縮小するときは先に実データを縮めて、fdiskでパーティション領域を調整、拡大するときはfdiskで拡張してから実データを拡張するという流れ。

さて、次にやることはと。
あいた領域にxenのドメイン0となるホストOSを入れるのか。
ということで、またfdiskたたいて領域確保。
どうせたいしたことやらないし既存の方からブートもできるから、swapと/しか切らない。
さて、インストールと参りますか。

BIOSでファーストブートのHDDをsdcに設定。
ということで、lenny i686インストール完了。
標準環境しか入れていない。
で、再起動が走ったわけだが、問題が発生。
grubが起動しない。
これはgrubをMBRにインストールを選んだときに、sdcじゃなくてsdaにいれやがったな。
sdaに変えたらやっぱり起動した。
とりあえず、

# grub-install /dev/sdc
# update-grub

ということでsdcからブートできるように。
既存のサーバ環境が起動できない罠にはまりかけたが、幸いミラーリングしておいたsdbのMBRにもgrub2を入れておいたので、そっちからブートできた。
既存の環境で立ち上げ直して、sdaのMBRをgrub2に戻す。

# grub-install /dev/sda
# update-grub

さて、本番のxen起動だ。
同様の手順で32bitバージョンの方にgrub2とxenをインストールして、grub2の設定を書き書きして起動する。

が。

起動しない。orz

同じようなエラーだ。

そこで、ふと、grub2じゃなくてgrubにしてみることにした。

# aptitude install grub
# grub-install /dev/sdc
# update-grub

すると。

title           Xen 3.2-1-i386 / Debian GNU/Linux, kernel 2.6.26-2-xen-686
root            (hd2,2)
kernel          /boot/xen-3.2-1-i386.gz
module          /boot/vmlinuz-2.6.26-2-xen-686 root=/dev/sdc3 ro console=tty0
module          /boot/initrd.img-2.6.26-2-xen-686

なんか違う。
console=tty0ってのがついてる。
これで立ち上げてみると。

コター。

立ち上がった。
ちょっと待て。
もしかするとだな。

メインの方で再起動。
そしてgrub.cfgを書き換える。

menuentry "Xen 3.2-1-amd64" {
        insmod raid mdraid
        set root=(md0)
        search --fs-uuid --set 60d0003a-83aa-419a-a5ca-3868822cc6e7
        multiboot /xen-3.2-1-amd64.gz dom0_mem=3G
        module /vmlinuz-2.6.26-2-xen-amd64 root=UUID=7d0cecc1-e020-4d48-9ba4-77190cb2424c
ro console=tty0
        module /initrd.img-2.6.26-2-xen-amd64
}

再起動。
あ、はい。
こけました。

そこで、grub2からgrubに変更。

title           Xen 3.2-1-amd64 / Debian GNU/Linux, kernel 2.6.26-2-xen-amd64
root            (hd0,0)
kernel          /xen-3.2-1-amd64.gz
module          /vmlinuz-2.6.26-2-xen-amd64 root=/dev/md1 ro console=tty0
module          /initrd.img-2.6.26-2-xen-amd64

うっほ。
起動した。
mdraid使ってても起動するじゃない。
ソフトウェアレイドいけるじゃない。
そこで、よーく眺めてもう一回grub2で挑戦。

menuentry “Xen with Debian GNU/Linux, linux 2.6.26-2-xen-amd64″ {
set root=(hd0,1)
multiboot       /xen-3.2-1-amd64.gz
module          /vmlinuz-2.6.26-2-xen-amd64 root=/dev/md1 ro console=tty0
module          /initrd.img-2.6.26-2-xen-amd64
}

あ、はい。
無理です。
grub2やめます。
grubにします。
ってかはじめっからgrubだったら簡単にいけたんじゃん。
もう朝ですよ。
grub2とか2ついてるくせに劣化してるじゃん。
知ってたけど。

ということでxenをチェック。

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3877     2     r—–     27.5

ミエルヨー。
ドメイン0ミエルヨー。

んじゃ、わざわざOS入れたけど無駄になったパーティションを使ってドメインUを作ろうじゃないか。

# aptitude install xen-tools
# vi /etc/xen-tools/xen-tools.conf

xen-tools.confの設定。

dir = /home/xen

install-method = debootstrap

size   = 4Gb      # Disk image size.
memory = 128Mb    # Memory size
swap   = 128Mb    # Swap size
# noswap = 1      # Don’t use swap at all for the new system.
fs     = ext3     # use the EXT3 filesystem for the disk image.
#dist   = etch     # Default distribution to install.
dist   = lenny     # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.

gateway   = 192.168.1.1
netmask   = 255.255.255.0
broadcast = 192.168.1.255

kernel      = /boot/vmlinuz-`uname -r`
initrd      = /boot/initrd.img-`uname -r`

arch=i386

#mirror = http://ftp.us.debian.org/debian/
mirror = http://ftp.jp.debian.org/debian/

ext3_options   = noatime,nodiratime,errors=remount-ro
ext2_options   = noatime,nodiratime,errors=remount-ro
xfs_options    = defaults
reiser_options = defaults

そして続き。

# mkdir /home/xen
# mount /dev/sdc3 /home/xen
# xen-create-image –ip 192.168.1.100 –hostname i386
WARNING
——-

You appear to have a “dummy” vif-script, or network-script, setting
in the Xen configuration file /etc/xen/xend-config.sxp.

Please fix this and restart Xend, or your guests will not be able to
use any networking!

General Information
——————–
Hostname       :  i386
Distribution   :  lenny
Partitions     :  swap            128Mb (swap)
/               4Gb   (ext3)
Image type     :  sparse
Memory size    :  128Mb
Kernel path    :  /boot/vmlinuz-2.6.26-2-xen-amd64
Initrd path    :  /boot/initrd.img-2.6.26-2-xen-amd64

Networking Information
———————-
IP Address 1   : 192.168.1.100 [MAC: 00:16:3E:FD:7D:81]
Netmask        : 255.255.255.0
Broadcast      : 192.168.1.255
Gateway        : 192.168.1.1

Creating partition image: /home/xen/domains/i386/swap.img
Done

Creating swap on /home/xen/domains/i386/swap.img
Done

Creating partition image: /home/xen/domains/i386/disk.img
Done

Creating ext3 filesystem on /home/xen/domains/i386/disk.img
Done
Installation method: debootstrap
Done

Running hooks
Done

No role scripts were specified.  Skipping

Creating Xen configuration file
Done
All done

Logfile produced at:
/var/log/xen-tools/i386.log

なんかwarningでてるな。
まあ後回し。
ドメインを作成してコンソールをみてみる。

# xm create i386.cfg
# xm console i386

なんかエラーでてるけど起動はしてるようだ。
んで、問題はコンソールにつながるにはつながるんだけど、固まる。
ついでにipみえてないんですよね。
IPはあのwarningなんだろうな。
ということで/etc/xen/xend-config.sxpをみてみる。
関係しそうなところをみて、コメントアウトしてxendを再起動。

(network-script network-bridge)

おお。ping通った。
で、コンソールはどうしたものか。
こういうときは作り直してみるに限る。
xen-toolsの設定を眺める。
気になるけどスルーしたところがあったので、そこを設定。

#
#  If you’re using the lenny or later version of the Xen guest kernel you will
# need to make sure that you use ‘hvc0′ for the guest serial device,
# and ‘xvdX’ instead of ‘sdX’ for serial devices.
#
#  You may specify the things to use here:
#
# serial_device = hvc0 #default
serial_device = hvc0
# serial_device = tty1
#
#disk_device = xvda #default
disk_device = xvda
# disk_device = sda
#

xendの方もどうやら(network-script network-dummy)は高度なネットワーク設定に使うようなので、とりあえずコメントアウト。
/etc/xen/i386.cfgと/home/xen/domains/i386を一回消して再度作成し直す。
が、エラー。
何事かと思って/var/log/xen-tools/i386.logを見ると。。。

ftp.jp.debian.orgが落ちてる。

仕方ないのでusで設定して再チャレンジ。

usも落ちてる。

っていうか、security.debian.orgも落ちてる。

おかしいだろと思ってgoogleにpingうつと帰ってこない。
あ、はい。
こっちのネットワークがなんかおかしくなったようです。
networkingを再起動したら直りました。
すいません。

で、作り直した。
再びcreateしてconsoleやったら。

Debian GNU/Linux 5.0 i386 hvc0

i386 login:

コター。

とりあえずrootでログインしてパスワード設定。
んで。
外部に接続が通っていない。
xendのブリッジがうまく機能していない模様。
っていうかxenbrがifconfigたたいても生まれてない。
pethとvifはいるんだけどxenbrがいないから、vifとpethがつながってない状況だ。

ああ。
朝。
もうダメだ。
時間的に無理。
今日はここまで。

「仮想化に挑戦」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>