Xen domainU の複製

Xen の domainU を複製する方法です。

既にある domainU vps1 から新たに domainU vps5 を作成します。

1. イメージファイルをコピーします。

vps1 の複製 vps5 を作成します。

vps1 を停止。

# xm shutdown vps1

イメージファイルをコピー。

# cp /var/lib/xen/images/vps1.img /var/lib/xen/images/vps5.img

2. vps5.img をマウント

2-1. イメージファイルを loop デバイスに接続します。

# losetup -a
# losetup -f
/dev/loop0
# losetup /dev/loop0 /var/lib/xen/images/vps5.img
# losetup -a
/dev/loop0: [0304]:197083 (/var/lib/xen/images/vps5.img)

2-2. パーティションを確認します。

# fdisk -l /dev/loop0
 
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
# kpartx -l /dev/loop0
     loop0p1 : 0 208782 /dev/loop0 63
     loop0p2 : 0 10265535 /dev/loop0 208845

2-3. LVM パーティションをマッピング

# kpartx -av /dev/loop0
add map loop0p1 : 0 208782 linear /dev/loop0 63
add map loop0p2 : 0 10265535 linear /dev/loop0 208845
# ls /dev/mapper/
control  loop0p1  loop0p2

2-4. 論理ヴォリューム活性化

# pvscan
  PV /dev/mapper/loop0p2   VG VolGroup00   lvm2 [4.88 GB / 0    free]
  Total: 1 [4.88 GB] / in use: 1 [4.88 GB] / in no VG: 0 [0   ]
# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "VolGroup00" using metadata type lvm2
# lvscan
  inactive          '/dev/VolGroup00/LogVol00' [4.34 GB] inherit
  inactive          '/dev/VolGroup00/LogVol01' [544.00 MB] inherit
# vgchange -a y
  2 logical volume(s) in volume group "VolGroup00" now active
# lvscan
  ACTIVE            '/dev/VolGroup00/LogVol00' [4.34 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [544.00 MB] inherit

2-5. イメージファイルの root パーティションを mount

# mount /dev/VolGroup00/LogVol00 /mnt

3. イメージファイルの設定を変更

ホスト名、IP Address、macアドレス(HWADDR)を変更します。

# vi /mnt/etc/hosts
# vi /mnt/etc/sysconfig/network
# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0

4. イメージファイルの umount

# umount /mnt
# vgchange -a n
   0 logical volume(s) in volume group "VolGroup00" now active
# lvscan
   inactive          '/dev/VolGroup00/LogVol00' [4.34 GB] inherit
   inactive          '/dev/VolGroup00/LogVol01' [544.00 MB] inherit
# kpartx -d /dev/loop0
# ls /dev/mapper/
control
# losetup -d /dev/loop0
# losetup -a
#

5. domainU vps5 設定ファイル作成

vps1 の設定ファイルをコピーして vps5 用の設定に変更します。

uuid を生成。

# uuidgen
2843d9ea-51c5-49a6-9258-fa273e682dea

vps5 を作成して、変更します。

# cp /etc/xen/vps1 /etc/xen/vps5
# vi /etc/xen/vps5
(name, uuid, disk, vif を変更)

6. vps5 起動

# xm create vps5

※vps5 を起動できるのですが、何故か vps5 の eth0 が
UP になりませんでした。
ifcfg-eth0 が ifcfg-eth0.bak にリネームされていたので、
元にもどして ifup eth0 したところ ok でした。

参考にさせていただいたサイト: http://sokohakato.wordpress.com/linux/centos/xenimgmount/

Xen ルーティングモード

Xen のルーティングモードで仮想ネットワークを構築しました。

192.168.1.111 のサーバ上に 192.168.2.0/24 の仮想ネットワークを
作成して、その仮想ネットワークに仮想サーバ vps1, vps2…を作成
しました。

イメージはこんな感じです。

Xen構成図

イロイロと試行錯誤をしたので、もう一度最初からやってみないと
どうやれば良いのか実は分かっていませんが 😎 記憶と
現状の結果を元に行った事をメモとして残します。

最初にまず、通常のブリッジモードで仮想サーバ vps1 を追加しました。
デフォルトの状態ですね。

# virt-install --name vps1 --nographics --prompt

次に仮想スイッチを作成しました。
以下のような定義ファイル yngsw1_def.xml を作成します。

<network>
  <name>yngsw1</name>
  <forward mode="route" dev="eth0" />
  <bridge name="yngsw1" />
  <ip address="192.168.2.1" netmask="255.255.255.0">
  </ip>
</network>

このファイルから仮想スイッチを作成します。

# virsh net-define yngsw1_def.xml
Network yngsw1 defined from yngsw1_def.xml

作成した yngsw1 をスタートさせます。

# virsh net-start yngsw1
Network yngsw1 started

そしてついでに、デフォルトの仮想ブリッジを削除しておきます。

# virsh net-destroy default
# rm /etc/libvirt/qemu/networks/autostart/default.xml

すると、以下のルーティングが追加されます 🙂

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 yngsw1
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
0.0.0.0         192.168.1.254     0.0.0.0         UG        0 0          0 eth0

yngsw1 を自動的にスタートするようにします。

# virsh net-autostart yngsw1
Network yngsw1 marked as autostarted

そして、デフォルトのブリッジモードではなく、ルーティングモードで
起動するように /etc/xen/xend-config.sxp を変更します。

(network-script network-bridge)
↓コメントアウト
#(network-script network-bridge)
 
(vif-script vif-bridge)
↓コメントアウト
#(vif-script vif-bridge)
 
 
#(network-script network-route)
#(vif-script     vif-route)
↓コメントを外す
(network-script network-route)
(vif-script     vif-route)

vps1 を yngsw1 に接続します。
/etc/xen/vps1 の vif の bridge を変更します。

vif = [ "mac=00:16:36:02:e0:5d,bridge=xenbr0,script=vif-bridge" ]
↓変更
vif = [ "mac=00:16:36:02:e0:5d,bridge=yngsw1,script=vif-bridge" ]

vps1 の IP Address を yngsw1 上の IP Address に変更します。

vps1# vi /etc/sysconfig/network
vps1# /etc/sysconfig/network-scripts/ifcfg-eth0

ここまでやったらサーバを再起動すれば完成です。
もっとちゃんとした手順があると思うのですが見つける事が
できませんでした。。。 :mrgreen:

※外部のサーバから yngsw1 上の vps1 と通信する為には、
外部のサーバや、ルータなどで vps1 へのルーティングを
192.168.1.111 に向けないと通信できません。

※2 台目の仮想サーバ vps2 を追加する場合、
virt-install がエラーになってしまいます。
どうやら virbr0 や xenbr0 が無いとダメみたいです。
仕方がないので /etc/xen/scripts/network-bridge を起動して
から virt-install しました。