Can't boot UEFI VM after migration: "error: can't find command `linux16`"
Hi I am trying to solve this above issue. The problem happens when we convert RHEL 7.9 VMware VM using virt-v2v to KVM (not limited to RHEL 7.9). These are the steps 1. Create a RHEL7.9 VM in vmware 2. Boot the VM in VMware, and change the /etc/fstab to have /dev/sda* instead of FS partition UUID where initramfs and vmlinuz are to be found. 3. Power down the VM 4. Use virt-v2v to convert the VM - successfully done 5. If we try to boot the converted VM, the error messages show up error: can't find command linux16 error: can't find command initrd16 While debugging the problem - I localized the source which in my understanding could be problematic In File virt-v2v/convert/convert_linux.ml Line Number ~1265 if String.starts_with "/files/etc/crypttab" path && String.starts_with "/dev/sd" value then ( try let uuid = g#vfs_uuid value in "UUID=" ^ uuid with ex -> warning (f_"failed to translate encrypted device name %s to a UUID \ in /etc/crypttab. This may prevent the guest from booting \ after conversion. You may have to manually change the file and \ reconvert. The original error was: %s") value (Printexc.to_string ex); adjusted_dev ) else adjusted_dev This is from function remap_block_devices, while it checks for /etc/crypttab and device file, and determines the UUID of the device file, it does not seem to consider /etc/fstab entries for similar exercise. This seems to be related to the problem at hand. Wanted to know if my thinking is on the right line. Appreciate any inputs
On Fri, May 15, 2026 at 09:24:25AM -0000, sparimi--- via Libguestfs wrote:
Hi
I am trying to solve this above issue. The problem happens when we convert RHEL 7.9 VMware VM using virt-v2v to KVM (not limited to RHEL 7.9). These are the steps
1. Create a RHEL7.9 VM in vmware
Is this using UEFI or BIOS?
2. Boot the VM in VMware, and change the /etc/fstab to have /dev/sda* instead of FS partition UUID where initramfs and vmlinuz are to be found.
I think an example could be worth a 1000 words here. What does the /etc/fstab file look like before & after this change? Are you adding new entries or changing existing ones?
3. Power down the VM 4. Use virt-v2v to convert the VM - successfully done 5. If we try to boot the converted VM, the error messages show up error: can't find command linux16 error: can't find command initrd16
While debugging the problem - I localized the source which in my understanding could be problematic
In File virt-v2v/convert/convert_linux.ml
Line Number ~1265 if String.starts_with "/files/etc/crypttab" path && String.starts_with "/dev/sd" value then ( try let uuid = g#vfs_uuid value in "UUID=" ^ uuid with ex -> warning (f_"failed to translate encrypted device name %s to a UUID \ in /etc/crypttab. This may prevent the guest from booting \ after conversion. You may have to manually change the file and \ reconvert. The original error was: %s") value (Printexc.to_string ex); adjusted_dev ) else adjusted_dev
This is from function remap_block_devices, while it checks for /etc/crypttab and device file, and determines the UUID of the device file, it does not seem to consider /etc/fstab entries for similar exercise. This seems to be related to the problem at hand.
We definitely do check /etc/fstab for device names and replace (eg.) /dev/sda with /dev/vda, but we don't replace filesystem device names with UUID=<uuid>s at the moment. This is a wishlist item. Whether it'll fix the current bug, I don't know. It's not clear to me why grub would care about the contents of /etc/fstab, but then grub is a big mystery for everyone! Did you try modifying virt-v2v? What was the result? Posting the full virt-v2v conversion log is usually helpful too. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html
On Fri, May 15, 2026 at 3:36 PM Richard W.M. Jones <rjones@redhat.com> wrote:
On Fri, May 15, 2026 at 09:24:25AM -0000, sparimi--- via Libguestfs wrote:
Hi
I am trying to solve this above issue. The problem happens when we convert RHEL 7.9 VMware VM using virt-v2v to KVM (not limited to RHEL 7.9). These are the steps
1. Create a RHEL7.9 VM in vmware
Is this using UEFI or BIOS?
VM is using UEFI
2. Boot the VM in VMware, and change the /etc/fstab to have /dev/sda* instead of FS partition UUID where initramfs and vmlinuz are to be found.
I think an example could be worth a 1000 words here. What does the /etc/fstab file look like before & after this change? Are you adding new entries or changing existing ones?
For sake of clarity - cut-paste of only relevant entries of /etc/fstab - original and modified 1. Original: UUID=2d175056-c536-4e26-a795-f1654c61d007 /boot xfs defaults 0 0 UUID=73ED-A308 /boot/efi vfat umask=0077,shortname=winnt 0 0 2. Modified /dev/sda2 /boot xfs defaults 0 0 /dev/sda1 /boot/efi vfat umask=0077,shortname=winnt 0 0 We need to run grub2-mkconfig after the modification
3. Power down the VM 4. Use virt-v2v to convert the VM - successfully done 5. If we try to boot the converted VM, the error messages show up error: can't find command linux16 error: can't find command initrd16
While debugging the problem - I localized the source which in my understanding could be problematic
In File virt-v2v/convert/convert_linux.ml
Line Number ~1265 if String.starts_with "/files/etc/crypttab" path &&
String.starts_with "/dev/sd" value then (
try
let uuid = g#vfs_uuid value in
"UUID=" ^ uuid
with ex ->
warning (f_"failed to translate encrypted device name %s to a
UUID \
in /etc/crypttab. This may prevent the guest from
booting \
after conversion. You may have to manually change the
file and \
reconvert. The original error was: %s")
value (Printexc.to_string ex);
adjusted_dev
) else
adjusted_dev
This is from function remap_block_devices, while it checks for /etc/crypttab and device file, and determines the UUID of the device file, it does not seem to consider /etc/fstab entries for similar exercise. This seems to be related to the problem at hand.
We definitely do check /etc/fstab for device names and replace (eg.) /dev/sda with /dev/vda, but we don't replace filesystem device names with UUID=<uuid>s at the moment. This is a wishlist item. Whether it'll fix the current bug, I don't know.
It's not clear to me why grub would care about the contents of /etc/fstab, but then grub is a big mystery for everyone!
I did one experiment (me too unaware of details) to understand the issue - put back the UUIDs instead of /dev/sda* and the problem disappears.
Did you try modifying virt-v2v? What was the result?
I will do this to handle /etc/fstab too
Posting the full virt-v2v conversion log is usually helpful too.
Sure - instrumenting the code to get more logs and I will post it
Rich.
-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html
participants (3)
-
Richard W.M. Jones -
sparimi@redhat.com -
Srihari Parimi