Citrix提供了Xencenter这个管理工具,可以很方便的管理Xenserver
某些特殊需求下,我们需要以vhd文件格式导出Xenserver中的虚拟机,例如cloudstack中使用的模板。
很不幸的是,虽然Xencenter提供了export vm的功能,但是却经常导出失败:failed to export
例如:http://www.riverlite.co.uk/2014/01/citrix-xenserver-unable-to-export-to-ovf/
在日志文件中有提示信息:System.exception failed to export system.xml.xmlexception root element is missing
即使执行了脚本/opt/xensource/packages/files/transfer-vm/install-transfer-vm.sh 问题依旧
xencenter失败后,会想到dom0中的xe vm-export命令
只可惜这样导出的vhd文件上传到cloudstack中,是个无效的文件
饶了两个圈圈,回到原点!
出现以上问题后,是不是就不能导出vhd文件了?这当然是不可能的!
1、直接在dom0中,进入/var/run/sr-mount/[sr-id(一串随机数)]/目录
2、执行ls命令 //发现这个目录下很多vhd文件(开启了很多虚拟机的情况下),很开心有木有?其中一个vhd文件就是你要导出虚拟机!
3、这时候通过xencenter的界面或者xe vm-list找到特定虚拟机的uuid
4、然后使用xe vbd-list uuid=[id] 找到[vdi],拷贝/var/run/sr-mount/[sr-id(一串随机数)]/目录下的[vdi].vhd文件,该文件即可作为模板导入cloudstack中。
5、如果上述方法不方便定位(至少我的测试环境中有些问题,xe vbd-list uuid=[id]返回空,无法通过这种方式定位,而是直接通过文件大小判断的),可以考虑先通过xencenter将vm转换为模板,通过xencenter将模板导出xva格式,然后将xva导入到一个比较干净的xenserver,利用模板启动一个虚拟机,确定虚拟机可正常运行后,删除模板,再到/var/run/sr-mount/[sr-id(一串随机数)]/目录下拷贝.vhd文件,这时候该目录下,应该只有两个vhd文件,一个是dom0,另一个就是我们的虚拟机。
参考:
http://support.citrix.com/article/CTX132014