Exportar e importar máquinas virtuales con VMWare, VirtualBox e Hyper-V

Imaginemos que somos los responsables de administrar cientos de servidores virtuales (esto es algo que hago todos los días en mi trabajo). Y cada vez que tenemos que crear un servidor virtual nuevo, tenemos que realizar una serie de tareas repetitivas:

  • Instalar el sistema operativo
  • Actualizarlo
  • Instalar software adicional
  • Configurar el sistema
    • Idioma
    • Parámetros del kernel
    • Tamaño de los filesystems
    • Crear usuarios
    • Activar servicios
    • Y un largo etcétera

Cuando hay que hacer la misma tarea una y otra vez, la solución pasa por crear una plantilla de la máquina virtual con todo lo que necesitamos ya hecho y desplegarla cada vez que hay que aprovisionar una nueva.

¿Qué es un Virtual Appliance?

Un Virtual Appliance es una imagen de una máquina virtual que ya ha sido creada por nosotros mismos, un fabricante, un proveedor de cloud, etc. y que podemos utilizar como una imagen (o plantilla) de máquina virtual. Normalmente, las maquinas virtuales creadas por los proveedores, las encontraremos publicadas en su propio «Marketplace».

Los dos formatos más utilizados son: OVF (Open Virtualization Format) y OVA (Open Virtual Appliance).

No entraremos ahora en detalles técnicos de cada uno de los formatos. Lo que nos interesa saber es que cualquier hipervisor debería poder exportar maquinas virtuales en ambos formatos, ya que son los estándares más utilizados.

Exportar una máquina virtual con Oracle VirtualBox en formato OVA

Para exportar una máquina virtual he elegido Oracle VirtualBox en lugar de VMWare por el simple hecho de que con VirtualBox (v6.1) la podemos exportar de manera gratuita y con VMWare tenemos que adquirir una versión de pago que incorpore esta opción.

Los pasos que tenemos que seguir para exportar el servidor virtual, una vez configurado, son:

  • Apagar el servidor
  • Seleccionar el servidor virtual que queremos exportar
  • Ir a la opción «Export Appliance»
Oracle Virtual Box - Exportar Virtual Appliance
  • Elegir dónde guardamos el fichero (OVA) que se va a generar
Virtual Box - Exportar Maquina VIrtual en formato OVA

Dependiendo del tamaño de la máquina virtual y del rendimiento del Host, este proceso tardará más o menos tiempo.

Cuando haya finalizado, veremos el fichero OVA generado y comprimido. La tasa de compresión es muy alta. Para hacer esta guía, la maquina virtual que he exportado ocupaba 76GB de disco pero el fichero OVA resultante tan sólo ha ocupado 5,2GB.

Virtual Appliance exportada - Fichero OVA

Este fichero OVA ya lo podemos utilizar como plantilla de máquina virtual y lo podremos importar a cualquier otro hipervisor. Si es a Hyper-V tendremos que realizar algunos pasos previos que explico más adelante.

RECOMENDACIÓN: No exportar las interfaces de red, ya que, lo habitual, es configurarlas cuando se importen en el Host destino y podrían dar algún problema de incompatibilidad.

Virtual Appliance - No exportar la configuración de red

Importar una máquina virtual en Oracle VirtualBox

Para importar una máquina virtual en VirtualBox, debemos seguir algunos pasos específicos. Antes de comenzar, nos aseguraremos de tener el archivo de la máquina virtual que deseamos importar. Este archivo suele estar en formato OVA u OVF:

  • Seleccionamos la opción de importación:
  • Vamos a la barra de menú en la parte superior de la ventana de VirtualBox.
  • Hacemos clic en «Archivo» y luego seleccionamos «Importar servicio virtualizado».
  • Seleccionamos el archivo de la máquina virtual:
  • En la ventana de importación, hacemos clic en el ícono de la carpeta para buscar el archivo OVA u OVF que deseamos importar.
  • Navegamos hasta la ubicación del archivo y los seleccionamos.
  • Configurar la importación:
  • Una vez seleccionado el archivo, VirtualBox mostrará las propiedades de la máquina virtual.
  • Aquí podemos modificar ciertos parámetros como la cantidad de memoria RAM, los núcleos de CPU asignados, etc.
  • Importar la máquina virtual:
  • Si estamos satisfechos con la configuración, hacemos clic en «Importar».
  • VirtualBox comenzará el proceso de importación, que puede tardar algunos minutos dependiendo del tamaño del archivo de la máquina virtual y la velocidad de tu computadora.
  • Iniciar la máquina virtual:
  • Después de la importación, la máquina virtual aparecerá en la lista de máquinas virtuales disponibles en VirtualBox.
  • Seleccionamos la máquina virtual y haz clic en «Iniciar» para ponerla en marcha.

Es importante recordar que al importar una máquina virtual, debemos tener suficiente espacio en disco y recursos de sistema disponibles para alojar y ejecutar el servidor de manera eficiente.

Exportar una máquina virtual con VMWare Workstation en formato OVF

El procedimiento es sencillísimo:

  • Seleccionamos el servidor que queremos exportar
  • Lo apagamos
  • Vamos al menú File –> Export to ovf
  • Elegimos la ubicación donde guardaremos el archivo
Exportar maquina virtual con VMWare

Alternativamente, podemos utilizar la herramienta OVF Tool para exportar un servidor virtual:

C:\Program Files\VMware\VMware OVF Tool>ovftool "D:\VMS\Servers\RHEL9-DXC\rhel9dxc.vmx" "D:\VMS\Exports\RHEL9-DXC\OVF\20240210\rhel9dxc.ovf"
Opening VMX source: D:\VMS\Servers\RHEL9-DXC\rhel9dxc.vmx
Opening OVF target: D:\VMS\Exports\RHEL9-DXC\OVF\20240210\rhel9dxc.ovf
Writing OVF package: D:\VMS\Exports\RHEL9-DXC\OVF\20240210\rhel9dxc.ovf
Disk progress: 11%

Importar una máquina virtual con VMWare Workstation en formato OVF

El proceso es muy parecido al explicado anteriormente con VirtualBox. Para no extenderme tanto, simplemente, abriremos el fichero OVF de la máquina virtual exportada anteriormente desde el menú open:

Importar maquina virtual en VMWare Workstation

Una vez abierto, ya aparecerá el servidor en el listado de máquina que podemos administrar.

Cómo clonar una maquina virtual Hyper-V (Exportar/Importar)

Es una práctica habitual configurar una maquina virtual en Hyper-V a modo de plantilla para luego clonarla, ya que nos ahorrará tiempo y dinero al no tener que montar un servidor nuevo completamente desde cero. En Hyper-V a este proceso se le llama exportar e importar un servidor virtual y es muy sencillo.

También podemos utilizar la exportación e importación a modo de copia de seguridad.

El tiempo de exportación va a depender del tamaño de la maquina virtual.

Exportar la maquina virtual con Hyper V

Lo primero de todo es apagar el servidor. Seguidamente, hacemos click en el menú «Export» para exportar todos los archivos de la maquina virtual a un directorio local de nuestro PC.

Hyper V Export virtual machine

Importar una maquina virtual desde Hyper V

Una vez finalizado el proceso de exportación, creamos una maquina virtual nueva pero marcando la opción de importación de una maquina virtual.

Hyper V Import virtual machine

Elegimos la ubicación donde se encuentran los archivos exportados anteriormente.

Hyper V Import virtual machine Select Folder

Seleccionamos el servidor virtual que queremos importar.

Hyper V Import virtual machine Select virtual machine

Como queremos crear una maquina virtual nueva totalmente independiente, elegimos la opción de copia de un nuevo servidor virtual.

Hyper V Import virtual machine Register new virtual machine

Esperamos unos minutos y ya tendremos creado nuestro servidor virtual nuevo completamente clonado.

Migrar una máquina virtual de VMWare a Hyper-V

Hasta ahora, todos los ejemplos de exportación e importación de máquinas virtuales, los hemos visto utilizando siempre el mismo hipervisor. Pero, ¿y si queremos migrar un servidor virtual de un hipervisor a otro?

Pongamos el siguiente escenario como ejemplo:

  • Tenemos un servidor Linux RedHat 8 corriendo en VMWare
  • El cliente quiere migrarlo a Azure o a Hyper-v

Instalación de los controladores de Hyper-V en Linux RedHat

Para poder migrar un servidor Linux RedHat de VMWare a Hyper-V, antes tenemos que instalar los drivers de Hyper-V. Si no lo hacemos, y esto me ha pasado, cuando arranquemos el sistema en Hyper-V, no encontrará el disco de arranque si usamos LVM. Esto viene detallado en la documentación oficial de RedHat: https://access.redhat.com/documentation/es-es/red_hat_enterprise_linux/8/html/deploying_red_hat_enterprise_linux_8_on_public_cloud_platforms/installing-hyperv-drivers_configuring-rhel-high-availability-on-azure

[root@dxcrhel8 ~]# lsinitrd | grep hv
drwxr-xr-x   2 root     root            0 Aug  2 14:10 usr/lib/modules/4.18.0-513.5.1.el8_9.x86_64/kernel/drivers/hv
-rw-r--r--   1 root     root        43768 Aug  2 14:10 usr/lib/modules/4.18.0-513.5.1.el8_9.x86_64/kernel/drivers/hv/hv_vmbus.ko.xz
[root@dxcrhel8 ~]# vi /etc/dracut.conf.d/hv.conf
[root@dxcrhel8 ~]# cat /etc/dracut.conf.d/hv.conf
add_drivers+=" hv_vmbus "
add_drivers+=" hv_netvsc "
add_drivers+=" hv_storvsc "
[root@dxcrhel8 ~]# dracut -f -v --regenerate-all

Luego rebotaremos el servidor para comprobar que arranca correctamente.

Exportar la máquina virtual en formato OVF

El siguiente paso es exportar la máquina virtual de VMWare con formato OVF, tal y como he explicado anteriormente.

Método 1 – Convertir el fichero OVF a VHDX con QEMU

El formato del fichero de una máquina virtual en Hyper-V y Azure es VHDX. Así que tendremos que convertir el fchero de OVF a VHDX.

Yo lo he hecho desde otro servidor RedHat mediante qemu. Es muy sencillo:

qemu-img convert -f vmdk -O vhdx RHEL8-DXC-Template-disk1.vmdk hyperv/RHEL8-DXC-Template-disk1.vhdx

Problemas encontrados en Hyper V – Error sys_wwid eui.XXXX PVID XXXX last seen on /dev/XXXX not found

En alguna ocasión puntual, el servidor de Hyper V no ha arrancado porque no encontraba un Physical Volume de LVM pero, en realidad sí existía en el sistema. Resulta que, aunque el disco sí existía y mantenía su UUID, el sistema iba a buscarlo con otro nombre. En VMWare, el disco se llamaba /dev/nvme0n1p2 y en Hyper V /dev/sda2.

La solución está documentada en RedHat: https://access.redhat.com/solutions/6889951

Por lo tanto, configuro la directiva use_devicesfile=0 en el fichero /etc/lvm/lvm.conf, reboto el servidor y arranca con normalidad.

Método 2 – Convertir el fichero OVA con VirtualBox

  • Descomprimimos el fichero OVA para extraer el VMDK que contiene. Por ejemplo, con 7zip.
Descomprimir fichero OVA con 7ZIP
  • Abrimos VirtualBox y vamos al menú Tools –> Virtual Media Manager y convertimos el fichero VMDK a VHD.
Virtualbox convertir de VMDK a VHD

Importar la máquina virtual en Hyper-V

Una vez que ya tenemos el fichero VHDX, simplemente, lo importamos en Hyper-V, tal y como he comentado anteriormente.

Clonar el servidor con REAR

Alternativamente, también podemos clonar un servidor Linux entero con REAR (Relax and Recover). En este artículo explico cómo crear backups bootables con REAR.

Problemas encontrados

Error «unsuported hardware family ‘vmx-20′»

Este error suele ocurrir cuando se intenta importar una máquina virtual exportada de una versión más reciente de VMWare a una plataforma de virtualización más antigua o diferente que no admite esta versión de hardware virtual.

En mi caso, exporté la máquina virtual con VMWare Workstation 17 pero mi cliente utilizaba una versión inferior de VMWare incompatible con esta arquitectura.

Para solucionarlo, podemos modifcar la arquitectura de la máquina virtual, haciendo clic con el botón derecho del ratón encima del servidor, vamos al menú Manage –> Change Hardware Compatibility y elegimos con qué arquitectura o virtualizador hacemos compatible el servidor virtual:

VMWare Hardware Compatibilyty
VMWare Workstation PRO - Elegir compatibilidad del Hardware

Device is not in devices file – Linux RedHat 9

Por algún motivo, cuando exporto el servidor virtual a formato OVA o OVF, la primera vez que arranca el servidor no lo hace correctamente porque no encuentra todos los discos. Parece que hay algún cambio de UUID en el PV y da el error «device is not in devices file». Pero el disco sí está presente en el sistema.

Para solucionarlo, simplemente hay que añadir el disco de LVM que no ve con:

lvmdevices --adddev /dev/nvme01np2
pvscan --cache
vgscan
vgchange -ay
mount -a
vgreduce --removemissing vg00

Por último, hay que eliminar la entrada duplicada del PV en el fichero /etc/lvm/devices/system.devices (RHEL9).

Te puede interesar

COMPÁRTEME

Deja un comentario