Instantáneas de máquinas virtuales

Una instantánea (snapshot) nos ofrece la funcionalidad muy útil de guardar el estado de una máquina virtual (MV) en un momento dado, permitiendo volver a ese estado más adelante.

Tipos de instantáneas:

  • Instantáneas en caliente (live snapshots):
    • Se realizan con la máquina virtual encendida.
    • Se guarda el estado de la memoria RAM (estado en ejecución), del disco (estado del sistema de archivos) y el estado del dispositivo.
    • Permiten volver exactamente al mismo punto de ejecución.
    • Requieren que el almacenamiento permita esta funcionalidad, por ejemplo con ficheros de imágenes de disco requiere el formato qcow2.
    • Son más complejas y pueden causar un pequeño impacto en el rendimiento mientras se crean, ya que se pausa la máquina virtual.
  • Instantáneas en frío (offline snapshots):
    • Se hacen con la máquina virtual detenida.
    • Solo se guarda el estado del disco (y la configuración XML si se indica).
    • No se guarda el contenido de la memoria RAM.
    • Son más rápidas y seguras de hacer, porque no hay riesgo de inconsistencia.
    • También requiere que el almacenamiento acepte los snapshots.

Ejemplo de instantánea

Gestión de instantáneas con virsh

Hemos hecho un cambio significativo en nuestra máquina otra-debian12 (en el ejemplo hemos creado un directorio).

usuario@kvm~$ virsh start otra-debian12
usuario@kvm~$ virsh console otra-debian12
...
usuario@debian~$ mkdir importante

Ahora es el momento de crear una instantánea, de esta manera podremos volver a este estado en un momento futuro:

usuario@kvm:~$ virsh snapshot-create-as otra-debian12 --name instantánea1 --description "Creada carpeta importante" --atomic

Se recomienda utilizar la opción --atomic para evitar cualquier corrupción mientras se toma la instantánea. Para ver las instantáneas que tiene creada la máquina podemos ejecutar:

usuario@kvm:~$ virsh snapshot-list otra-debian12
 virsh snapshot-list otra-debian12
 Name           Creation Time               State
-----------------------------------------------------
 instantánea1   2025-xx-xx 18:10:57 +0200   running

También podemos ver las instantáneas de un fichero de imagen con la herramienta qemu-img (la máquina debe estar parada):

usuario@kvm:~$ virsh shutdown otra-debian12
usuario@kvm:~$ sudo qemu-img info /var/lib/libvirt/images/debian12-backing.qcow2
image: /var/lib/libvirt/images/debian12.qcow2
...
Snapshot list:
ID        TAG               VM SIZE                DATE     VM CLOCK     ICOUNT
1         instantánea1     284 MiB 2025-xx-xx 18:10:57 00:00:11.555      
...

Los snapshot son otro recurso de libvirt cuya definición se guarda en formato XML. Podríamos usar el comando snapshot-dumpxml para ver su definición. Tenemos más comandos relacionados con las instantáneas: para obtener información de una instantánea usamos snapshot-info, snapshot-delete para borrar una instantánea, …

Si hemos tenido un problema en nuestra máquina y hemos eliminado nuestra carpeta importante:

usuario@kvm~$ virsh start otra-debian12
usuario@kvm~$ virsh console otra-debian12
...

usuario@debian~$ rm -rf importante

Podemos volver al estado de una determinada instantánea ejecutando:

usuario@kvm:~$ virsh snapshot-revert otra-debian12 instantánea1

Y comprobamos que hemos vuelto al estado de la máquina donde teníamos creada la carpeta:

usuario@kvm~$ virsh console otra-debian12
...

usuario@debian~$ ls importante