我的方法是通过linux的命令把原始存储里面的VHD 复制到其他地方,然后再从其他地方把这个VHD复制进目标存储。

例如:在现在的环境里面,你可以在旧环境里面attach一个 cifs存储(本地存储也可以),把VHD 复制到这个cifs之后,在新的环境里面把这个cifs attach起来,然后在用命令把VHD复制到新环境的存储里面去。

以下为举例取出VHD到本地计算机的方式是:

1.)本地创建一个CIFS的存储  ,查询此SR的UUID 
2.)进入到CIFS的SR目录 cd /var/run/sr-mount/[sr-uuid] 
3.)通过lvscan 查询出问题的VDI是哪个VG 
inactive          '/dev/VG_XenStorage-【原始SR的uuid】/VHD-【原始vdi的uuid】' [40.00 GB] inherit
    VDI的uuid你可以通过 xe vdi-list name-label=[VDI的名字]查询
4.)更改状态为active (如果状态是active的话则不需要修改)
     lvchange -ay /dev/VG_XenStorage-【原始SR的uuid】/VHD-【原始vdi的uuid】/VHD-【原始vdi的uuid】 
5.) 复制数据到本地CIFS 
    dd if=/dev/VG_XenStorage-【原始SR的uuid】/【原始vdi的uuid】 of=[vdiname].VHD

取出VHD之后 需要通过Xencenter在目的存储里面建立一个相同于VDI一样大小的容量,我们需要把刚刚导出到本地的[vdi].VHD写到这个VDI里面

1.)在新环境里面attach 刚刚旧环境里面的CIFS存储
2.)同样进入到CIFS的SR目录 cd /var/run/sr-mount/[sr-uuid]
3.)使用命令:dd if=[vdiname].VHD of=/dev/VG_XenStorage-【目标SR的uuid】/VHD-【目标vdi的uuid】
 

注意:你需要保证目标SR的VG同样处于 active 的状态

待VHD的数据全部写进到VDI之后,需要重新创建一个VM,在这个VM的Storage里面把目标VDI attach 起来。启动VM。