Despliegue de Maquinas Virtuales usando SysPrep y discos de diferenciacion

Siguiendo al hilo de la Virtualización, hay una situación que todo el mundo encuentra tarde o temprano: Necesitamos desplegar unas cuantas máquinas virtuales de laboratorio, y no podemos permitirnos el lujo de esperar durante 1 hora a que terminen de instalarse y configurarse. Las necesitamos para ayer. Y necesitamos que sean instalaciones “limpias”. ¿Qué hacer?

A nuestro rescate vienen dos herramientas poderosas: SysPrep y los Discos de Diferenciación. Antes de entrar en materia, vamos a resumir qué es y qué hace cada una de ellas:

¿Qué es SysPrep (System Preparation)?

Es una herramienta que prepara una instalación de Windows (tanto de escritorio como Windows Server) para crar una imagen, permitiéndonos captuar una instalación personalizada. Esto lo consigue eliminando información específica del PC donde se ha instalado, “Generalizando” la instalación para que así se pueda instalar en otro PC. Con SysPrep se puede configurar el PC para que arranque la “Out-of-Box Experience” para que se encienda como si Windows estuviese recién instalado. Incluso se puede especificar un archivo xml con los datos necesarios para realizar una instalación desatendida. Básicamente, es la herramienta que los fabricantes de portátiles usan para llenar con su software una instalación de Windows, y luego la generalizan para que podamos personalizarla como si estuviese recién instalada.

¿Qué es un Disco de diferenciación?

Es un disco virtual que se utiliza para aislar cambios en los datos del disco o del sistema operativo instalado en él, manteniéndolos en un archivo separado. En este caso, un disco diferencial consta de dos partes: El disco “base”, que se utiliza como datos origen que no van a cambiar (por ejemplo una instalación actualizada de Windows), y el disco de diferenciación, que es básicamente un disco de tamaño dinámico en el que se escriben todos los nuevos datos. Una cualidad de especial interés es que podemos crear múltiples discos de diferenciación a partir del mismo disco base.

Ahora que ya tenemos las piezas, y sabemos cómo funcionan, nos toca ir encajándolas paso a paso, para montar un sistema de despliegue de máquinas virtuales rápido (tienes una máquina funcionando en unos 5 minutos) y eficiente (en uso de disco). ¡Pero para eso tenemos que empezar desde el principio!

Generación de una Imagen Maestra:

  1. Éste es el primer paso, y el más critico. Si queremos tener una máquina “fresca”, tendremos que elegir entre utilizar un disco VHD de una máquina virtual ya existente, o hacer una instalación nueva de una máquina virtual. Recomiendo usar Windows Server 2012 R2, aunque cualquier tipo de instalación de Windows nos vale, dependiendo del uso que queramos darle. Para ahorrar aún más espacio, el disco VHD que vamos a utilizar va ser del tipo dinámico.
  2. Una vez hayamos instalado Windows, lo podemos personalizar con el software “básico” que necesitemos. Por ejemplo, si queremos máquinas virtuales para monitorizar el tráfico de red, podemos instalar Network Monitor ahora.
  3. Generalizar el disco: Cuando ya tenemos una instalación de Windows preparada con todo el software que necesitamos, es el momento de usar SysPrep para generalizar el disco. Esto lo podemos conseguir con el siguiente comando: Sysprep /generalize /oobe /shutdown . Estos parámetros especifican que se “generalize” la imagen (eliminando drivers de dispositivos, información específica de la máquina, etc), que se active el “oobe” (los diálogos de “primer inicio de sesión”), y que se apague la máquina, dejando todo como si Windows estuviese recién instalado y listo para empezar a configurar.Sysprep
  4. En este paso, es posible utilizar un archivo XML para hacer una “generalización desatendida”, que nos permite personalizar cosas como el idioma por defecto, o incluso la clave de activación de la máquina.
  5. Una vez SysPrep termina de generalizar la máquina, ésta se apaga… y ¡listo! Ya tenemos un VHD con una instalación de Windows personalizada y generalizada, que podemos usar como Imagen Maestra para crear nuevas máquinas virtuales.

 

Crear una Nueva Máquina Virtual con disco de diferenciación

  1. Lo primero que necesitamos es una nueva máquina virtual, con el nombre y características que deseemos, teniendo en cuenta que esta máquina se debe crear SIN disco duro.
  2. Una vez creada, ya podemos proceder a editar la máquina virtual, y añadir un nuevo disco.
  3. En el asistente de creación de nuevo disco duro, elegimos que sea del tipo “Diferenciación”. Ésta es la parte importante del proceso. Cuando estamos creando una máquina virtual, no podemos elegir este tipo de disco duro, y por eso debemos crearla sin disco, para luego añadirlo con esta tipología.
    diferenciacion
  4. Especificamos el nombre del disco y dónde guardarlo.
    diferenciacion2
  5. Finalmente, especificamos cuál será el disco VHD que servirá de imagen maestra para nuestro disco de diferenciación.
    diferenciacion3
  6. ¡Listo! Ya tenemos una máquina virtual con un disco de diferenciación preparada para arrancar.

Con todo esto, ya podemos empezar a desplegar máquinas de forma rápida y sencilla. En ocasiones nos podemos encontrar con que en vez de necesitar desplegar una máquina, simplemente alguien nos pide “un VHD con Windows”, en tal caso, simplemente podemos pasarle una copia de la imagen maestra, para que puedan usar ese VHD en cualquier proyecto o experimento.

¡Y eso es todo por el momento! Para más información y curiosidades, os remito a la sección de Bonus 😉

Bonus:

  • Para los amantes de PowerShell, podemos crear un disco de diferenciación desde la shell con el cmdlet: New-VHD –Path “c:VHDsNewDiff.vhdx” –ParentPath “c:VHDsWServerMasterImage.vhdx” –Differencing
  • Una parte fundamental del éxito consiste en NO modificar nunca la imagen maestra. Si esta imagen cambia por cualquier motivo, todos los discos de diferenciación que dependen de esta imagen van a dejar de funcionar. Todos. Sin Excepción.
  • Podemos hacer una imagen maestra, a partir de un disco de diferenciación. Ad Infinitum (bueno, no hasta el infinito). Puede ser útil para crear diferentes versiones de una imagen maestra, por ejemplo, dejando la instalación “limpia” de Windows sin hacer el Sysprep, y usarla para crear diversos discos de diferenciación con diferente software instalado.
  • Hay que tener en cuenta las actualizaciones de Windows. Pasado cierto tiempo (6 meses, 1 año), nos vamos a encontrar con que el volumen de actualizaciones a instalar es lo suficientemente grande como para justificar la generación de una nueva imagen maestra actualizada, e ir decomisionando las máquinas generadas previamente.
  • Yo uso esta técnica para crear un despliegue de laboratorio rápidamente, siempre que necesite hacer algún tipo de experimento. Por ejemplo, si necesito montar un escenario de federación con ADFS, Web Application Proxy y DirSync, estamos hablando del orden de 3 a 5 máquinas virtuales (si creamos granjas de federación con balanceo de carga). Considerando que una instalación estándar de Windows Server 2012R2 consume una media de 6-7 GB de espacio en disco, que ahorramos en cada máquina desplegada con esta técnica, estamos hablando de un ahorro de espacio mínimo de 18 GB, y un ahorro máximo de 35 GB. En un portátil con disco SSD, esta diferencia supone poder montar un escenario totalmente federado con granjas de servidores y balanceo de carga… o un escenario muy sencillo con sólo 3 máquinas virtuales.
  • Sin ir más lejos, CITRIX XenDesktop, hace un uso intensivo de esta técnica para el despliegue “en caliente” de escritorios virtuales a partir de la “Imagen Maestra” de una máquina virtual.
  • Podemos usar un archivo de instalación desatendida a la hora de hacer SysPrep. Esto eliminará algunos pasos a la hora de pasar por el asistente de “Out-Of-Box Experience” cuando encendamos la nueva máquina virtual. Un archivo de ejemplo puede ser este:

0 pensamientos en “Despliegue de Maquinas Virtuales usando SysPrep y discos de diferenciacion”

  1. hola, buen dia
    soy nuevo en el asunto de maquinas virtuales…. el entorno que comentas es con hyperv propio de win8 correcto?

    1. Sí, para las pruebas y capturas de pantalla he usado el Hyper-V disponible con Windows 8 Pro. Por supuesto, todo esto también se puede hacer con cualquier versión de Windows Server 2012 / 2012r2.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *