virt-v2v fails when traverses each partition: inspect_sources.ml: ... and is_uefi_bootable_part part = let dev = g#part_to_dev part in parttype_is_gpt dev && is_uefi_ESP dev part in let partitions = Array.to_list (g#list_partitions ()) in let partitions = List.filter is_uefi_bootable_part partitions in log: ... libguestfs: trace: v2v: list_partitions guestfsd: main_loop: new request, len 0x28 guestfsd: main_loop: proc 8 (list_partitions) took 0.00 seconds libguestfs: trace: v2v: list_partitions = ["/dev/sda1", "/dev/sda2", "/dev/sda3", "/dev/sdb1", "/dev/sdb2", "/dev/sdb5", "/dev/sdc1", "/dev/sdc2", "/dev/sdc5", "/dev/sdd1", "/dev/sdd2", "/dev/sdd5", "/dev/sde1", "/dev/sde2", "/dev/sde5", "/dev/sdf1", "/dev/sdf2", "/dev/sdf5", "/dev/sdg1", "/dev/sdg2", "/dev/sdg5"] ... libguestfs: trace: v2v: part_get_parttype "/dev/sdb" guestfsd: main_loop: new request, len 0x34 commandrvf: stdout=y stderr=y flags=0x0 commandrvf: parted -m -s -- /dev/sdb unit b print libguestfs: trace: v2v: part_get_parttype = "msdos" libguestfs: trace: v2v: part_get_parttype "/dev/sdb" guestfsd: main_loop: proc 214 (part_get_parttype) took 0.00 seconds guestfsd: main_loop: new request, len 0x34 commandrvf: stdout=y stderr=y flags=0x0 commandrvf: parted -m -s -- /dev/sdb unit b print libguestfs: trace: v2v: part_get_parttype = "msdos" libguestfs: trace: v2v: part_to_dev "/dev/sdb5" guestfsd: main_loop: proc 214 (part_get_parttype) took 0.00 seconds [ 9.164666] sdb: sdb1 sdb2 < sdb5 > guestfsd: main_loop: new request, len 0x38 /dev/sdb5: No such file or directory call part_to_dev "/dev/sdb5" failed in is_root_device(): part_to_dev_stub() RESOLVE_DEVICE() is_root_device (): { struct stat statbuf; if (stat (device, &statbuf) == -1) { perror (device); return 0; ... let's look at the udev event log after the error: KERNEL[10.527855] change /devices/pci0000:00/0000:00:03.0/virtio1/host2/target2:0:1/2:0:1:0/block/sdb (block) UDEV [10.528693] change /devices/pci0000:00/0000:00:03.0/virtio1/host2/target2:0:0/2:0:0:0/block/sda/sda1 (block) KERNEL[10.529156] add /devices/pci0000:00/0000:00:03.0/virtio1/host2/target2:0:1/2:0:1:0/block/sdb/sdb1 (block) KERNEL[10.529618] add /devices/pci0000:00/0000:00:03.0/virtio1/host2/target2:0:1/2:0:1:0/block/sdb/sdb2 (block) KERNEL[10.530096] add /devices/pci0000:00/0000:00:03.0/virtio1/host2/target2:0:1/2:0:1:0/block/sdb/sdb5 (block) ... Apparently is_root_device("/dev/sdb5") was called before "/dev/sdb5" was added. To solve issue we need to wait adding a partition before we can access it. Another solution if we wait for adding all partitions somewhere in one place. But there is at least one drawback, not for each task need to touch the disk partitions and waiting for all partitions will slow such tasks. Pavel Butsykin (2): daemon: run 'udevadm settle' with --exit-if-exists option. daemon: add udev_settle_file to is_root_device daemon/daemon.h | 2 ++ daemon/guestfsd.c | 23 +++++++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) -- 2.11.0