Cómo hacer copias de seguridad programadas en un entorno de virtualización VMware, tanto ESXi independiente como en clúster vCenter usando la herramienta gratuita VMware OVF Tool. Mostramos cómo programar una tarea que apagará la máquina virtual, realizará una exportación a OVF y la encenderá. Todo ello de forma automática. Lo explicamos para un cliente Windows 10 (válido para otros sistemas operativos Windows como Windows Server 2012, 2016, 2019) y con algunos pequeños cambios válido para Linux.

Requisitos para hacer copia de seguridad de máquinas virtuales con OVF Tool

El único requisito es disponer de la herramienta OVF Tool instalada en el equipo cliente que tenga acceso al servidor ESXi independiente o al clúster VMware vCenter que contenga las máquinas virtuales.

Necesitaremos un usuario y contraseña con permisos suficientes de acceso a las máquinas virtuales y con permisos de exportación.

En el siguiente artículo explicamos cómo descargar e instalar VMware OVF Tool:

Preparar y probar comando para apagar máquina, exportar máquina y encender máquina

Los comandos que ejecutaremos deben realizar las siguientes tareas:

  • 1. Conectar con el servidor ESXi o el clúster vCenter.
  • 2. Apagar la máquina virtual a copiar.
  • 3. Exportar la máquina virtual a OVF, a un destino (unidad y carpeta de backup).
  • 4. Enciender la máquina virtual.

Para apagar la máquina y exportarla usaremos el comando OVF Tool. El uso de este comando (la descarga e instalación), puede consultarase en el siguiente artículo:

Suponemos que el servidor ESXi tiene la IP 192.168.1.3, y que queremos hacer backup de la máquina PCUBUNTU20. El comando OVF Tool que apagará la máquina y la exportará a la unidad D:\Backups\MV será:

ovftool.exe –noSSLVerify –powerOffSource vi://»usuario»:»contraseña»@192.168.1.3/pcubuntu20 D:\Backups\MV

Cambiaremos «usuario» y «contraseña» por el usuario y su contraseña del VMware ESXi o del vCenter con permisos suficientes para apagar máquinas y exportarlas. Es conveniente respectar las comillas dobles, que separan tanto el usuario como la contraseña. La máquina virtual indicada en el comando se apagará.

Es conveniente comprobar que funciona correctamente. Si lo ejecutamos, veremos que apaga la máquina virtual y la exporta a OVF en la carpeta de destino indicada:

Preparar y probar comando para apagar máquina, exportar máquina y encender máquina

Para encender la máquina virtual usaremos la herramienta plink, que es gratuita y está disponible en la web:

Esta herramienta no necesita instalación, será suficiente con descargar el ejecutable plink.exe de la web anterior. Colocaremos el ejecutable en la carpeta donde vayamos a guardar el script final. Para encender una máquina virtual por comando mediante SSH necesitaremos, previamente, conocer su ID. A continuación mostramos un comando con plink que nos devolverá el ID de cada máquina virtual que tengamos:

(debemos respetar las comillas dobles seguidas «»:»»)

El comando anterior devolverá el ID de cada máquina y su nombre:

Preparar y probar comando para apagar máquina, exportar máquina y encender máquina

Una vez que conozcamos el ID de la máquina virtual, podremos apagarla o encenderla por comando. Para encender la máquina SRV_MYSQL, con ID 4, ejecutaremos el comando:

plink -ssh -pw «contraseña» «usuario»@192.168.1.3 «vim-cmd vmsvc/power.on 4»

Donde:

  • 192.168.1.3: IP o nombre de red del servidor VMware ESXi (el el clúster vCenter) que contiene las máquinas virtuales de las que queremos hacer copia.
  • «usuario»: nombre de usuario del host ESXi o del clúster vCenter con permisos suficientes para conexión SSH y para apagar/encender máquinas virtuales. Conviene respetar las comillas dobles por si el usuario contiene espacios y otros caracteres «raros».
  • «contraseña»: contraseña del usuario anterior. Conviene respetar las comillas dobles por si la contraseña contiene espacios y otros caracteres «raros».
  • vim-cmd vmsvc/power.on 4: comando que ejecutaremos en el servidor ESXi o en el vCenter, le pasamos como parámetro el ID de la máquina virtual que queremos encender, en nuestro ejemplo, 4.
Preparar y probar comando para apagar máquina, exportar máquina y encender máquina

Si la máquina ya está encendida, el comando devolverá:

Powering on VM:
Power on failed

La primera vez que ejecutemos el comando plink puede que nos solicite confirmación de cachear las claves, responderemos «y» e INTRO:

Preparar y probar comando para apagar máquina, exportar máquina y encender máquina

Script para hacer backup de máquina virtual con OVF Tool y plink

Una vez que conozcamos los comandos para apagar, exportar y encender la máquin virtual, podremos crear un fichero .bat de proceso por lotes (o un .ps PowerShell) que ejecute los comandos y realice la operación de copia de seguridad de forma automática.

Para ello crearemos un fichero de texto plano, con el notepad por ejemplo, e iremos pegando los comandos anteriores:

El «pause» lo pondremos únicamente para depurar, para comprobar que los comandos anteriores no dan error. Si dan algún error la ventana de MS-DOS no se cerrará y podremos verlo para solucionarlo. Una vez que tengamos el script funcionando, quitaremos el «pause».

Guardaremos el script anterior en una carpeta, con extensión .bat, por ejemplo backup_mv.bat.

En cuanto dispongamos de la posibilidad de detener la máquina virtual, realizaremos una prueba del script anterior, para verificar que apaga la máquina, la exporta a la carpeta de destino y la enciende tras finalizar la exportación:

Script para hacer backup de máquina virtual con OVF Tool y plink

Vemos que el comando ha funcionado perfectamente, ha apagado la máquina virtual, la ha exportado a OVF en una carpeta del equipo y la ha encendido:

Script para hacer backup de máquina virtual con OVF Tool y plink

Comprobamos que se han exportado los ficheros de la máquina virtual en la unidad de destino D:\Backups\MV\srv_mysql:

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

Una vez que tengamos probado el script para detener la máquina virtual, exportarla y encenderla, podremos agregar una tarea programada en el equipo para que se ejecute con la periodicidad que deseemos.

Antes de crear la tarea programada hay que tener en cuenta que si la carpeta y los ficheros existenten, la segunda vez que se ejecute el script, mostrará el error:

Error: File already exists: D:\Backups\MV\srv_mysql\srv_mysql.ovf
Completed with errors

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

Para solucionar este error, tenemos varias opciones, o bien renombramos la carpeta de backup con el nombre del día en que se hace, para no reemplazar y mantener un histórico (si disponemos de espacio), o bien agregamos el parámetro –overwrite al comando para que reemplace los ficheros de la máquina, quedando el script:

(Hemos quitado el «pause» para que no se quede la ventana de MS-DOS abierta)

Ahora podremos crear la tarea programada que ejecute el script .bat cada cierto tiempo. Lo normal será establecer una hora de inicio en la que no haya usuarios conectados, dado que la máquina se apagará. En el caso de un equipo Windows 10, crearemos una tarea programada desde el Panel de control, Herramientas administrativas, Programadador de tareas:

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

Desde el Programador de tareas, pulsaremos con el botón derecho del ratón y elegiremos «Crear tarea…»:

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

Introduciremos un nombre para la tarea, por ejemplo «Backup_MV_ESXi». Marcaremos la opción «Ejecutar tanto si el usuario inició sesión como si no» y marcaremos, sólo si es necesario, «Ejecutar con los privilegios más altos»:

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

En la pestaña «Desencadenadores» pulsaremos en «Nuevo»:

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

Indicaremos la periodicidad con la que queramos que se ejecute y la hora. En nuestro caso se ejecutará los lunes, miércoles y viernes, a las 5 de la madrugada:

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

En la pestaña «Acciones» pulsaremos en «Nueva»:

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

En «Acción» elegiremos «Iniciar un programa». Seleccionaremos el fichero de script .bat creado anteriormente, en «Programa o script», en nuestro caso:

D:\Backups\MV\backup_mv.bat

Y en «Iniciar en (opcional)» introduciremos la unidad y carpeta donde se encuentra el fichero de script .bat:

D:\Backups\MV\

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

Por último, en «Condiciones», marcaremos únicamente «Activar el equipo para ejecutar esta tarea»:

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

Puede que pida usuario y contraseña del sistema para ejecutar la tara programada:

Tarea programada para hacer copia de seguridad (exportar) de máquina virtual VMware ESXi o vCenter

A partir de ahora el script se ejecutará una vez cada dos días y hará el backup de la máquina virtual.

Mejorando el script para que guarde log con el resultado y para exportar a un único fichero OVA cada máquina virtual

El script .bat anterior es mejorable, por supuesto, a continuación indicamos algunas opciones que nos permitirán, por ejemplo, guardar log con el resultado de la copia de la máquina virtual y también exportar cada máquina a un único fichero OVA.

Un ejemplo de script .bat (batch) que apaga, exporta e inicia varias máquinas virtuales a un fichero OVA cada una de ellas:

El ejemplo anterior apagará, exportará a fichero OVA y encenderá las tres máquinas virtuales SRV_MYSQL, SRVWEBOLD y PCUBUNTU20. Generará tres ficheros OVA, uno por cada máquina virtual.

En realidad, el formato de exportación OVA, es el mismo que el formato OVF, con la diferencia de que el OVA comprime los ficheros del OVF en uno solo. De hecho, el fichero OVA resultante se puede descomprimir con ZIP o 7zip y se puede comprobar que contiene los ficheros .mf, .vmdk, .ovf:

Mejorando el script para que guarde log con el resultado y para exportar a un único fichero OVA cada máquina virtual

Para guardar en fichero de log el resultado de las operaciones que se realizan en cada máquina podemos cambiar el script anterior por:

En este caso se generará un fichero OVA por cada máquina virtual y un fichero de log, también por cada máquina virtual, con el resultado de la ejecución de cada comando por cada máquina: