Los snapshots de VMware: Cómo funcionan
Los snapshtos de disco pueden salvar los servidores virtuales de VMware de actualizaciones incorrectas.
Un snapshot (o imagen instantánea) de un disco es una copia del archivo de disco de la máquina virtual (VMDK) en un momento concreto. Conserva el sistema de archivos del disco y la memoria del sistema de nuestra VM, permitiéndonos volver a esa imagen guardada o snapshot en el caso de que algo vaya mal. Los snapshots pueden ser auténticos salvavidas cuando actualizamos o parcheamos aplicaciones y servidores. Este artículo repasa todo lo que hay que saber sobre el uso de los snapshots con VMware, incluyendo su descripción, funcionamiento y técnicas avanzadas.
Espacio en disco utilizado por un snapshot y ritmo de crecimiento
Si hemos creado más de un snapshot en nuestra máquina virtual (VM), entonces tenemos múltiples puntos de restauración disponibles para revertir o volver a la situación anterior. Al crear un snapshot, lo que anteriormente era grabable se convierte en archivo de solo lectura desde ese momento. Utilizando la tecnología in-file delta se crean nuevos archivos que contienen todos los cambios (delta) efectuados a los archivos del disco original.
El tamaño de un archivo snapshot no puede rebasar nunca el tamaño del archivo del disco original. Cada vez que se cambia un bloque del disco, se crea un snapshot en el archivo delta, el cual se actualiza de forma sencilla a medida que se efectúan los cambios. Si cambiamos todos los bloques del disco en el servidor después de hacer un snapshot, la instantánea seguirá teniendo el mismo tamaño que el archivo del disco original. Pero hay un overhead adicional (espacio extra) en el disco que contiene la información utilizada para gestionar los snapshots. El overhead máximo del disco varía y depende del tamaño del bloque del Sistema de Archivos de la Máquina Virtual.
El espacio necesario para el overhead puede causar un fallo en la creación de snapshots si el disco virtual de la VM se acerca al tamaño máximo VMDK para un volumen VMFS. Por ejemplo, si un disco virtual de VM tiene 512 GB en un volumen VMFS con un tamaño de bloque de 2 MB, entonces el tamaño máximo del snapshot sería de 516 GB (512 GB + 4 GB), lo que superaría el tamaño máximo VMDK de 512 GB para el volumen VMFS y, por consiguiente, fallaría la creación del snapshot.
Por tanto, si tiene usted previsto usar instantáneas, deberá crear VMs con un tamaño de disco virtual inferior al tamaño máximo VMDK por la diferencia de tamaño con el máximo overhead (por ejemplo: 512 GB - 4GB = 508 GB). Los archivos del snapshot serán inicialmente pequeños (16 MB), pero irán creciendo a medida que vayamos escribiendo en los archivos del disco de la VM.
Los snapshots crecen por incrementos de 16 MB para ayudar a reducir los conflictos de reserva SCSI. Cuando se hacen peticiones para cambiar un bloque en el disco original, éste se modifica en el fichero delta. Si el bloque de disco previamente cambiado en un archivo delta se vuelve a modificar, no aumenta el tamaño del archivo delta porque, en realidad, sólo se actualiza el bloque existente en dicho fichero.
El ritmo de crecimiento de un snapshot estará determinado por la cantidad de actividad de escritura en disco que se produzca en el servidor. Los servidores que tienen aplicaciones intensivas de escritura en disco, como SQL y Exchange, experimentarán un crecimiento rápido en el tamaño de sus archivos snapshot. Por el contrario, los servidores de contenido esencialmente estático y con poca escritura en disco, como los servidores Web y de aplicaciones, crecerán a un ritmo mucho más lento.
Cuando creamos múltiples snapshots se crean también nuevos ficheros delta y los anteriores ficheros delta quedan en modo de sólo lectura. Si tenemos múltiples snapshots, cada fichero delta puede crecer potencialmente tanto como el archivo del disco original.
Distintos tipos de ficheros snapshot
- --delta.vmdk file: Este es el fichero diferencial que se crea cuando hacemos una instantánea de una VM. Se conoce también como fichero redo-log (fichero de recuperación de datos). El fichero delta es un mapa de bits de los cambios efectuados en el VMDK base, y por ello no puede ser nunca mayor que el VMDK base (con excepción del espacio extra reservado para el overhead del snapshot). Se crea un fichero delta por cada snapshot que tomemos en una VM. También se crea un fichero delta extra de ayuda, donde se guardan todos los cambios del disco al eliminar o revertir un snapshot. Estos archivos son eliminados automáticamente al borrar o revertir el snapshot con Snapshot Manager.
- .vmsd file: Este fichero se utiliza para almacenar metadatos e información sobre los snapshots. Es un fichero en formato texto que contiene información como el nombre que muestra el snapshot, identificador único (UID), nombre del archivo del disco, etc. Inicialmente, se trata de un fichero de 0 bytes hasta que se crea el primer snapshot de una VM. A partir de ese momento va poblando el fichero y actualizándose cada vez que se toman nuevos snapshots.
Este fichero no se limpia completamente después de efectuar las instantáneas. Si borramos un snapshot, el fichero sigue incrementando el último identificador único del snapshot para el snapshot siguiente. - .vmsn file: Este es el archivo de estado del snapshot, donde se guarda el estado de ejecución exacto de una máquina virtual en el momento de hacer dicho snapshot. Este fichero puede ser pequeño o grande, dependiendo de si decidimos conservar la memoria de la VM como parte del snapshot. Si optamos por conservar la memoria de la VM, entonces este fichero tendrá unos pocos megabytes más que la memoria RAM máxima asignada a la VM.
Este archivo es similar al fichero de estado suspendido de VMware (.vmss). Por cada snapshot tomado en la VM se crea un fichero .vmsn; estos ficheros se borran automáticamente al eliminar el snapshot.
¿Cómo crear snapshots?
Podemos crear snapshots con Snapshot Manager en el vSphere Client, o mediante la utilidad de línea de comandos vmware-cmd directamente en la consola ESX Service Console o bien a través de un vSphere CLI. Este comando permite apagar o encender la máquina virtual. También se puede suspender mientras se crea la instantánea. Si la VM está apagada, no tendremos la opción de hacer un snapshot de la memoria de la VM.
Los snapshots pueden ser gestionados mediante el vSphere Client, ya sea conectándose directamente a un servidor ESX o conectándose a vCenter Server. Si decidimos utilizar el interfaz de línea de comandos (CLI), la sintaxis para crear snapshots será la siguiente: vmware-cmd createsnapshot , i.e. vmware-cmd myvm1.vmx createsnapshot snap1 'before upgrade' 1 1.
Las opciones de quiesce (modo inactivo) y memoria son 1 para sí o 0 para no. Si elegimos 1 para la función quiesce, se desactivará la escritura en el sistema de archivos antes de hacer el snapshot. Si elegimos 1 para la función memoria, se hará un snapshot del estado de la memoria de la VM. Si creamos múltiples snapshots, los anteriores se transforman en archivos de sólo lectura una vez creado el nuevo snapshot.
¿Cómo eliminar o revertir snapshots?
Cuando eliminamos todos los snapshots de una VM, todos los ficheros delta creados se fusionan con el archivo de disco VMDK original de la VM y luego son borrados. Si decidimos borrar solo un snapshot concreto, entonces únicamente se fusionará o unirá dicho snapshot con su “snapshot padre”. Si optamos por revertir a un snapshot específico, los actuales estados de disco y de memoria son descartados y la VM vuelve al estado revertido. El snapshot al que revertimos se convierte en el nuevo snapshot padre. No obstante, el snapshot padre no es siempre el tomado más recientemente. Si revertimos a un snapshot más antiguo, éste se convierte entonces en el padre del estado actual de la máquina virtual. El snapshot padre se denota siempre mediante la etiqueta inferior "You are here“ (Usted está aquí)en el Snapshot Manager.
Podemos borrar o revertir a snapshots anteriores mediante el vSphere Client o la utilidad de línea de comandos vmware-cmd. Snapshot Manager en el vSphere Client ofrece más flexibilidad y es más sencillo de usar que el vSphere CLI. Una distinción importante entre la opción "Revert to Snapshot" en el vSphere Client y el Snapshot Manager es que la opción “revertir” nos devuelve al último snapshot tomado, mientras que Snapshot Manager nos da la posibilidad de revertir a un snapshot específico que podemos elegir. Esta opción se denomina "Go to" (Ir a) en Snapshot Manager.
Si utilizamos vmware-cmd, la sintaxis es la siguiente: vmware-cmd removesnapshots, para eliminar todos los snapshots, o bien vmware-cmd revertsnapshot, para revertir la VM al padre del estado "You are here". Este padre puede no ser necesariamente el último snapshot tomado. Sin embargo, si debemos borrar o revertir a un snapshot específico, será necesario utilizar vSphere Client.
Si revertimos a un snapshot que no incluye estado de memoria, el servidor se desconectará, y cuando lo volvamos a conectar utilizará el snapshot anterior. Si nuestro snapshot sí incluye estado de memoria, la VM pausará brevemente y volverá a los estados de disco y memoria del snapshot anterior.