The Sixwish project

Linux Notes / CentOS5 + Xen

Domain-Uの複製方法

OSイメージをコピーしてバックアップとして残すのと同時に、二つ目の仮想OSを起動する方法です。

作業はリモートから putty でアクセス。その後、rootになって行ないます。

各種ファイルの確認

まずは xm 設定ファイルがある事を確認します。
このサイトの中の手順通りに構築している場合は、「What is the name of your virtual machine?」で問われた時に入力した名前。
もしくはxm listで表示される名称になります。

今回の場合、仮想OS名をlabsixwishにしています。

では確認してみます。

[root@sixwish ~]# cd /etc/xen/
[root@sixwish xen]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1764     2 r-----    xxx.x
labsixwish                                 x      255     1 -b----    xxx.x
[root@sixwish xen]# ls
auto        scripts                  xend-pci-quirks.sxp  xmexample1
labsixwish  xend-config.sxp          xmexample.hvm        xmexample2
qemu-ifup   xend-pci-permissive.sxp  xmexample.vti
[root@sixwish xen]# cat labsixwish
# Automatically generated xen config file
name = "labsixwish"
memory = "256"
disk = [ 'tap:aio:/var/lib/xen/images/labsixwish.pvm.img,xvda,w', ]
vif = [ 'mac=xx:xx:xx:xx:xx:xx, bridge=xenbr0', ]

uuid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
bootloader="/usr/bin/pygrub"
vcpus=1
on_reboot   = 'restart'
on_crash    = 'restart'
[root@sixwish xen]#

上から何を行なっているかというと

  1. 最初に設定ファイルがある場所へ移動
  2. xm listで稼動中のDomain-Uの名称を確認
    • 仮想OSが起動していない場合は Domain-0 だけが表示されます
    • 確認できなかった場合はファイルが有るかを確認します。

今回は名称がわかっているのでcatで内容を表示しています。似たような方式で書かれているファイルがあればそれが当りである可能性が高いです。
判別する方法としては、仮想OSのイメージファイルの保存場所(disk = で始まる個所に表示されている)にファイルが有るかを確認すればよいでしょう。

イメージファイルを確認します。
イメージファイルの場所は設定ファイル中の記述をベースに探すのがベター。

[root@sixwish xen]# ls -l /var/lib/xen/images/labsixwish.pvm.img
-rwxr-xr-x 1 root root 10737418241  8月 28 18:55 /var/lib/xen/images/labsixwish.pvm.img
[root@sixwish xen]#

これでファイルを確認しました。

仮想OSの停止

一旦、仮想OSをシャットダウンします。

[root@sixwish xen]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1764     2 r-----     28.9
labsixwish                                 1      255     1 -b----     14.3
[root@sixwish xen]# xm shutdown labsixwish -w
Domain labsixwish terminated
All domains terminated
[root@sixwish xen]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1764     2 r-----     29.7
[root@sixwish xen]#

-wのオプションは完全にシャットダウンするまで応答を返さないというものです。
コマンド実行後、しばらく待たされますが正常だと思うので気長に待ちましょう。

応答が返ってきたら、xm listで仮想OSの稼動状態を確認しておきます。

ファイルコピー

OSのイメージファイルのバックアップをコピーします。
今回は、CentOS 5 on Xen(CnetOS5) Domain-U用最小化手順を行なった後のファイルを想定しています。
今後、このファイルをベースに実験、構築を行ないやすいようにするのが目的でもあります。

[root@sixwish xen]# cd /var/lib/xen/
[root@sixwish xen]# mkdir images-backup
[root@sixwish xen]# cp -v images/labsixwish.pvm.img images-backup/mini-centos5.pvm.img
`images/labsixwish.pvm.img' -> `images-backup/mini-centos5.pvm.img'
[root@sixwish xen]# ls -l images
合計 1491656
-rwxr-xr-x 1 root root 10737418241  8月 28 18:58 labsixwish.pvm.img
[root@sixwish xen]# ls -l images-backup/
合計 1152180
-rwxr-xr-x 1 root root 10737418241  8月 28 19:06 mini-centos5.pvm.img
[root@sixwish xen]# cp -v /etc/xen/labsixwish ./images-backup/mini-centos5
`/etc/xen/labsixwish' -> `./images-backup/mini-centos5'
[root@sixwish xen]# 

これでバックアップが終わりです。
本来はlsでサイズをみるだけではなく、md5sum などでチェックした方が良いのですがとりあえず。

仮想OSの複製

OSイメージをコピー、設定ファイルを書き換えて起動まで持っていきます。

とりあえず仮想OSの名称は「lab2sixwish」とします。

[root@sixwish xen]# cp -v images/labsixwish.pvm.img images/lab2sixwish.pvm.img
`images/labsixwish.pvm.img' -> `images/lab2sixwish.pvm.img'
[root@sixwish xen]# ls -l images
合計 2643836
-rwxr-xr-x 1 root root 10737418241  8月 28 19:17 lab2sixwish.pvm.img
-rwxr-xr-x 1 root root 10737418241  8月 28 18:58 labsixwish.pvm.img
[root@sixwish xen]# cd /etc/xen/
[root@sixwish xen]# cp -v labsixwish lab2sixwish
`labsixwish' -> `lab2sixwish'
[root@sixwish xen]# 

ファイルのコピーが終了後、設定ファイルを修正していきます。

# Automatically generated xen config file
name = "labsixwish"
memory = "256"
disk = [ 'tap:aio:/var/lib/xen/images/labsixwish.pvm.img,xvda,w', ]
vif = [ 'mac=xx:xx:xx:xx:xx:xx, bridge=xenbr0', ]

uuid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
bootloader="/usr/bin/pygrub"
vcpus=1
on_reboot   = 'restart'
on_crash    = 'restart'

設定ファイル中、変更しなければならないのは強調してある四つの項目です。
nameは仮想OSの名称、diskはOSイメージの保存場所、vifは仮想LANインターフェース、uuidは識別IDです。

では変更するための準備を行ないます。
まず、uuidとvifのmacアドレスを生成します。

[root@sixwish xen]# vi /etc/xen/scripts/macgen.py

新規にスクリプトを作成します。

#! /usr/bin/python
# macgen.py script generates a MAC address for Xen guests
#
import random
mac = [ 0x00, 0x16, 0x3e,
random.randint(0x00, 0x7f),
random.randint(0x00, 0xff),
random.randint(0x00, 0xff) ]
print ':'.join(map(lambda x: "%02x" % x, mac))

(上記スクリプトは19.22. MAC アドレス生成の為のスクリプト作成から引用しています)

[root@sixwish xen]# python scripts/macgen.py
00:16:3e:0f:e4:1b ←(サンプル)
[root@sixwish xen]# uuidgen
157dbeaf-d4eb-468b-9bbf-a26a0f5ca63e ←(サンプル)
[root@sixwish xen]# 

新規に作成したmacgen.pyというスクリプトを使用して、ランダムなMACアドレスを生成します。
ぶつかる事は無いと思いますが、何か不具合が出た場合はこの値を再生成する事で回避できる事があります。

uuidgenは、uuidを生成しています。
これらの値を用いて、Xenの設定ファイルを変更していきます。

[root@sixwish xen]# vi lab2sixwish
*** labsixwish  YYYY-mm-dd hh:ii:ss.000000000 +0900
--- lab2sixwish YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 1,10 ****
        # Automatically generated xen config file
!       name = "labsixwish"
        memory = "256"
!       disk = [ 'tap:aio:/var/lib/xen/images/labsixwish.pvm.img,xvda,w', ]
!       vif = [ 'mac=xx:xx:xx:xx:xx:xx, bridge=xenbr0', ]

!       uuid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        bootloader="/usr/bin/pygrub"
        vcpus=1
        on_reboot   = 'restart'
--- 1,10 ----
        # Automatically generated xen config file
!       name = "lab2sixwish"
        memory = "256"
!       disk = [ 'tap:aio:/var/lib/xen/images/lab2sixwish.pvm.img,xvda,w', ]
!       vif = [ 'mac=00:16:3e:0f:e4:1b, bridge=xenbr0', ]

!       uuid = "157dbeaf-d4eb-468b-9bbf-a26a0f5ca63e"
        bootloader="/usr/bin/pygrub"
        vcpus=1
        on_reboot   = 'restart'
[root@sixwish xen]# 

複製した仮想OSの起動と設定

設定が終わったら、元の仮想OSが起動していないことを確認してから、複製した仮想OSを起動します。

[root@sixwish xen]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      510     2 r-----    136.7
[root@sixwish xen]# xm create lab2sixwish
Using config file "./lab2sixwish".
Going to boot CentOS (2.6.18-8.1.8.el5xen)
  kernel: /vmlinuz-2.6.18-8.1.8.el5xen
  initrd: /initrd-2.6.18-8.1.8.el5xen.img
Started domain lab2sixwish
[root@sixwish xen]# 

しばらくしてから、起動したかを確認する。

[root@sixwish xen]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      510     2 r-----    139.0
lab2sixwish                                1      255     1 -b----     17.0
[root@sixwish xen]# 

そうしたら、[lab2sixwish]のコンソールに移ります。

[root@sixwish xen]# xm console lab2sixwish
Linux version 2.6.18-8.1.8.el5xen (mockbuild@builder4.centos.org) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Tue Jul 10 08:51:27 EDT 2007
BIOS-provided physical RAM map:
 Xen: 0000000000000000 - 0000000010800000 (usable)
0MB HIGHMEM available.
264MB LOWMEM available.
NX (Execute Disable) protection: active

(中略)


CentOS release 5 (Final)
Kernel 2.6.18-8.1.8.el5xen on an i686

labsixwish login: root

Password:
Last login: Tue Aug 28 16:04:42 from 172.16.2.70
[root@labsixwish ~]#

そうしたら、ホスト名、IPアドレスを変更します。
詳しい説明抜きで書くので、わからないところは調べて下さい。

まずは、基本となるhostsファイルの変更

[root@labsixwish ~]# vi /etc/hosts
*** /etc/hosts.`date -I`  YYYY-mm-dd hh:ii:ss.000000000 +0900
--- /etc/hosts YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 1,4 ****
        # Do not remove the following line, or various programs
        # that require network functionality will fail.
!       127.0.0.1               labsixwish localhost.localdomain localhost
        ::1             localhost6.localdomain6 localhost6
--- 1,4 ----
        # Do not remove the following line, or various programs
        # that require network functionality will fail.
!       127.0.0.1               lab2sixwish localhost.localdomain localhost
        ::1             localhost6.localdomain6 localhost6
[root@labsixwish ~]# 

意外とも思える場所にもhostnameが書いてあるので、そこも修正。

[root@labsixwish ~]# vi /etc/sysconfig/network
*** /etc/sysconfig/network.`date -I`  YYYY-mm-dd hh:ii:ss.000000000 +0900
--- /etc/sysconfig/network YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 1,3 ****
        NETWORKING_IPV6=yes
!       HOSTNAME=labsixwish
        GATEWAY=172.16.0.1
--- 1,3 ----
        NETWORKING_IPV6=yes
!       HOSTNAME=lab2sixwish
        GATEWAY=172.16.0.1
[root@labsixwish ~]# 

続いてIPアドレスの変更

[root@labsixwish ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
*** /etc/sysconfig/network-scripts/ifcfg-eth0.`date -I`  YYYY-mm-dd hh:ii:ss.000000000 +0900
--- /etc/sysconfig/network-scripts/ifcfg-eth0 YYYY-mm-dd hh:ii:ss.000000000 +0900
***************
*** 2,8 ****
        DEVICE=eth0
        BROADCAST=172.16.15.255
!       HWADDR=xx:xx:xx:xx:xx:xx
!       IPADDR=172.16.2.72
        IPV6ADDR=
        IPV6PREFIX=
        NETMASK=255.255.240.0
--- 2,8 ----
        DEVICE=eth0
        BROADCAST=172.16.15.255
!       HWADDR=00:16:3e:0f:e4:1b
!       IPADDR=172.16.2.73
        IPV6ADDR=
        IPV6PREFIX=
        NETMASK=255.255.240.0
[root@labsixwish ~]# 

設定できたら、ログアウトしてdomain-0のコンソールに復帰します。

[root@labsixwish ~]# logout

CentOS release 5 (Final)
Kernel 2.6.18-8.1.8.el5xen on an i686

labsixwish login: (Ctrl + ])[root@sixwish xen]#

復帰したら、仮想OSを再起動して、SSHで接続できるかを試みます。

[root@sixwish xen]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      510     2 r-----    139.0
lab2sixwish                                1      255     1 -b----     17.0
[root@sixwish xen]# xm reboot lab2sixwish
[root@sixwish xen]#

しばらくしたら、SSHで接続を試みます。

[root@sixwish xen]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      510     2 r-----    139.0
lab2sixwish                                2      255     1 -b----     17.0
[root@sixwish xen]# ssh 172.16.2.73
The authenticity of host '172.16.2.73 (172.16.2.73)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.2.73' (RSA) to the list of known hosts.
root@172.16.2.73's password:
Last login: Thu Nov  1 16:18:40 2007
[root@lab2sixwish ~]#

アクセスできれば完了。
自動起動の設定は、複製元のと同じなのでその手順を参考の事。

参考サイト

Red Hat Documetation 仮想化ガイド
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/ja-JP/Virtualization/index.html