Converting a VMware vCenter Linux virtual machine to KVM

Updated -

The virt-v2v tool converts virtual machines from foreign hypervisors, including their disk images and metadata, for use with Red Hat Enterprise Linux KVM, Red Hat Enterprise Virtualization, and Red Hat Enterprise Linux OpenStack Platform.
This article provides instructions for converting a Linux virtual machine from a VMware vCenter hypervisor to run on Red Hat Enterprise Linux 7 KVM and Red Hat Enterprise Linux 8 KVM.

For an overview of the virt-v2v tool, supported conversions, and links to other types of virtual machine conversions, see Converting Virtual Machines from Other Hypervisors to KVM with virt-v2v in RHEL 7 and RHEL 8.

Prerequisites

Resource requirements

To convert a guest virtual machine with virt-v2v, your system must have at minimum:

  • Network bandwidth: minimum 1Gbps
  • Disk space: sufficient space to store the guest as a file, plus 1 GB
  • Sufficient free space in the guest filesystem according to the following table:
File system Minimum free space
Root file system 20 MB
/boot 50 MB
Every other mountable file system 10 MB

Preparation

virt-v2v must be run on a Red Hat Enterprise Linux 64-bit host system. To set up virt-v2v on a Red Hat Enterprise Linux 7 or Red Hat Enterprise Linux 8 host system, install the virt-v2v package and its dependencies:

# yum install virt-v2v

Important

Ensure that the virtual machine is stopped prior to running the conversion process.

Conversion

To convert a VMware Linux virtual machine:

# virt-v2v -ic vpx://vcenter.example.com/Datacenter/esxi guestvm1

where vcenter.example.com/Datacenter/esxi is the path to the VMWare vCenter and guestvm1 is the name of the guest virtual machine to convert.

Note: If the vpx username contains a backslash character (such as DOMAIN\USER), it is necessary to enter a URI escape for the character: DOMAIN%5cUSER. Similarly, spaces in the Datacenter name must be entered using the %20 code.

For a full list of virt-v2v parameters, see the virt-v2v man page.

A successful conversion output looks similar to the following:

# virt-v2v -ic vpx://username@esx.example.com/Datacenter/esxi "guestvm1"
[   0.0] Opening the source -ic vpx://username@esx.example.com/Datacenter/esxi
[   1.1] Creating an overlay to protect the source from being modified
[   1.7] Initializing the target
[   1.7] Opening the overlay
[  25.8] Inspecting the overlay
[  30.9] Checking for sufficient free disk space in the guest
[  30.9] Estimating space required on target for each disk
[  30.9] Converting Red Hat Enterprise Linux Server release 5.11 (Tikanga) to run on KVM
virt-v2v: This guest has virtio drivers installed.
[  45.4] Mapping filesystem data to avoid copying unused and blank areas
[  45.5] Closing the overlay
[  45.7] Checking if the guest needs BIOS or UEFI to boot
[  45.7] Assigning disks to buses
[  45.7] Copying disk 1/1 to /var/tmp/RHEL 5.11 Server-sda (qcow2)
[  93.0] Creating output metadata
[  93.0] Finished off

Authenticating to the VMware vCenter server

Connecting to the VMware vCenter server requires authentication. virt-v2v supports password authentication when connecting to VMware vCenter. The password can be entered during conversion, or by using the --password-file option.

Connecting to a VMware vCenter server without a vCenter CA certificate

When the VMware vCenter server is not configured with a valid vCenter CA certificate, for example if it uses a self-signed certificate, connecting to the server will fail. In this case, certificate checking can be explicitly disabled by adding ?no_verify=1 to the connection URI as shown below:

... -ic esx://esx.example.com?no_verify=1 ...

⁠Completion

On successful completion, virt-v2v creates a new libvirt domain XML file for the converted virtual machine with the same name as the original virtual machine. The virtual machine can be started using libvirt tools, such as virt-manager or virsh.

Note: virt-v2v saves converted virtual machines to the current user's namespace. However, libvirt maintains separate namespaces for the virtual machines for each user. As a result, if virt-v2v is run as a non-root user, virt-manager will not see the converted virtual machine.

Confirm that the guest was imported correctly with the following command:

# virsh list --all

If this command lists the new Linux virtual machine, you have successfully converted and imported the guest. Boot the guest and confirm its full functionality before deleting the original guest or migrating active services.

Note: The virt-v2v tool cannot currently reconfigure a guest's network configuration. If the converted guest is not connected to the same subnet as the source, its network configuration may have to be updated. See also the virt-customize(1) man page.

Further resources

For more information on managing virtual machines with libvirt in RHEL 7, see the Red Hat Enterprise Linux 7 Virtualization Deployment and Administration Guide.

For more information on managing virtual machines with libvirt in RHEL 8, see Configuring and Managing Virtualization.

For more information on using virt-v2v to convert virtual machines, see the virt-v2v man page and http://libguestfs.org/virt-v2v.1.html.

3 Comments

Hi,

The "virt-v2v" package seems to be missing from 7.1 repositories - see:

# yum repolist
Loaded plugins: package_upload, product-id, subscription-manager
repo id                                                repo name                                                                   status
rhel-7-server-extras-rpms/x86_64                       Red Hat Enterprise Linux 7 Server - Extras (RPMs)                              44
rhel-7-server-optional-rpms/7Server/x86_64             Red Hat Enterprise Linux 7 Server - Optional (RPMs)                         5,756
rhel-7-server-rhev-mgmt-agent-rpms/7Server/x86_64      Red Hat Enterprise Virtualization Management Agents for RHEL 7 (RPMs)         229
rhel-7-server-rpms/7Server/x86_64                      Red Hat Enterprise Linux 7 Server (RPMs)                                    6,855
rhel-7-server-supplementary-rpms/7Server/x86_64        Red Hat Enterprise Linux 7 Server - Supplementary (RPMs)                       54
rhel-7-server-v2vwin-1-rpms/7Server/x86_64             Red Hat Virt V2V Tool for RHEL 7 (RPMs)                                         1
repolist: 12,939

This system has both RHEL and RHEV subs, so the supplementary repo and a bunch of relevant ones are enabled, but all we have is libguestfs:

 # yum search v2v
Loaded plugins: package_upload, product-id, subscription-manager
=========== Matched: v2v =====================
libguestfs.x86_64 : Access and modify virtual machine disk images
libguestfs-winsupport.x86_64 : Add support for Windows guests to libguestfs

# yum whatprovides */virt-v2v
Loaded plugins: package_upload, product-id, subscription-manager
No matches found

# yum install virt-v2v
Loaded plugins: package_upload, product-id, subscription-manager
No package virt-v2v available.
Error: Nothing to do

A relevant BZ entry on the subject - Comment 10 is hidden (?), so we don't know the chosen solution:
https://bugzilla.redhat.com/show_bug.cgi?id=1184893

This and similar articles all suggest adding Supplementary repo to install virt-v2v, but this is clearly wrong. Can you please provide the needed subscription and repo information for v2v functionality?

Regards,

Hi Ekin,
Thank you for getting in touch, and for catching this error. I am looking into this with our product manager and will let you know what I find out.
Cheers,
Dayle

Hi Ekin,

I've had a look into this, and for the moment, the virt-v2v package is not available in Red Hat Enterprise 7.1 or Red Hat Enterprise Virtualization 3.5 -- only in the Red Hat Enterprise Linux OpenStack Platform channels. However, Red Hat will soon release an appliance that will be available to customers with RHEL/RHEV subscriptions to use virt-v2v. Apologies for the trouble; we hope to have the solution ready soon.

Cheers,
Dayle