Backup script para VMware Server

[Por jmarior el 4 Marzo, 2008 | 490 lecturas | Archivado en maquina virtual, virtualización, virtualizados]

BackupUna de las ventajas de desplegar un entorno de máquinas virtuales es la facilidad de realizar copias de seguridad de los sistemas virtualizados simplemente copiando la carpeta que contiene los ficheros que definen la máquina virtual. La dificultad añadida es que los ficheros están bloqueados por el hipervisor y una simple copia del directorio de la máquina virtual en marcha nos dará como resultado un sistema corrupto. Los hipervisor de serie alta y las soluciones de backup profesionales cubren esta problemática, pero en el caso de soluciones de virtualización gratuítas como VMware server hay que buscarse la vida de otro modo.

Mi solución ha sido crear un script que copia el directorio de la máquina virtual sobre otro disco duro, esto favorece la velocidad y nos da la seguridad de que si se avería el dico original la copia de seguridad nos queda a salvo.

A grandes rasgos, los pasos a seguir son

  1. Instalar las VMware Tools en el sistema operativo de la máquina virtualizada (sólo una vez)
  2. Detener (o pausar) la máquina virtual por línea de comandos
  3. Hacer una copia del directorio
  4. Iniciar la máquina virtual por línea de comandos
  5. Otras operaciones copmo comprimir, copiar a otro destino, borrar copias antiguas…

Aquí, el comando clave es vmware-cmd que forma parte de la VMware Scripting API. Se trata de una utilidad que nos permite pausar o detener la máquina virtual desde el sistema operativo de anfitrión para realizar copias de seguridad consistentes.

Existe una pequeña diferencia entre pausar y detener la máquina virtual. Al pausar estamos congelando el sistema operativo virtualizado de forma que nos ahorramos los procesos de shutdown y start del sistema. Al detener e iniciar estamos pasando por todos los procesos comunes que conllevan esta operaciones en nuestro sistema operativo virtualizado. La práctica recomendada por VMware si queremos contar con la posibilidad de restaurar la máquina virtual en otro hipervisor es detener. Si esto no es un requisito podemos ahorrar tiempo con la opción de pausar.

En mi caso el tiempo de copia de seguridad con shutdown y restart de una máquina virtual Ubuntu Server de 10GB en disco es inferior a 4 minutos. Aunque esta es una apreciación muy relativa al hardware disponible y recursos del sistema anfitrión.

Os dejo mi modesto script VMware VM backup for LINUX v0.2 perfecto para programar el backup en el crontab. He pensado que se pueden introducir mejoras como la compresión posterior para ahorrar espacio, mantener un anillo de copias, enviar la copia a otra máquina, salida a un log y un sistema de notificaciones… pero todo se andará.

Comentarios

3 Comentarios to “Backup script para VMware Server”

  1. Marcelo Castillo on Marzo 24th, 2008 22:39

    Muchas gracias por la explicación, muy bueno

  2. Felipe Escamilla on Junio 16th, 2008 23:31

    Muy buena explicación

    Me surge una pregunta:

    ¿Se deben respaldar sólo los discos virtuales o pueden ser incluídos también los archivos de configuración(incluyendo el de suspensión?

    Esto, pensando en que si necesito restaurar el respaldo desde hardware distinto, especialmente, la CPU.

    Muchas gracias

  3. jmarior on Junio 17th, 2008 6:52

    VMWare (y yo mismo) recomienda copiar todos los archivos de la VM en estado ‘detenido’ especialmente si el caso es que se va a restaurar en una instancia del hipervisor de otra máquina anfitrión. Además, los archivos de configuración ocupan apenas unos KB en comparación con los GB de los volumenes del disco duro virtual.

    Si tu idea es tener preparado otro anfitrión y respaldar sólo los ficheros del VHDD, sólo sería válida en caso de que el número de volúmenes del disco duro virtual fuese el mismo, porque estos se declaran en el fichero de condifuración.

    Más ideas para mejorar el script:

    Aunque el script copia todos los archivos del directorio contenedor de la máquina virtual cada vez, he pensado en mejorarlo haciendo sólo una copia diferencial - vía rsync - a un directorio espejo a partir del cual haría una copia completa del día en cuestión una vez reiniciada la máquina virtual.

    Los tiempos de copia en mi caso rondan tiempos de 1 a 5 min pero me gustaría minimizar el tiempo en que la VM está apagada.

Deja un comentario