読者です 読者をやめる 読者になる 読者になる

harry’s memorandum

おれおれメモ

VMWare の仮想イメージ を Xen へ P2V(V2V)

特にVMware限定でありません。実機からXenへのP2Vでも同じです。
泥臭い方法でXenへ移行します。

前提

  • フルバーチャルで移行します
  • 試したのはLinuxのみです(ここではFedora8)
  • WindowsやSolarisのV2V,P2Vは未確認*1
  • VMwareのディスクタイプはIDEでインストールしています
  • ホスト名は、Domain-0側は "domain0", VMware側は "knoppix"

方法

f:id:dharry:20090122032350j:image

  • Netowokカードを認識させ通信ができるようにします。DHCPサーバを立てていない場合はStaticにIPアドレスを割り当ててください。
[Menu] -> [KNOPPIX] -> [Network/Internet] -> [ネットワークカードの設定]
  • fdiskでディスクを確認
root@knoppix: ~# sudo fdisk -l
Disk /dev/hda: 5368 GB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         25      200781   83  Linux
/dev/hda2              26        652     5036377+  8e  Linux LVM
  • ddでディスクをコピー*2
root@knoppix: ~# dd if=/dev/hda | gzip -1 -c | ssh user@domain0 "gzip -cd | dd bs=8192 of=/path/to/fedora.img"
  • ファイルイメージではなくデバイス指定でDomain-Uを起動させる場合は、デバイス先にデータをコピー
$ [root@domain0 ~] sudo dd if=/path/to/fedora.img bs=8192 of=/dev/VolGroup00/LogVol04
  • Xen Domain-0 側で Xenの定義ファイルを作成します

uuidとmacアドレスはユニークなものを。またvncdisplay番号も他のdomain-uと衝突しないものを割り当ててください。
http://d.hatena.ne.jp/dharry/20090107/1231268431

$ [root@domain0 ~] sudo cat /etc/xen/fedora8
name = "fedora8"
uuid = "fcf19d28-add6-cc58-16e0-613e5dc2aad3"
maxmem = 512
memory = 512
vcpus = 1
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "c"
localtime = 0
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
device_model = "/usr/lib64/xen/bin/qemu-dm"
sdl = 0
vnc = 1
vncunused = 1
keymap = "ja"
vncdisplay = "4"
disk = [ "phy:/dev/VolGroup00/LogVol04,hda,w", ",hdc:cdrom,r" ]
vif = [ "mac=00:16:3e:7e:09:a5,bridge=xenbr0,script=vif-bridge" ]
serial = "pty"
  • Domain-Uを起動します
$ [root@domain0 ~] sudo xen create /etc/xen/fedora8
  • Virt-Managerを起動してコンソール画面でV2Vした仮想OSが起動していることを確認します。

f:id:dharry:20090122031545j:image

  • VMwareXenとではネットワークカードが違うため/etc/modprobe.confを修正します。*3

vmwareはpcnet32, xenは8139cp

[root@domain0 ~]# cat /etc/modprobe.conf
alias scsi_hostadapter BusLogic
alias scsi_hostadapter1 libata
alias scsi_hostadapter2 ata_piix
alias eth0 8139cp
  • /etc/sysconfig/network-scripts/ifcfg-eth0を修正
[root@domain0 ~]# cat  /etc/sysconfig/network-scripts/ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.1.255
#HWADDR=00:0C:29:A8:72:71
HWADDR=00:16:3E:7E:09:A5
IPADDR=192.168.1.44
IPV6INIT=yes
IPV6_AUTOCONF=yes
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
GATEWAY=192.168.1.1
TYPE=Ethernet
DNS1=192.168.1.1
  • ネットワークを再起動して通信ができること確認
[root@domain0 ~]# sudo /etc/init.d/network restart
[root@domain0 ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:16:3E:7E:09:A5
          inet addr:192.168.1.4  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::216:3eff:fe7e:9a5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:304 errors:0 dropped:0 overruns:0 frame:0
          TX packets:274 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:26516 (25.8 KiB)  TX bytes:31392 (30.6 KiB)
          Interrupt:5 Base address:0x2000
  • 念のためOSを再起動して問題なく稼動できるか確認
[root@domain0 ~]# sync;sync;sync;reboot

*1:そのうち試したい

*2:nc使う場合src: dd if=/dev/sda bs=16384 | gzip -9 | nc 192.168.1.x 9999
dst: nc -l -p 9999 | gzip -d | nc of=/dev/sda

*3:kuzduが起動してeth0.bakにリネームされeth1ができているかもしれません