Kozupon.com    
 
 XenでDebian etch or lennyを仮想化する!


随分前から、仮想化が流行ってる。流行ってはいるが、仮想化と言うキーワードが本当に美味しいところはどういうところなのであろう?
俺自身内心疑問に思ってる部分が有る。仮想化という言葉が出てきたのも、CPUの高速化、メモリの肥大化、HDDの大容量化が進んだからこそ、仮想化という言葉が出てきたのだと思う。
元々、サーバマシンは、一品一様の考えが有、ウェブサーバはウェブサーバとして一台、メールサーバはメールサーバとして一台・・・。ってな具合にワン機能ワンサーバの考えが有った。しかし、これでは、サーバマシンばかりになり、一台一台の管理の利便性も悪いし、とにもかくにも電力の消費が著しく多くなるのも問題だ。
そこで、インターネットサーバの省エネ、省スペース等でコストダウンを図るのには仮想化の意味が出てきそうだ。したがって、ここではDebian4.0 etch(& lenny対応) を使ってXenをインストールして、仮想化の魅力を実感してみようと思う。

俺の場合は、自分のサーバを現在全て1サーバ1機能としている。そのため、Xenを使ってサーバの台数を減らして省電力化、省スペース化を実現してみたい。


付録1
仮想化テストマシン環境)
# more /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 3
model name : Pentium II (Klamath)
stepping : 3
cpu MHz : 418.822
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu tsc msr pae mce cx8 mtrr mca cmov mmx up
bogomips : 1505.59

# lspci
00:00.0 Host bridge: Intel Corporation 440LX/EX - 82443LX/EX Host bridge (rev 03)
00:01.0 PCI bridge: Intel Corporation 440LX/EX - 82443LX/EX AGP bridge (rev 03)
00:04.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 01)
00:04.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:04.2 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB (rev 01)
00:04.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 01)
00:09.0 Ethernet controller: 3Com Corporation 3c905 100BaseTX [Boomerang]
00:0c.0 VGA compatible controller: Matrox Graphics, Inc. MGA 1064SG [Mystique] (rev 02)

付録2
Xenの中核のコマンドであるxmコマンドのヘルプを掲載。
# xm -h
Usage: xm <subcommandオプション> [Domain-U名]

Control, list, and manipulate Xen guest instances.

xm full list of subcommands:

console      Domain-Uへコンソールアタッチする
create       Domain-Uを <ConfigFile> に合わせてクリエートする(作成する)
destroy      緊急にDomain-Uを終了させる
domid       Domain名をDomain IDに変換する
domname     Domain IDをDomain名に変換する
dump-core    Dump core for a specific domain.
list         List information about all/some domains.
mem-max     Set the maximum amount reservation for a domain.
mem-set     Set the current memory usage for a domain.
migrate      Migrate a domain to another machine.
pause        Pause execution of a domain.
reboot       Reboot a domain.
rename       Rename a domain.
restore       Restore a domain from a saved state.
save         Save a domain state to restore later.
shutdown     Shutdown a domain.
sysrq        Send a sysrq to a domain.
top          Monitor a host and the domains in real time.
unpause      Unpause a paused domain.
uptime       Print uptime for a domain.
vcpu-list      List the VCPUs for a domain or all domains.
vcpu-pin      Set which CPUs a VCPU can use.
vcpu-set     Set the number of active VCPUs for allowed for
the domain.
dmesg        Read and/or clear Xend's message buffer.
info          Get information about Xen host.
log           Print Xend log
serve         Proxy Xend XMLRPC over stdio.
sched-credit   Get/set credit scheduler parameters.
sched-sedf    Get/set EDF parameters.
block-attach   Create a new virtual block device.
block-detach   Destroy a domain's virtual block device.
block-list List  virtual block devices for a domain.
block-configure Change block device configuration
network-attach Create a new virtual network device.
network-detach Destroy a domain's virtual network device.
network-list   List virtual network interfaces for a domain.
vtpm-list     List virtual TPM devices.
vnet-list      List Vnets.
vnet-create    Create a vnet from ConfigFile.
vnet-delete    Delete a Vnet.
labels        List <type> labels for (active) policy.
addlabel       Add security label to domain.
rmlabel       Remove a security label from domain.
getlabel      Show security label for domain or resource.
dry-run       Test if a domain can access its resources.
resources     Show info for each labeled resource.
makepolicy     Build policy and create .bin/.map files.
loadpolicy     Load binary policy into hypervisor.
cfgbootpolicy   Add policy to boot configuration.
dumppolicy     Print hypervisor ACM state information.

# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 239 1 r----- 2725.1
michan 2 128 1 -b---- 123.1
sub3 3 128 1 -b---- 126.4


1.Xenインストールと運用
1)Xenの主要なモジュールをaptする

# apt-get update
# apt-get install xen-linux-system-2.6.18-6-xen-686
(lennyの場合、xen-linux-system-2.6.26-1-xen-686) libc6-xen xen-tools bridge-utils udev(lennyの場合)

Domain-Oを有効にするため、念のため再起動する(必要ないかも知れない)。
# reboot

再起動後、Domain-Oが出来てるかどうか確認する。
# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 367 1 r----- 1295.2

2)仮想ブリッジを設定する
設定ファイルを編集してXenの仮想ブリッジを有効にする。
# vi /etc/xen/xend-config.sxp

省略
# (network-script 'network-bridge netdev=eth1')
(network-script 'network-bridge netdev=eth0')
  ←コメントアウトして、デバイスは ifconfig -a で使用されてるデバイスを記載する

# The bridge is named xenbr0, by default. To rename the bridge, use
#
# (network-script 'network-bridge bridge=<name>')
#
# It is possible to use the network-bridge script in more complicated
# scenarios, such as having two outgoing interfaces, with two bridges, and
# two fake interfaces per guest domain. To do things like this, write
# yourself a wrapper script, and call network-bridge from it, as appropriate.
#
(network-script network-dummy)
省略

再起動してXenの仮想ブリッジを有効にする。
# reboot

3)Domain-U全体の設定をする
# vi /etc/xen-tools/xen-tools.conf

dir = /home/xen                           ←Domain-Uのディレクトリの設定

debootstrap = 1                           ←lennyの場合、install-method=debootstrap

size = 4Gb # Disk image size.                 ←Domain-Uのディスクサイズの設定

memory = 128Mb # Memory size                ←Domain-Uのメモリサイズの設定

swap = 128Mb # Swap size                    ←Domain-Uのスワップサイズの設定

fs = ext3 # use the EXT3 filesystem for the disk image. ←Domain-Uのファイルシステムの設定

dist = etch # Default distribution to install.        ←Domain-UのOSの設定

image = sparse # Specify sparse vs. full disk images.

gateway = 192.168.255.1

netmask = 255.255.255.0

kernel = /boot/vmlinuz-2.6.18-6-xen-686         ←lennyの場合、kernel=/boot/vmlinuz-`uname -r`

initrd = /boot/initrd.img-2.6.18-6-xen-686        ←lennyの場合、initrd=/boot/initrd.img-`uname -r`

arch = i386                               ←lennyの場合、CPUタイプを記載

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

4)実際にDomain-Uを作る
■ゲスト1を作る(Debian4.0etch ホスト名:michan)
# xen-create-image --ip 192.168.255.8 --hostname michan
やり直しによる上書きの場合は、--forceオプションを付ける。

General Infomation
--------------------
Hostname : michan
                     ←ホストネーム
Distribution : etch
                      ←OS
Fileystem Type : ext3
                   ←ファイルシステム

Size Information
----------------
Image size : 4Gb
                      ←Domain-Uのディスクサイズ
Swap size : 128Mb
Image type : sparse
Memory size : 128Mb
                   ←Domain-Uのメモリサイズ
Kernel path : /boot/vmlinuz-2.6.18-6-xen-686
Initrd path : /boot/initrd.img-2.6.18-6-xen-686

Networking Information
----------------------
IP Address 1 : 192.168.255.8
              ←IPアドレス
Netmask : 255.255.255.0
                 ←ネットマスク
Gateway : 192.168.255.1
                 ←このネットワークのGateway

Creating swap image: /home/xen/domains/michan/swap.img
Done

Creating disk image: /home/xen/domains/michan/disk.img
Done

Creating ext3 filesystem on /home/xen/domains/michan/disk.img
Done

Installing your system with debootstrap mirror http://ftp.us.debian.org/debian/

Done

Running hooks


Done

No role script specified. Skipping

Creating Xen configuration file
Done
All done


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

設定ファイルを解かり易くするため、リネームする。
# mv /etc/xen/michan.cfg /etc/xen/michan

実際に、ゲスト1(Domain-U)へアクセスする。
# xm create -c michan

途中省略

Debian GNU/Linux 4.0 michan tty1

michan login: root

rootでログインしてもはじめはパスワード無しでログインして、rootのパスワードを作成する。
# passwd root
Enter Password : xxxxxxxxxx

ゲストOS(Domain-U)からホストOS(DomainO)へ戻るには、以下のコマンドを打つ!
# ctrl +]

改めて、コンソールログインするにはホストOS(DomainO)側から、
# xm console michan

Debian GNU/Linux 4.0 michan tty1

michan login:

■ゲスト2を作る(Debian4.0etch ホスト名:sub3)
# xen-create-image --ip 192.168.255.111 --hostname sub3

General Infomation
--------------------
Hostname : sub3
Distribution : etch
Fileystem Type : ext3

Size Information
----------------
Image size : 4Gb
Swap size : 128Mb
Image type : sparse
Memory size : 128Mb
Kernel path : /boot/vmlinuz-2.6.18-6-xen-686
Initrd path : /boot/initrd.img-2.6.18-6-xen-686

Networking Information
----------------------
IP Address 1 : 192.168.255.111
Netmask : 255.255.255.0
Gateway : 192.168.255.1

Creating swap image: /home/xen/domains/sub3/swap.img
Done

Creating disk image: /home/xen/domains/sub3/disk.img
Done

Creating ext3 filesystem on /home/xen/domains/sub3/disk.img
Done

Installing your system with debootstrap mirror http://ftp.us.debian.org/debian/

Done

Running hooks


Done

No role script specified. Skipping

Creating Xen configuration file
Done
All done


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

# mv /etc/xen/sub3.cfg /etc/xen/sub3

# xm create -c sub3

途中省略

Debian GNU/Linux 4.0 sub3 tty1

sub3 login:

# xm console sub3

Debian GNU/Linux 4.0 sub3 tty1

sub3 login:

同じく、はじめのログインはrootのパスワード無し、rootのパスワードを作成する。

# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 239 1 r----- 2591.7
michan 2 128 1 ------ 57.8
sub3 3 128 1 -b---- 90.4

5)Domain-U ゲスト1、ゲスト2の自動起動設定
# mkdir /etc/xen/auto
# ln -s /etc/xen/michan /etc/xen/auto/
# ls -l /etc/xen/auto
total 0
lrwxrwxrwx 1 root root 17 2008-11-11 23:57 michan -> /etc/xen/michan

※ sub3も同要領で登録する。


2.バックアップの方法(Domain-U ゲスト1のバックアップの場合)

1)ゲスト1(michanホスト)のイメージファイルの確認
# ls -al /home/xen/domains/michan/

total 884852
drwxr-xr-x 2 root root 4096 Nov 10 01:00 .
drwxr-xr-x 4 root root 4096 Nov 10 03:35 ..
-rw-r--r-- 1 root root 4294967296 Nov 10 01:00 disk.img
-rw-r--r-- 1 root root 134217728 Nov 10 01:00 swap.img

# cd /etc/xen/

2)Domain-Uリスト確認
# xm list

Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 239 1 r----- 2905.2
michan 2 128 1 -b---- 172.3
sub3 3 128 1 -b---- 175.2

# ls
michan sub3 xend-pci-permissive.sxp
scripts xend-config.sxp xend-pci-quirks.sxp

3)Domain-Uゲスト1の設定ファイルの内容確認
# cat michan
kernel = '/boot/vmlinuz-2.6.18-6-xen-686'
ramdisk = '/boot/initrd.img-2.6.18-6-xen-686'
memory = '128'
root = '/dev/sda1 ro'
disk = [ 'file:/home/xen/domains/michan/disk.img,sda1,w',
'file:/home/xen/domains/michan/swap.img,sda2,w' ]
name = 'michan'
vif = [ 'ip=192.168.255.8' ]
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

4)バックアップするために、Domain-Uを一端シャットダウンする
# xm shutdown michan -w
Domain michan terminated
All domains terminated

-wオプションは完全にシャットダウンするまで応答を返さないことを意味する。

シャットダウンしたことを確認する。
# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 239 1 r----- 2912.3
sub3 3 128 1 -b---- 175.4

5)バックアップディレクトリを作成する
# cd /home/xen/domains/
# mkdir images-backup
# mkdir images-backup/michan

6)バックアップ(コピー)する
# cp -v michan/*.img ./images-backups/michan/

7)バックアップされてるか確認する
# ls -l images-backup/

-rw-r--r-- 1 root root 4294967296 Nov 10 01:00 disk.img
-rw-r--r-- 1 root root 134217728 Nov 10 01:00 swap.img

8)設定ファイルをバックアップする
# cp -v /etc/xen/michan ./images-backup/michan

9)バックアップ作業が終了したので再び、michan Domain-Uを起動する
# xm create -c michan

以上


 
 
 



Copyright 2010 Kozupon.com.