Reference: bnc#872789 This is an indexing problem created by virt-manager. It knows not to add two IDE disks of the same name (eg, 'hda' twice) or two Xen disks of the same name (eg, 'xvda' twice) but with the different bus types (ide vs xen) it added xvda with hda. These disks were then passed to qemu where it error'ed out with the disks having the same index (in this case both are 0). Index: virt-manager-4.1.0/virtinst/devices/disk.py =================================================================== --- virt-manager-4.1.0.orig/virtinst/devices/disk.py +++ virt-manager-4.1.0/virtinst/devices/disk.py @@ -903,6 +903,17 @@ class DeviceDisk(Device): :returns: generated target """ prefix, maxnode = self.get_target_prefix() + postfix_targets = [] + if self.conn.is_xen(): + prefixes = [ "hd", "xvd", "vd", "sd", "fd" ] + for x in skip_targets: + if x is None: + continue + for p in prefixes: + found = x.split(p,1) + if found and len(found) == 2: + postfix_targets.append(found[1]) + break skip_targets = [t for t in skip_targets if t and t.startswith(prefix)] skip_targets.sort() @@ -910,11 +921,18 @@ class DeviceDisk(Device): first_found = None for i in range(maxnode): - gen_t = prefix + self.num_to_target(i + 1) + postfix = self.num_to_target(i + 1) + gen_t = prefix + postfix + if self.conn.is_xen() and postfix in postfix_targets: + if gen_t in skip_targets: + skip_targets.remove(gen_t) + continue if gen_t in skip_targets: skip_targets.remove(gen_t) continue if not skip_targets: + if first_found: + return first_found return gen_t elif not first_found: first_found = gen_t