Migraciones de Virtual Server a Hyper-V

Hola, hay abundante información sobre este tema por ahí, pero intentaré "resumir" aquí las diferentes formas que tenemos de lograr que las máquinas Virtuales corriendo en Microsoft Virtual Server lo acaben haciendo sin problemas en Hyper-V. Voy a dividirlo en cuatro partes. Antecedentes (como los abogados), migración manual, migración con SCVMM 2008 y automatización del proceso. La guía oficial la podéis encontrar aquí:

Antecedentes

Supongo que a estas alturas, es por todos conocido el hecho de que Microsoft Virtual Server e Hyper-V son dos sistemas de virtualización totalmente diferentes y que Hyper-V es un role exclusivo de Windows Server 2008 x64. Por esta razón no es posible una estrategia clásica de actualización (in-place upgrade), porque aunque puliéramos actualizar la versión de Windows en la que corre Virtual Server a Windows Server 2008, no se actualizaría automáticamente Virtual Server a Hyper-V, y ni mucho menos se transformarían las máquinas virtuales.

Por otro lado, las Virtual Machine Additions de Virtual PC / Virtual Server y los Integration Components de Hyper-V, aunque aporten funcionalidades similares, tienen grandes diferencias que responden a las diferencias de arquitectura que tienen Virtual Server e Hyper-V. En el caso de los Integration Components, además de los habituales servicios de sincronización horaria, apagado, etc. y de la actualización de drivers, modifican el núcleo del sistema de modo que le permite utilizar las ventajas de la paravirtualización que incluye un Hypervisor Tipo I como es Hyper-V.

Otra consideración importante es que si bien en Virtual Server se soporta arrancar la VM de un .VHD conectado a la controladora SCSI emulada, en Hyper-V es obligatorio de un disco conectado a la controladora IDE. Digamos que no hay drivers "de los de F6" para la controladora SCSI sintética que monta Hyper-V.

La idea de una migración de Virtual PC / Virtual Server a Hyper-V es sencilla. El formato VHD no varía. La definición de la máquina virtual esta en cada caso en un fichero de estructuras incompatibles entre si. En Virtual Server es un fichero .vmc, y en Hyper-V en un .xml. Y por último y más importante, Hyper-V solo podrá arrancar una VM desde un VHD proveniente de Virtual Server / Virtual PC si y solo si

  • Las Virtual Machine Additions instaladas en la VM son posteriores a la 13.813
  • La VM no tiene las VM Additions instaladas

Por último, mencionar cual es la última versión de Microsoft Virtual Server 2005 a fecha de hoy:

Todo esto es importante para entender todo lo que sigue a continuación. Voy a asumir que las máquinas virtuales a migrar albergan el buzón de Director General, por lo que según los casos alguna cosa podría relajarse un poco.

Migración Manual

Esto es bastante sencillo. Podemos tirar para delante o para detrás:

  1. Desinstalar las Additions de la VM, migrarla a Hyper-V e instalar los ICs
  2. Subir la versión de Virtual Server 2005 R2 SP1, actualizar las ICs de la VM a la versión 13.813 o posterior, migrar a Hyper-V e instalar las ICs.

Para hacerlo a mano, personalmente casi prefiero la primera opción. Pero esto puede variar según la situación de cada uno. Así es que éste sería el paso a paso para ambos casos y que cada uno elija/simplifique el que más le convenga:

  1. Desinstalar las Additions de la VM, migrarla a Hyper-V e instalar los ICs
    • Apuntarnos la configuración IP de las tarjetas de red de la VM a migrar
    • Apagar la VM
    • Hacer una copia de seguridad del fichero de configuración (.vmc) y del VHD de sistema
    • Desconectar esa VM de la red desde la consola de Virtual Server o por el medio que sea. Se trata de evitar que los datos varíen al atender clientes
    • Si la VM arranca de un VHD conectado a una controladora SCSI, hacer que arranque de la controladora IDE en las propiedades de dicha VM
    • Arrancar de nuevo la VM
    • Desinstalar las VM Additions y reiniciar.
    • Apagar de nuevo la máquina virtual (relajándonos un poco, basta con desinstalar las VM Additions y apagar)
    • Apuntar la configuración de la VM
    • Copiar el/los .VHD al path deseado dentro del host con Hyper-V
    • Crear una nueva máquina virtual en Hyper-V con el perfil de hardware igual al de la original, utilizando el VHD que copiamos en el punto anterior (https://blogs.technet.com/matthts/archive/2008/09/12/vmc-to-hyper-v-import-tool-available.aspx)
    • Arrancar la VM en Hyper-V, teniendo la precaución de que la VM no se conecte a la red (desconectamos las NIC virtuales)
    • Instalar los Componentes de Integración. Reiniciar
    • Comprobamos que todo esté como debe, y volvemos a configurar las tarjetas de red
    • Si todo funciona bien, conectamos las NIC de la VM a los switches virtuales correspondientes, comprobamos que vuelva a hacer su trabajo con normalidad y borramos la VM original que permanece en apagada en Virtual Server
  2. Subir la versión de Virtual Server 2005 R2 SP1, actualizar las ICs de la VM a la versión 13.813 o posterior, migrar a Hyper-V e instalar las ICs.
    • Apuntarnos la configuración IP de las tarjetas de red de la VM a migrar
    • Apagar la VM
    • Hacer una copia de seguridad del fichero de configuración (.vmc) y del VHD de sistema
    • Actualizamos a Virtual Server 2005 R2 SP1 + KB948515.
    • Desconectar esa VM de la red desde la consola de Virtual Server o por el medio que sea. Se trata de evitar que los datos varíen al atender clientes
    • Si la VM arranca de un VHD conectado a una controladora SCSI, hacer que arranque de la controladora IDE en las propiedades de dicha VM
    • Arrancar la VM
    • Actualizar las VM Addtions de la VM a la versión 13.820. Reiniciar para comprobar que continúa funcionando correctamente
    • Comprobamos que la HAL sea la APIC MP HAL, y si no la actualizamos tal como se indica aquí: https://technet.microsoft.com/en-us/library/dd296684.aspx
    • Apagar la VM
    • Apuntar la configuración de la VM
    • Copiar el/los .VHD al path deseado dentro del host con Hyper-V
    • Crear una nueva máquina virtual en Hyper-V con el perfil de hardware igual al de la original, utilizando el VHD que copiamos en el punto anterior (https://blogs.technet.com/matthts/archive/2008/09/12/vmc-to-hyper-v-import-tool-available.aspx)
    • Arrancar la VM en Hyper-V teniendo la precaución de que la VM no se conecte a la red (desconectamos las NIC virtuales)
    • Desinstalamos las VM Additions. Reiniciar
    • Instalar los Componentes de Integración. Reiniciar 
    • Comprobamos que todo esté como debe, y volvemos a configurar las tarjetas de red
    • Si todo funciona bien, conectamos las NIC de la VM a los switches virtuales correspondientes, comprobamos que vuelva a hacer su trabajo con normalidad y borramos la VM original que permanece en apagada en Virtual Server

En ambos casos es conveniente tener en cuenta que las NICs en Virtual Server son siempre una emulación de la Intel PCI 21140, y que tal tarjeta en Hyper-V es la "Legacy" (heredada). La tarjeta de red de Hyper-V (sintética) no funcionará en ningún caso antes de haber instalado los componentes de integración. También puede ser un buen momento para incrementar la memoria RAM asignada a la VM, o su número de procesadores. Sobre todo esto último debe hacerse también una vez la VM ya haya arrancado una vez en Hyper-V y no antes.

Sobre todo esto, hay mas trucos y recomendaciones aquí: https://blogs.technet.com/askcore/archive/2008/09/19/migrating-to-hyper-v-from-virtual-server-or-virtual-pc-tips-and-suggestions.aspx

Como vemos, el proceso puede llegar a ser algo tedioso. Si no le tenemos demasiado aprecio a la VM, también es cierto que se puede simplificar bastante. Aún así ¿que tal si todo esto lo hacemos con un simple "drag and drop" y nos vamos mientras a tomar algo?

Migración de Virtual Server a Hyper-V usando System Center Virtual Machine Manager 2008

Como decía, basta con arrastrar la VM de Virtual Server al Host de Hyper-V deseado de los que están agregados en la consola, si bien tenemos que tener en cuenta antes que se cumplan una serie de condiciones, y que, nuevamente, yo no migraría así una VM crítica, al menos sin haberme asegurado antes de tener una copia de seguridad o un buen plan de marcha atrás. De entrada, he aquí la información oficial sobre este tema:

En este caso, el proceso es mas simple y amigable, si bien en esencia va a suceder algo muy similar por debajo:

  1. Prerrequisitos: Actualización de los hosts a Virtual Server 2005 R2 SP1 + KB948515 e instalación de la VM Additions con versión 13.820. Esto sería conveniente hacerlo en cualquier caso, incluso si no tenemos pensado migrar las máquinas virtuales corriendo en la infraestructura de Virtual Server. 
    • SCVMM2008 nos permite almacenar (clonar) todas las VMs a migrar en la librería, a modo de copia de seguridad. Tened en cuenta que si se usa la opción "Store in Library", la VM desaparece del Host. Esto es útil si el hardware físico va a ser reinstalado para pasar del SO en el que corra Virtual Server a Windows Server 2008 x64 con Hyper-V o Hyper-V Server, cosa que no estamos asumiendo.
    • Nos aseguramos de que todos los servidores con Virtual Server que contienen las máquinas a migrar tienen Virtual Server 2005 R2 SP1 + KB948515
    • SCVMM2008 nos permite actualizar todos aquellos servidores que no tengan esa versión simplemente haciendo clic con el botón de la derecha y eligiendo la opción de actualizarlo
    • Una vez actualizados los hosts, podemos instalar las VM Additions simplemente haciendo clic con el botón de la derecha sobre cada VM y eligiendo la opción correspondiente.
  2. Migración de las máquinas virtuales. Aquí caben tres posibilidades.
    • Usar la opción "Migrate" que sale entre las acciones que se pueden llevar a cabo sobre una VM y seguir el asistente para elegir el host destino con Hyper-V, lo que forzará la conversión automática de la VM (mediante un proceso parecido al punto 2 del apartado anterior). Si tenemos claro a que servidor queremos migrar la VM, bastará arrastrarla desde la parte centra de la consola al servidor en cuestión. Esto no debería tener problema alguna, ya que hasta que la VM no se arranca en Hyper-V, ya con los Integration Components instalados, la VM no se elimina del Virtual Server original. Sin embargo, en el improbable caso de que tuviéramos algún problema con el funcionamiento de las aplicaciones de la VM tras la migración, no tendríamos una fácil vuelta atrás. Es importante tener esto en cuenta, sobre todo para VMs que tengan Sistemas Operativos para los que no existan componentes de integración.
    • Usar la opción "Clone", para lo cual la VM debe estar parada, eligiendo como destino el servidor de Hyper-V deseado. El proceso será muy similar al punto anterior, solo que, suceda lo que suceda, la VM original permanece definida e el host origen.
    • Una mezcla de las opciones anteriores, conservadora, y costosa en tiempo. Primeramente clonamos la VM en la Librería de SCVMM2008 y posteriormente migrarla por "drag and drop".

Usemos el método que usemos es importante tener en cuenta los dos puntos que son la causa más frecuente de posibles problemas, si bien SCVMM ya los va a tener también en consideración.

  • Sería conveniente hacer que las VMs de Virtual Server que estuvieran arrancando desde un disco conectado a una controladora virtual SCSI se cambien antes a la controladora IDE
  • Una ver instaladas la última versión de las additions, chequear al HAL dentro del SO antes de ser migradas tal y como se explica en el punto 5 de https://technet.microsoft.com/en-us/library/dd296684.aspx

Automatización del proceso

Aunque los pasos mencionados en el proceso de migración pueden ser en gran parte automatizados llamando a las interfaces COM de Virtual Server y WMI de Hyper-V, no resulta ni inmediato ni sencillo. Resulta mucho mas conveniente apoyarse en las capacidades de scripting en Powershell que ofrecen los cmdlets de SCVMM2008, ya que en ellos ya está implementado dicho trabajo. Por otro lado, tengo mis dudas de que una migración de una infraestructura virtual a otra deba de automatizarse más allá de lo expuesto en el apartado anterior. Existen un buen numero de factores a tener en cuenta, desde en qué momento se realiza, condiciones de los clientes, el estado de la red o procedimientos de prueba adicionales, hasta si es el momento de hacer algún retoque, como por ejemplo, dotar de alta disponibilidad a alguna de las máquinas virtuales.

Supongamos no obstante que contamos con un cierto numero de servidores con Virtual Server, cada uno de ellos ejecutando un cierto número de máquinas virtuales, que se quieren migrar a determinados servidores de Hyper-V. He aquí un esbozo de cómo podríamos automatizar el proceso:

  • Actualizar la versión de Virtual Server: Update-VMHost
  • Instalar las Virtual Machine Additions: Set-VM -InstallVirtualizationGuestServices
  • Clonar VMs: Automatizar esto es lo más complicado ya que supone copiar y crear perfiles de hardware (Get-HardwareProfile y Set-HardwareProfile) y crear una nueva máquina virtual (New-VM) bien el el servidor destino, bien en la biblioteca
  • Migrar VMs: Esto es bastante más sencillo, ya que basta con poco más que una llamada a Move-VM

Para ver como funciona todo esto y construirnos nuestro script a medida, lo mejor es "amagar" la acción en la consola de SCVMM2008 y darle al botón "View Script" para ver lo que hace internamente el producto en casa situación.

Pese a haber hecho parecer que todo es más complicado de lo que realmente es, espero haber dejado claro por lo menos todas las cosas a atener en cuenta antes de abordar una migración de este tipo. Si a alguien se el ocurre alguna otra cosa o detecta algún error o mejora en los procedimientos le agradeceré su ayuda.

Saludos

David Cervigón