GuilleSQL :: Microsoft SQL Server, SSIS, y más !!

Hyper-V: Copiar o Mover Máquinas Virtuales (Export e Import)


Un práctica habitual al trabajar con Máquinas Virtuales, es la necesidad de copiar o mover una Máquina Virtual desde un servidor físico (Host) a otro (ej: después de redimensionar un servidor físico existente - ampliar capacidad de procesamiento, disco y/o memoria - , previo a decomisar un servidor físico antiguo, etc) o dentro de un mismo servidor físico (ej: reubicar una Máquina Virtual en lo relacionado con el almacenamiento local del servidor físico). ¿Cómo se puede copiar o mover Máquinas Virtuales de Hyper-V a un Host diferente? ¿Y dentro del mismo Host? ¿Es suficiente con copiar los Discos Virtuales?

Ahora que por fin he aumentado la capacidad de procesamiento de mis servidores virtuales con mis nuevos AMD Phenom Quad Core, y que también les he aumentado su memoria RAM DDR2 800 Kingstone Hyper-X, tengo margen para continuar jugando y probando Hyper-V, y así poder instalar y configurar Hyper-V en nuevo servidor para continuar con mi pruebas de laboratorio.

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

Quizás, en un primera impresión, podamos pensar que es suficiente con mover o copiar los Discos Virtuales (a fin de cuentas, en los discos es donde está toda la información que necesitamos, ¿no?). De este modo, en caso de necesitar mover una Máquina Virtual de un servidor físico (Host) a otro servidor físico diferente, sería suficiente con:

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

De hecho, si probamos a realizar esto, más o menos que funciona... pero no, esta no es la forma. Los principales inconvenientes de este método (que no son pocos) son:

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

Vamos, que nos hemos lucío. Sencillamente, esta no es la forma de proceder, al menos en el caso de Máquinas Virtuales de Hyper-V. Lo que queremos, lo podemos hacer, pero no de este modo.

Actualizado 12/11/2009: puede consultarse como alternativa el artículo Hyper-V: Copiar o Mover Máquinas Virtuales sin Export e Import (a pelo)

Utilizar Export e Import para copiar o mover Máquinas Virtuales de Hyper-V

La solución a este problema, es utilizar las opciones Export e Import que ofrece Hyper-V. Sin embargo, la utilización de estas opciones tiene ciertas peculiaridades, que es interesante conocer antes que meterse en ningún fregao, y que introducimos a continuación.

Las opciones de Export e Import sólo son válidas para su utilización con Máquinas Virtuales de Hyper-V. Es decir, no podremos realizar un Import de una Máquina Virtual de Virtual Server 2005.

Sólo se puede hacer un Export de una Máquina Virtual en estado detenido (Off) o guardado (saved). Con la Máquina Virtual iniciada (Running), no es posible, vamos, que la opción Export del menú no aparece por ningún lado. Ojo, que estamos hablando de Hyper-V en Windows Server 2008 (sin el R2 y sin Virtual Machine Manager - VMM -, que aún no los he podido probar). A continuación, puede observarse el aspecto del menú contextual de una Máquina Virtual detenida, en Hyper-V Manager.

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.

La verdad que se podían haber tirado el rollo, y ponernos directamente el error en la ventana de importación, pero bueno, tampoco es pa tanto, ya que consultando el Event Log indicado, obtenemos el detalle que búscabamos.

Import failed to configure network connection for network card '{ResourceType=10, OtherResourceType="<null>", ResourceSubType="Microsoft Synthetic Ethernet Port"}'. You must modify the connection of all affected network adapters to be able to run the virtual machine. If you imported snapshots and apply any of those snapshots after modifying the connection, you must modify the connection again to be able to run the virtual machine.

Esto en español, quiere decir que revisemos las conexiones de red de la Máquina Virtual importada. Es normal (yo me lo esperaba), al mover la Máquina Virtual a un Host diferente, con una configuración diferente de Redes Virtuales.

Al editar la configuración de la Máquina Virtual con el Hyper-V Manager, el motivo del error salta a la vista fácilmente. La solución, sencilla, enlazar la tarjeta de red vitual con la red deseada utiliando el desplegable de turno. Y aquí paz, y después gloria.

Y llegados a este punto, hemos finalizado el Import de la Máquina Virtual. Otra cosa, es que deseemos ajustar alguna configuración más. Por ejemplo, al mover una Máquina Virtual a un Host diferente, es posible que deseemos cambiar la carpeta de Snapshot, la ubicación (o incluso nomenclatura) de los Discos Virtuales, ajustar la memoria asignada, etc. Pequeñas tareas, que aunque son técnicamente ajenas al propio proceso de Export e Import de Hyper-V, son importantes para finalizar con éxito el movimiento de una Máquina Virtual.

Poco más por hoy. Espero que sirva de ayuda.




Miembros de
Miembros de GITCA (Global IT Community Association)

Menu de Usuario
  Iniciar Sesión
  Registrarse
  Restablecer Contraseña
  Ventajas de Registrarse

Acerca de
  Contigo desde Oct 2007
  771 usuarios registrados
  86146 pageloads/mes
  Ranking Alexa 498160

Social Networks
Sigue a Portal GuilleSQL en Linkedin !!
Sigue a Portal GuilleSQL en Twitter !!



Archivo

Marzo de 2019 (1)
Octubre de 2018 (1)
Julio de 2018 (1)
Junio de 2018 (4)
Mayo de 2018 (5)
Abril de 2018 (3)
Marzo de 2018 (2)
Febrero de 2018 (7)
Enero de 2018 (1)
Diciembre de 2017 (15)
Noviembre de 2017 (7)
Junio de 2017 (3)
Mayo de 2017 (1)
Marzo de 2017 (3)
Enero de 2017 (4)
Junio de 2016 (1)
Mayo de 2016 (2)
Abril de 2016 (2)
Septiembre de 2015 (2)
Agosto de 2015 (2)
Junio de 2015 (10)
Mayo de 2015 (4)
Abril de 2015 (8)
Marzo de 2015 (11)
Octubre de 2014 (3)
Septiembre de 2014 (7)
Agosto de 2014 (5)
Julio de 2014 (2)
Mayo de 2014 (4)
Abril de 2014 (4)
Marzo de 2014 (4)
Febrero de 2014 (1)
Enero de 2014 (5)
Diciembre de 2013 (8)
Noviembre de 2013 (2)
Octubre de 2013 (7)
Septiembre de 2013 (6)
Agosto de 2013 (1)
Julio de 2013 (6)
Junio de 2013 (11)
Mayo de 2013 (7)
Abril de 2013 (6)
Febrero de 2013 (5)
Enero de 2013 (7)
Diciembre de 2012 (12)
Noviembre de 2012 (13)
Octubre de 2012 (5)
Septiembre de 2012 (3)
Agosto de 2012 (6)
Julio de 2012 (4)
Junio de 2012 (1)
Mayo de 2012 (2)
Abril de 2012 (7)
Marzo de 2012 (16)
Febrero de 2012 (9)
Enero de 2012 (5)
Diciembre de 2011 (10)
Noviembre de 2011 (10)
Octubre de 2011 (4)
Septiembre de 2011 (5)
Agosto de 2011 (2)
Julio de 2011 (2)
Junio de 2011 (4)
Mayo de 2011 (2)
Abril de 2011 (6)
Marzo de 2011 (4)
Febrero de 2011 (10)
Enero de 2011 (5)
Diciembre de 2010 (6)
Noviembre de 2010 (4)
Octubre de 2010 (8)
Septiembre de 2010 (4)
Agosto de 2010 (1)
Julio de 2010 (3)
Mayo de 2010 (5)
Abril de 2010 (6)
Marzo de 2010 (8)
Febrero de 2010 (3)
Enero de 2010 (1)
Diciembre de 2009 (9)
Noviembre de 2009 (14)
Octubre de 2009 (2)
Septiembre de 2009 (8)
Agosto de 2009 (2)
Julio de 2009 (10)
Junio de 2009 (9)
Mayo de 2009 (10)
Abril de 2009 (9)
Marzo de 2009 (3)
Febrero de 2009 (2)
Enero de 2009 (3)
Noviembre de 2008 (2)
Octubre de 2008 (2)
Septiembre de 2008 (2)
Agosto de 2008 (5)
Julio de 2008 (5)
Junio de 2008 (1)
Mayo de 2008 (3)
Abril de 2008 (2)
Marzo de 2008 (2)
Febrero de 2008 (2)
Enero de 2008 (5)
Noviembre de 2007 (2)
Octubre de 2007 (2)






Copyright © 2007 GuilleSQL, todos los derechos reservados.