This document covers common failure scenarios in VM migration and how hyper2kvm addresses them.
Symptoms:
Root Cause:
/etc/fstab uses /dev/sd* or /dev/disk/by-path/Solution:
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--fix-fstab \
--use-uuid
Manual Fix:
# Mount the disk
sudo guestfish -a vm.qcow2 -i
# Check fstab
cat /etc/fstab
# Convert to UUID
blkid
# Edit fstab to use UUID=xxx instead of /dev/sdX
Symptoms:
Root Cause:
Solution:
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--regen-initramfs \
--add-virtio-modules
Manual Fix (Fedora/RHEL):
sudo guestfish -a vm.qcow2 -i
dracut --force --add-drivers "virtio_blk virtio_net virtio_pci" /boot/initramfs-$(uname -r).img $(uname -r)
Symptoms:
root= points to wrong deviceRoot Cause:
Solution:
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--fix-bootloader \
--regenerate-grub
Symptoms:
qemu-img check reports errorsRoot Cause:
Solution:
# Always flatten snapshots
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--flatten \
--to-output vm.qcow2 \
--verify
Prevention:
# Check source VMDK integrity first
qemu-img check vm.vmdk
qemu-img info vm.vmdk
# Validate after conversion
qemu-img check vm.qcow2
Symptoms:
Root Cause:
Solution:
# Check space before conversion
df -h /output/directory
# Use compression to save space
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--compress \
--temp-dir /large/partition
Symptoms:
Root Cause:
Solution:
# Fetch all related files
sudo python -m hyper2kvm fetch-and-fix \
--host esxi.example.com \
--remote /vmfs/volumes/ds1/vm/vm.vmdk \
--fetch-all \
--flatten
Symptoms:
Root Cause:
Solution:
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--fix-network \
--regenerate-network-config
Manual Fix:
# Check interface names
ip link show
# Regenerate network config
sudo nmcli connection show
sudo nmcli connection delete old-connection
sudo nmcli connection add type ethernet ifname ens3
Symptoms:
Root Cause:
Solution:
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--clean-udev-rules \
--fix-network
Symptoms:
Root Cause:
Solution:
# Download VirtIO drivers first
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso
# Inject drivers offline
sudo python -m hyper2kvm local \
--vmdk windows.vmdk \
--to-output windows.qcow2 \
--windows \
--inject-virtio \
--virtio-win-iso ./virtio-win.iso
See also: Windows Migration Guide
Symptoms:
Root Cause:
Solution:
# Use two-phase Windows boot
sudo python -m hyper2kvm local \
--vmdk windows.vmdk \
--to-output windows.qcow2 \
--windows \
--inject-virtio \
--virtio-win-iso ./virtio-win.iso \
--two-phase-boot
Symptoms:
Root Cause:
Solution:
Not a hyper2kvm issue - this is expected Windows behavior.
Symptoms:
Root Cause:
Solution:
# Try alternative converter
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--use-export
# Or increase resources
ulimit -v unlimited
sudo python -m hyper2kvm local --vmdk vm.vmdk --to-output vm.qcow2
Symptoms:
Root Cause:
Solution:
# Install filesystem support
sudo dnf install libguestfs-xfs libguestfs-ext2
# Test libguestfs
sudo libguestfs-test-tool
# Skip inspection if needed
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--no-guest-inspection
Symptoms:
Root Cause:
Solution:
# Use fast mode
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--no-compress \
--fast
# Or use multiple threads
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--threads 4
Symptoms:
Root Cause:
Solution:
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--qemu-test \
--headless
Symptoms:
Root Cause:
Solution:
# Increase timeout
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--qemu-test \
--boot-timeout 600
# Or disable boot test
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--no-test
sudo python -m hyper2kvm --log-level DEBUG local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--log-file debug.log
# Preview what will happen
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--dry-run
sudo python -m hyper2kvm local \
--vmdk vm.vmdk \
--to-output vm.qcow2 \
--report migration-report.md
# Inspect source VMDK
qemu-img info vm.vmdk
qemu-img check vm.vmdk
# Inspect output
qemu-img info vm.qcow2
qemu-img check vm.qcow2
# Mount and explore
sudo guestfish -a vm.qcow2 -i
><fs> ls /
><fs> cat /etc/fstab
><fs> cat /boot/grub2/grub.cfg
# Boot with serial console
qemu-system-x86_64 \
-m 2048 \
-smp 2 \
-drive file=vm.qcow2,if=virtio \
-enable-kvm \
-nographic \
-serial mon:stdio \
-append "console=ttyS0"
/etc/fstab to use UUIDsudo libguestfs-test-toolIf you encounter issues not covered here:
--log-level DEBUG--report issue-report.mdWhen reporting issues, provide:
qemu-img info on source and destination