[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Almost working iSCSI booting, need advice
Hello, I think the relevant code from XendDomainInfo.py _configureBootloader() for file: mounts looks like this: mounted = devtype == 'tap' and taptype != 'aio' and taptype != 'sync' and not os.stat(fn).st_rdev if mounted: # This is a file, not a device. pygrub can cope with a # file if it's raw, but if it's QCOW or other such formats # used through blktap, then we need to mount it first. log.info("Mounting %s on %s." % (fn, BOOTLOADER_LOOPBACK_DEVICE)) vbd = { 'mode': 'RO', 'device': BOOTLOADER_LOOPBACK_DEVICE, } from xen.xend import XendDomain dom0 = XendDomain.instance().privilegedDomain() dom0._waitForDeviceUUID(dom0.create_vbd(vbd, disk)) fn = BOOTLOADER_LOOPBACK_DEVICE This is the code that I've mimiced. Here, "BOOTLOADER_LOOPBACK_DEVICE" is always "/dev/xvdp". But, in the case of 'tap' devices, it gets destroyed later. (I don't want to destroy it later since the iSCSI mount needs to be kept around.) finally: if mounted: log.info("Unmounting %s from %s." % (fn, BOOTLOADER_LOOPBACK_DEVICE)) dom0.destroyDevice('tap', BOOTLOADER_LOOPBACK_DEVICE) My parallel code is very similar in steps to the tap code, except I need to read from xenstore after the iSCSI mount is created to find out what the real device name it was given is. (I can search by its uuid.) if (access_type == 'iscsi'): log.info("Mounting %s using %s." % (access_location, access_type)) from xen.xend import XendDomain dom0 = XendDomain.instance().privilegedDomain() # We need a bogus VBD at this point... vbd = { 'mode': 'RO', 'device': '/dev/null' } vbd_uuid = dom0.create_vbd(vbd, disk) # Now, we need to find out what the REAL device node is, to pass to the bootloader from xen.xend.XendDomain import DOM0_ID from xen.xend.xenstore.xsutil import GetDomainPath dom_path = GetDomainPath(DOM0_ID) real_device = 0 vbds = xstransact.List("%s/backend/vbd/0" % dom_path) for x in vbds: uuid = xstransact.Read("%s/backend/vbd/0/%s/uuid" % (dom_path, x)) if (uuid == vbd_uuid): found = 1 real_device = xstransact.Read("%s/backend/vbd/0/%s/node" % (dom _path, x)) # Swap out the /dev/null now xstransact.Store("%s/backend/vbd/0/%s" % (dom_path, x), ('dev', real_device)) break else: msg = "Unable to find VBD: %s" % vbd_uuid log.error(msg) raise VmError(msg) msg = "ISCSI Device Detected: %s on %s" % (disk, real_device) fn = real_device log.info(msg) This actually works very well... for one iSCSI boot, because of the dummy device problem. I may have misunderstood how file: devices work and where that is handled, so I'll dig further. (And it doesn't seem right that I'm doing this in the bootloader section, by pygrub needs it that early.) I'm worried that while this WORKS, that this isn't the right place to be triggering the device creation. Perhaps, it needs to happen before the call to _configureBootloader(), either _initDomain() or _constructDomain()... Thanks, Joe ----- Original Message ----- From: "Stefan de Konink" <skinkie@xxxxxxxxx> To: jpranevich@xxxxxxxxxxx Cc: "xen-devel" <xen-devel@xxxxxxxxxxxxxxxxxxx>, "Stephan Seitz" <s.seitz@xxxxxxxxxxxx> Sent: Friday, August 22, 2008 5:41:16 PM GMT -05:00 US/Canada Eastern Subject: Re: [Xen-devel] Almost working iSCSI booting, need advice jpranevich@xxxxxxxxxxx schreef: > My big issue involves the creation of the dummy device. It's a > chicken and egg problem with create_vbd() that I'm not sure how to > get around. (The hotplug scripts have to run to get the device, but > need the device to run the hotplug script.) I may be able to fix that > by simply writing the correct information to the xenstore in the > right places after I learn them, but I don't know what places need > updating for the different parts of Xen. (I also haven't tested this > with Xen-API or migrations, so I may discover more problems if I'm > not structuring this in the right way.) Can you show me your code of create_vbd? Because in my code I never specify any device name. And if you look at file:/// syntax, do you ever specify /dev/loop0 as filename? Stefan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |