Converting a VMware vCenter Linux virtual machine to KVM

Updated -

The virt-v2v tool converts virtual machines (VMs), including their disk images and metadata, from foreign hypervisors for use with Red Hat Enterprise Linux with KVM managed by libvirt, Red Hat Virtualization, and Red Hat OpenStack Platform.

This article provides instructions for converting a Linux VM 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 VM conversions, see Converting Virtual Machines from Other Hypervisors to KVM with virt-v2v in RHEL 7 and RHEL 8.

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

Note: If virt-v2v is run as a non-root user, the virt-manager application will not detect the converted VM. This is because virt-v2v saves converted VMs to the current user's namespace, but libvirt maintains separate namespaces for the VMs for each user.

Prerequisites

  • virt-v2v must be run on a Red Hat Enterprise Linux 64-bit host system.

  • Ensure that the VM is stopped prior to running the conversion process.

  • The following minimum system resources must be available:

    • Minimum network speed 1Gbps
    • Disk space: sufficient space to store the VM's disk image, plus 1 GB
    • Sufficient free space in the VM file system 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

Procedure

Step 1

Install the virt-v2v package and its dependencies on the host system:

# yum install virt-v2v

Step 2

To convert the VMware Linux virtual machine, use the following command and replace vcenter.example.com/Datacenter/esxi with the path to the VMWare vCenter and guestvm1 with the name of the VM to convert:

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

Note: If the vpx user name 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.

Step 3

Authenticate 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.

Note: 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 ...

Step 4

Observe the conversion progress. 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

Step 5

Confirm that the VM has been imported correctly:

# virsh list --all

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

Step 6 [Optional]

Update the imported VM's network configuration.

The virt-v2v tool cannot currently reconfigure a VM's network configuration. If the converted VM is not connected to the same subnet as the source, its network configuration may have to be updated. For more information, see the virt-customize(1) man page.

Further resources

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

For more information on managing VMs with libvirt in RHEL 8, see Configuring and Managing Virtualization.
For more information on using virt-v2v to convert VMs, you can see the following articles:

In addition, you can refer to the virt-v2v man page and the virt-v2v upstream documentation.

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