xend
路径错误:(libvirt)
src\xen\xend_internal.c
static int
xenDaemonAttachDeviceFlags(virDomainPtr domain, const char *xml,
unsigned int flags)
{
case VIR_DOMAIN_DEVICE_DISK:
/* modify by w00171884 2011.08.06
* reason:add disk path checking
*/
disk = dev->data.disk;
if (access(disk->src, F_OK) != 0)
{
virXendError(VIR_ERR_INVALID_ARG,
_("%s is not exist"), disk->src);
ret = -1;
goto cleanup;
}
格式错误:(libvirt)
#0 virXMLParseHelper (domcode=20, filename=0x0,
xmlStr=0x7ffff403fe20 " <dis type='file' device='disk'>\n <driver name='file'/>\n <source file='/home
/sdb/wyf/disk1G'/>\n <target dev='xvdb' bus='xen'/>\n </disk>\n\n\n",
url=0x7ffff795740c "(device_definition)", ctxt=0x7ffff403fa28) at util/xml.c:827
#1 0x00007ffff7838e7a in virDomainDeviceDefParse (caps=0x675810, def=0x678c90,
xmlStr=0x7ffff403fe20 " <dis type='file' device='disk'>\n <driver name='file'/>\n <source file='/home
/sdb/wyf/disk1G'/>\n <target dev='xvdb' bus='xen'/>\n </disk>\n\n\n", flags=2) at conf/domain_conf.c:6749
#2 0x00007ffff791b4b5 in xenDaemonAttachDeviceFlags (domain=0x6761b0,
xml=0x7ffff403fe20 " <dis type='file' device='disk'>\n <driver name='file'/>\n <source file='/home/sd
xmlDocPtr
virXMLParseHelper(int domcode,
const char *filename,
const char *xmlStr,
const char *url,
xmlXPathContextPtr *ctxt)
{
if (filename) {
xml = xmlCtxtReadFile(pctxt, filename, NULL,
XML_PARSE_NOENT | XML_PARSE_NONET |
XML_PARSE_NOWARNING);
} else {
xml = xmlCtxtReadDoc(pctxt, BAD_CAST xmlStr, url, NULL,
XML_PARSE_NOENT | XML_PARSE_NONET |
XML_PARSE_NOWARNING);
}
if (!xml)
goto error;
xmlCtxtReadDoc配置文件解析函数,查出格式错误。
同名设备错误:(xend)
/usr/lib64/python2.6/site-packages/xen/xend/Args.py(166)__call__()
-> return self.call_with_form_args(self.fn, fargs, xargs=xargs)
/usr/lib64/python2.6/site-packages/xen/xend/Args.py(138)call_with_form_args()
-> return fn(*params, **keys)
/usr/lib64/python2.6/site-packages/xen/xend/XendDomainInfo.py(1175)device_create()
-> dev_uuid = self.info.device_add(dev_type, cfg_sxp = dev_config)
/usr/lib64/python2.6/site-packages/xen/xend/XendConfig.py(1673)device_add()
-> ret_uuid = self.device_duplicate_check(dev_type, dev_info, target, config)
> /usr/lib64/python2.6/site-packages/xen/xend/XendConfig.py(1486)device_duplicate_check()
-> raise XendConfigError('The device "%s" is already defined' %
device_create –> device_add -> device_duplicate_check
merge_sxp = sxp.from_string("('vbd' ('uname' ''))")
else:
merge_sxp = config
dev_uuid = sxp.child_value(o_dev_info, 'uuid')
if dev_uuid != None and \
self.device_update(dev_uuid, cfg_sxp = merge_sxp):
return dev_uuid
raise XendConfigError('The device "%s" is already defined' %
blkdev_name)
xenlight
路径错误:(xenlight)
#0 libxlDomainAttachDeviceFlags (dom=0x7eece0,
xml=0x7eedc0 " <disk type='block' device='disk'>\n <driver name='phy'/>\n <source dev='/dev/mappe/wyf
-8'/>\n <target dev='xvdb' bus='xen'/>\n </disk>\n\n\n", flags=1) at libxl/libxl_driver.c:3787
#1 0x00000000004dc2af in libxlDomainAttachDevice (dom=0x7eece0,
xml=0x7eedc0 " <disk type='block' device='disk'>\n <driver name='phy'/>\n <source dev='/dev/mappe/wyf
-8'/>\n <target dev='xvdb' bus='xen'/>\n </disk>\n\n\n") at libxl/libxl_driver.c:3794
#2 0x00007f81cb667a4f in virDomainAttachDevice (domain=0x7eece0,
xml=0x7eedc0 " <disk type='block' device='disk'>\n <driver name='phy'/>\n <source dev='/dev/mappe/wyf
-8'/>\n <target dev='xvdb' bus='xen'/>\n </disk>\n\n\n") at libvirt.c:9978
#3 0x0000000000448977 in remoteDispatchDomainAttachDevice (server=0x7b7710, client=0x7f81bc000c60,
msg=0x7f81bc0673f0, rerr=0x7f81c5d9aba0, args=0x7eed20) at remote_dispatch.h:320
#4 0x0000000000448a64 in remoteDispatchDomainAttachDeviceHelper (server=0x7b7710, client=0x7f81bc000c60,
msg=0x7f81bc0673f0, rerr=0x7f81c5d9aba0, args=0x7eed20, ret=0x7eec50) at remote_dispatch.h:298
#5 0x00007f81cb6ca61a in virNetServerProgramDispatchCall (prog=0x7c27a0, server=0x7b7710, client=0x7f81bc000c60,
msg=0x7f81bc0673f0) at rpc/virnetserverprogram.c:416
#6 0x00007f81cb6caa50 in virNetServerProgramDispatch (prog=0x7c27a0, server=0x7b7710, client=0x7f81bc000c60,
msg=0x7f81bc0673f0) at rpc/virnetserverprogram.c:289
->libxlDomainModifyDeviceFlags
libxlDomainModifyDeviceFlags -> libxlDomainAttachDeviceLive -> libxlDomainAttachDeviceDiskLive -> libxl_device_disk_add -> validate_virtual_disk
static int validate_virtual_disk(libxl_ctx *ctx, char *file_name,
libxl_device_disk *disk)
{
struct stat stat_buf;
char *delimiter;
if (disk->format == DISK_FORMAT_EMPTY)
return 0;
if (disk->format == DISK_FORMAT_RAW) {
delimiter = strchr(file_name, ':');
if (delimiter) {
if (!strncmp(file_name, "vhd:", sizeof("vhd:")-1)) {
disk->format = DISK_FORMAT_VHD;
file_name = ++delimiter;
}
}
}
if ( stat(file_name, &stat_buf) != 0 ) {
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "failed to stat %s", file_name);
return ERROR_INVAL;
}
格式错误:(libvirt)
同xend
同名设备错误:(libvirt)
#0 libxlDomainAttachDeviceDiskLive (priv=0x7fb4f0, vm=0x7fb2f0, dev=0x780110) at libxl/libxl_driver.c:3417
#1 0x00000000004d77d8 in libxlDomainAttachDeviceLive (priv=0x7fb4f0, vm=0x7fb2f0, dev=0x780110)
at libxl/libxl_driver.c:3483
#2 0x00000000004dc022 in libxlDomainModifyDeviceFlags (dom=0x7f69b0,
xml=0x7f6a90 " <disk type='block' device='disk'>\n <driver name='phy'/>\n <source dev='/dev/mapper/wy
f-8'/>\n <target dev='xvda' bus='xen'/>\n </disk>\n\n\n", flags=1, action=0) at libxl/libxl_driver.c:3746
#3 0x00000000004dc268 in libxlDomainAttachDeviceFlags (dom=0x7f69b0,
xml=0x7f6a90 " <disk type='block' device='disk'>\n <driver name='phy'/>\n <source dev='/dev/mapper/wy
f-8'/>\n <target dev='xvda' bus='xen'/>\n </disk>\n\n\n", flags=1) at libxl/libxl_driver.c:3788
static int
libxlDomainAttachDeviceDiskLive(libxlDomainObjPrivatePtr priv,
virDomainObjPtr vm, virDomainDeviceDefPtr dev)
{
virDomainDiskDefPtr l_disk = dev->data.disk;
libxl_device_disk x_disk;
int ret = -1;
switch (l_disk->device) {
case VIR_DOMAIN_DISK_DEVICE_CDROM:
ret = libxlDomainChangeEjectableMedia(priv, vm, l_disk);
break;
case VIR_DOMAIN_DISK_DEVICE_DISK:
if (l_disk->bus == VIR_DOMAIN_DISK_BUS_XEN) {
if (virDomainDiskIndexByName(vm->def, l_disk->dst, true) >= 0) {
libxlError(VIR_ERR_OPERATION_FAILED,
_("target %s already exists"), l_disk->dst);
goto cleanup;
}
xvd格式不对
static int
libxlDomainAttachDeviceDiskLive(libxlDomainObjPrivatePtr priv,
virDomainObjPtr vm, virDomainDeviceDefPtr dev)
{
switch (l_disk->device) {
case VIR_DOMAIN_DISK_DEVICE_DISK:
if (l_disk->bus == VIR_DOMAIN_DISK_BUS_XEN) {
if (virDomainDiskIndexByName(vm->def, l_disk->dst, true) >= 0) {
libxlError(VIR_ERR_OPERATION_FAILED,
_("target %s already exists"), l_disk->dst);
goto cleanup;
}
//TO DO
libxlDomainModifyDeviceFlags
virDomainDeviceDefParse
if (xmlStrEqual(node->name, BAD_CAST "disk")) {
dev->type = VIR_DOMAIN_DEVICE_DISK;
if (!(dev->data.disk = virDomainDiskDefParseXML(caps, node, ctxt,
NULL, &def->seclabel, flags)))
goto error;
virDomainDiskDefParseXML
static virDomainDiskDefPtr
virDomainDiskDefParseXML(virCapsPtr caps,
{
if ((def->device == VIR_DOMAIN_DISK_DEVICE_DISK ||
def->device == VIR_DOMAIN_DISK_DEVICE_LUN) &&
!STRPREFIX((const char *)target, "hd") &&
!STRPREFIX((const char *)target, "sd") &&
!STRPREFIX((const char *)target, "vd") &&
!STRPREFIX((const char *)target, "xvd") &&
!STRPREFIX((const char *)target, "ubd")) {
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
_("Invalid harddisk device name: %s"), target);
goto error;
}
2013年5月23日上传