Muchas veces necesitamos copiar una maquina virtual a otro servidor (host)  ¿Es suficiente con copiar los Discos Virtuales?

Introducción y descripción del problema

Copiar o mover Máquinas Virtuales es una operación relativamente frecuente al trabajar con cualquier sistema de virtualización, ya sea Hyper-V, o cualquier otro (Xen, VMware, etc.).

Lo que se acostumbre es:

  • Copiar los Discos Virtuales a la ubicación deseada en el servidor destino.
  • Crear una nueva Máquina Virtual en el servidor físico (Host) destino, con la misma configuración que la Máquina Virtual original (CPUs, RAM, Tarjetas de Red, etc.), utilizando los Discos Virtuales previamente copiados.

Seguramente nos funcione pero tiene varios inconvenientes de este método (que no son pocos) :

  • Es neceario volver a crear manualmente la Máquina Virtual en el servidor físico (Host) destino, parametrizada de forma correcta (CPUs, RAM, Tarjetas de Red, Startup, Shutdown, carpeta de Snapshot, Controladoras SCSI, etc.).
  • Es necesario volver a configurar las Tarjetas de Red en la Máquina Virtual (Guest), es decir, la configuración TCP/IP y demás. Especialmente rollo, si la Máquina Virtual en cuestión es miembro de un Cluster NLB o de un Microsoft Cluster (MSCS), o si dispone de múltiples tarjetas de red, por poner algún ejemplo.
  • En algunos casos (ej: Windows Server 2008, Windows Storage Server 2008, etc.), al mover de este modo las Máquinas Virtuales, el Sistema Operativo Guest interpreta que lo estás clonando (malamente), y solicita volver a Activar Windows.

Para no tener este inconveniente lo recomendable es utilziar: Export,import

Sólo se puede hacer un Export de una Máquina Virtual en estado detenido (Off) o guardado (saved)

Al utilizar la opción Export de Hyper-V Manager, se nos solicita la ruta que se desea utilizar para depositar los ficheros correspondientes al Export de nuestra Máquina Virtual. Del mismo modo, también si no solicita si deseamos exportar sólo la configuración (Export only the virtual machine configuration), o en su defecto la Máquina Virtual completa (con su correspondientes Virtual Disks, Estado y los Snapshots de la Máquina Virtual).

Al realizar un Export de una Máquina Virtual completa (incluyendo los Discos Virtuales, Estado y Snapshots), en la ruta que hemos especificado para el Export (ej: F:\Exports) se creará una subcarpeta con el nombre de la Máquina Virtual (ej: F:\Exports\VSQL06). Dicha subcarpeta contendrá los siguientes elementos:

  • Un fichero denominado config.xml (ej: F:\Exports\VSQL06\config.xml). Almacena información, como la ubicación original de los Discos Virtuales en el Host de origen.
  • Una subcarpeta Snapshots (ej: F:\Exports\VSQL06\Snapshots). Almacenará todas las instantáneas (Snapshots) de la Máquina Virtual, si las tuviese.
  • Una subcarpeta Virtual Hard Disks (ej: F:\Exports\VSQL06\Virtual Hard Disks). Almacenará todos los Discos Virtuales de la Máquina Virtual.
  • Una subcarpeta Virtual Machines (ej: F:\Exports\VSQL06\Virtual Machines). Almacenará la exportación del fichero de configuración de la Máquina Virtual (ojo que no es el fichero XML de configuración de la Máquina Virtual, sino un fichero con extensión EXP), junto con una subcarpeta con los correspondientes ficheros de estado de la Máquina Virtual (los ficheros BIN y VSV). Evidentemente, los ficheros de estado sólo existirán sin la Máquina Virtual estaba en estado guardado (Saved) al realizar el Export, ya que si estaba en estado detenido, no existirá ninguno de estos ficheros de estado. Tanto el nombre del fichero de exportación de la Máquina Virtual como la subcarpeta, coincidirá con el Globally Unique Identifier (GUID) de la Máquina Virtual.

Del mismo modo, al realizar un Export de una Máquina Virtual especificando sólo la configuración (sin Discos Virtuales, ni Estado, ni Snapshots), en la ruta que hemos especificado para el Export (ej: F:\Exports) se creará una subcarpeta con el nombre de la Máquina Virtual (ej: F:\Exports\VSQL06). Dicha subcarpeta contendrá los siguientes elementos:

  • Un fichero denominado config.xml (ej: F:\Exports\VSQL06\config.xml). Almacena información, como la ubicación original de los Discos Virtuales en el Host de origen.
  • Una subcarpeta Snapshots (ej: F:\Exports\VSQL06\Snapshots). Almacenará información de configuración de las instantáneas (Snapshots) de la Máquina Virtual, si las tuviese, pero no almacenará el contenido de las Instantáneas.
  • Una subcarpeta Virtual Machines (ej: F:\Exports\VSQL06\Virtual Machines). Almacenará el fichero de configuración de la Máquina Virtual. Aunque puede contener la subcarpeta de los ficheros de estado de la Máquina Virtual (los ficheros BIN y VSV), estará vacía aunque la Máquina Virtual fuese exportada en estado guardado (Saved). Vamos, que en este caso, no se exporta el Estado.

Claro está, que un Export completo de una Máquina Virtual (incluyendo los Discos Virtuales, Estado y Snapshots), en función del tamaño de los Discos Virtuales, puede resultar una operación especialmente costosa, mientras que un Export de sólo la configuración de una Máquina Virtual será instantáneo, como el café ;-). Para aclarar conceptos:

  • Un Export completo de la Máquina Virtual, nos sirve de Copia de Seguridad (Backup) completo de la Máquina Virtual, ya que incluye toda la información asociada a la misma, pudiendo importarla en el mismo o diferente Host. Por el contrario es más pesado, ya que en función del tamaño de los Discos Virtuales y de los Snapshots, las necesidades de almacenamiento y el tiempo necesario para su ejecución, pueden aumentar considerablemente.
  • Un Export de sólo la configuración de la Máquina Virtual, puede resultar útil en algunos casos, como para cambiar la ubicación de la Máquina Virtual dentro del mismo Host. Sin embargo, al menos actualmente no recomiendo utilizarlo, ya que en las pruebas realizadas me ha dado algún problema en la Importación.Así, nos podemos encontrar con el mensaje de error Import Failed: Virtual Machine state was not copied. He leído por los interneses que como Workaround, podemos modificar el fichero config.xml, cambiando el valor de VmStateCopied de false a true, pero esto a mí no me ha funcionado (seguro que por alguna razón, pero no he pillado el porqué). Otra alternativa, es eliminar el fichero config.xml, teniendo en cuenta que esto no nos permitirá mantener el GUID de la Máquina Virtual (es decir, no podremos utilizar la opción Reuse old virtual machine IDs) y además tras la importación deberemos establecer manualmente alguna configuración (ej: la ubicación de los Discos Virtuales y carpeta de Snapshots, que vienen especificados en el config.xml que eliminamos). En cualquier caso, no he hecho muchas pruebas más, ya que me ha resultado un poco frustrante.

Contiamos. Una vez que ha finalizado el Export de la Máquina Virtual, estaremos en situación de poder realizar el Import de la Máquina Virtual, ya sea en un Host diferente o en el mismo Host.

Lo primero que deberemos tener en cuenta al hacer un Import de una Máquina Virtual de Hyper-V, es que el Import sólo se puede hacer una vez. El motivo, es que tras ejecutar el Import de una Máquina Virtual, el fichero config.xml es eliminado, y el fichero de exportación de la configuración de la Máquina Virtual (el fichero EXP) también es eliminado (en su lugar aparecerá un fichero XML de configuración de la Máquina Virtual). Evidentemente, sin estos dos ficheros clave, no podremos volver a ejecutar otra operación de Import.

Otro detalle importante a tener en cuenta, es que una Máquina Virtual importada es almacenada y ejecutada desde la ubicación desde la que ha sido importada. Evidentemente, esto hace que la operación de Import sea muy rápida, ya que evita tener que copiar los ficheros correspondientes a los Discos Virtuales a una ubicación diferente, lo cual suele ser una operación costosa por el tamaño de los mismos. Pero claro, deberemos tener claro dónde deseamos realizar el Export, y tener en cuenta que nos puede tocar copiar el Export una vez que lo hemos generado (lo cual, puede ser algo costoso).

Es decir, después de ejecutar el Export de una Máquina Virtual, es posible copiar o mover los ficheros del Export de la Máquina Virtual, para posteriormente importarlos desde la ubicación deseada, que en consecuencia no tiene porqué ser la misma ubicación del Export original. Este es un punto clave, ya que en función de las rutas definitivas sobre las que deseemos ejecutar la Máquina Virtual (tras su importación), tenemos claramente dos alternativas:

  • Realizar el Export de la Máquina Virtual directamente sobre la ubicación deseada.
  • Realizar el Export de la Máquina Virtual sobre una ubicación temporal, y posteriormente mover o copiar los ficheros del Export a la ubicación definitiva.

En ambos casos, tras la importación podremos cambiar la ubicación de los Discos Virtuales y la ubicación de la carpeta de Snapshot.

Continuando con nuestro caso de ejemplo, anteriormente realizar un Export desde un servidor denominado HOST01. Dicho Export lo almacenamos en el disco local F:\Exports, creándose una subcarpeta F:\Exports\VSQL06, con la información del export (el fichero config.xml y las subcarpetas Snapshots, Virtual Hard Disk y Virtual Machines).

Partiendo de esta situación, lo siguiente que podemos hacer el copiar los ficheros de dicho Export al Host de destino, que en este caso de ejemplo se denomina HOST02. Aprovecharemos para dejar los ficheros del export en la ubicación sobre la cual deseamos importar y ejecutar la Máquina Virtual, en particular, en la raíz del disco F del servidor HOST02. De este modo, tendremos:

  • F:\config.xml.
  • F:\Snapshots
  • F:\Virtual Hard Disks
  • F:\Virtual Machines

Realizadas estas operaciones de copia y movimiento de ficheros, en el servidor HOST02 abrimos la herramienta administrativa Hyper-V Manager, y seleccionamos la opción Import Virtual Machine del menú contextual del servidor (esto es, click con el botón derecho), como se muestra en la siguiente pantalla capturada.

En el diálogo Import Virtual Machine, especificaremos la ubicación desde la que deseamos importar, en nuestro caso la ruta F:\, que es donde se encuentra el fichero config.xml y el resto de subcarpetas con el contenido de la Exportación. La opción Reuse old virtual machine IDs, hace referencia al Globally Unique Identifier (GUID) de la Máquina Virtual, un númerito (dícese churro) generado aleatoriamente para cada máquina virtual y que debe ser único. Por ello, la práctica habitual implica que si estamos moviendo una Máquina Virtual seleccionaremos la opción Reuse old virtual machine IDs, y si estamos duplicando la Máquina Virtual dejaremos la opción Reuse old virtual machine IDs en blanco para que se genere un GUID nuevo y único para la nueva copia de la Máquina Virtual.

En mi caso de ejemplo, estoy moviendo una Máquina Virtual a un Host diferente, por lo que marcaré la opción Reuse old virtual machine IDs, como se muestra en la siguiente pantalla capturada.

La importación me insulta. Mensaje acojonativo: import completed with warning. Please check the Admin events in the Hyper-V Virtual Machine Management service event log for more information.

En el  el Event Log indicado, obtenemos el detalle que búscabamos.

 

Anuncios