Instantáneas de invitados de KVM con libvirt

Instantáneas de invitados de KVM con libvirt
Las máquinas virtuales tienen muchos casos de uso, uno de los cuales es la capacidad de las máquinas virtuales que se utilizarán como máquinas de prueba. Puede experimentar dentro de una VM, aplicar parches y probar actualizaciones antes de hacer lo mismo en sus sistemas de producción o en su estación de trabajo. También puede usar máquinas virtuales desechables, que carecen de datos personales o confidenciales, para las pruebas de malware como lo hace la mayoría de la comunidad de seguridad, solo asegúrese de que la red de VM esté aislada de su host y LAN.

Sin embargo, es agotador reinstalar el sistema operativo dentro de su VM una y otra vez. Obstaculiza su flujo de trabajo y, por lo tanto, necesita una forma confiable de:

  1. Tome una instantánea de su VM en cualquier momento dado.
  2. Tener un mecanismo para usar la instantánea para revertir su VM a un estado de trabajo previamente.

Anteriormente he discutido cómo funcionan las instantáneas en Virtualbox y esta vez quería discutir instantáneas dentro de Libvirt. Usaré qemu-kvm como hipervisor de backend para mi instalación de libvirt. Su caso puede diferir, pero la funcionalidad y la interfaz general no deberían ser muy diferentes, ya que Libvirt hace todo lo posible para estandarizar la interfaz frontend.

Si no está familiarizado con Libvirt y Qemu-KVM, aquí hay una guía sobre cómo puede configurar KVM en Debian.

Creando una instantánea

Hay varias formas con las que puede tomar y administrar instantáneas de su VM. Aplicaciones GUI como Virt-Manager y Ovirt ofrecen la funcionalidad e incluso puede escribir scripts personalizados para interactuar con la API de Libvirt que administra toda la gama de instantáneas para usted.

Sin embargo, usaré la interfaz de línea de comandos Virsh para mostrar cómo puede administrar sus máquinas virtuales y sus instantáneas. Esta utilidad viene con casi todas las instalaciones de libvirt predeterminadas y debería estar disponible en una amplia gama de distribuciones.

Para los comandos a continuación, asegúrese de reemplazar el nombre de mi VM, VM1, con el nombre real de su VM. Libvirt a menudo se refiere a la máquina y los contenedores virtuales como Dominio. Entonces, si ve un mensaje de error que sugiere, diga: "Especifique el nombre de dominio", debe proporcionar el nombre de su VM como uno de los argumentos al comando. Use el siguiente comando para enumerar todas las máquinas virtuales bajo la gerencia de Libvirt.

Lista de $ Virsh -todo

Para tomar una instantánea de una VM, simplemente ejecute:

$ virsh snapshot-create vm1

Y para enumerar todas las instantáneas de una VM determinada use el comando:

$ virsh snapshot-list vm1
Estado de tiempo de creación de nombre
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 Running

Puedes ver que se crea la instantánea. Por defecto, el nombre de la instantánea es su marca de tiempo de creación (el número de segundos desde la época unix). La columna de tiempo de creación muestra el momento de la creación de manera legible humana y la columna estatal muestra el estado de la VM cuando fue instantáneo. A medida que esta VM se estaba ejecutando, el estado de la instantánea también está 'en ejecución', pero eso no significa que la instantánea en sí se esté ejecutando. No cambiará con el tiempo. Esta característica también se conoce como instantánea en vivo y es bastante valiosa, ya que le permite tomar una instantánea de su VM sin ningún tiempo de inactividad. Los invitados de KVM, al menos, funcionan bien con instantáneas en vivo.

Ciertas cargas de trabajo, sin embargo, requieren que se detenga de la VM antes de que esté instantánea. Esto asegura que los datos en la instantánea sean consistentes y no hay un archivo a medias o datos faltantes. Si la carga de trabajo que se ejecuta en su VM tiene una alta IO, probablemente necesite apagar la VM antes de crear la instantánea. Creemos uno de este camino.

$ Virsh SHUCEDOWN VM1

El dominio VM1 está siendo cerrado

$ virsh snapshot-create vm1

Instantánea de dominio 1556533868 creada

root@deb: ~# virsh snapshot-list vm1
Estado de tiempo de creación de nombre
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 Running
1556533868 2019-04-29 16:01:08 +0530 CAURADO
$ Virsh Start VM1
Dominio vm1 comenzó

Si desea nombrar las instantáneas algo más que la marca de tiempo, use el comando:

$ virsh snapshot-create-as vm1 –name snap1
Estado de tiempo de creación de nombre
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 Running
1556533868 2019-04-29 16:01:08 +0530 CAURADO
Snap1 2019-05-02 22:27:48 +0530 Running

Obviamente, no tiene que nombrarlo Snap1, puede elegir cualquier nombre conveniente.

Volviendo de una instantánea

Tomar una instantánea no sirve de nada si no puede volver a ella. En caso de que debe volver a una instantánea, simplemente use el comando:

$ virsh snapshot-revert $ vmname $ snapshot-name

El nombre puede ser la marca de tiempo o el nombre asignado por el usuario dado a la instantánea.

Asegúrese de que no haya datos importantes en su VM actual, o si hay algo de importancia, luego tome una instantánea de su VM actual y luego vuelva a una instantánea más antigua.

Beneficios de QCOW2

El mecanismo de copia en escritura de los archivos QCOW2 permite que cada instantánea tome un espacio muy pequeño. El espacio tomado por una instantánea aumenta con el tiempo a medida que la imagen en ejecución diverge desde la instantánea. Entonces, siempre y cuando no reescriba muchos datos, sus instantáneas tomarán solo unos pocos MB de almacenamiento.

También significa que las instantáneas también son muy rápidas. Desde entonces, el mecanismo de copia en escritura solo necesita marcar la marca de tiempo cuando se tomó la instantánea. Los bloques de datos escritos en el archivo QCOW2 después de la instantánea no pertenecen a él, pero los más antiguos sí lo hacen. Es tan simple como eso. Mi banco de pruebas utiliza un disco duro de 5400 rpm que de ninguna manera está en la cima de su rendimiento, todavía lleva menos de unos segundos tomar una instantánea en vivo de una VM en este disco.

Conclusión

Al igual que con la mayoría de las utilidades relacionadas con Libvirt y Virsh, la funcionalidad de Snapshot proporciona una interfaz muy flexible con características de grado empresarial como instantáneas en vivo junto con los beneficios del mecanismo de copia en escritura.

La convención de nomenclatura predeterminada también facilita que los scripts de shell eliminen periódicamente las instantáneas antiguas y las reemplace con las más nuevas. Uno de mis artículos más antiguos sobre las instantáneas de OpenZFS y las políticas de instantáneas también se pueden aplicar para su invitado de KVM. Para obtener más información sobre la utilidad de instantánea de Virsh, puede usar el comando de instantánea de ayuda de Virsh. La página de ayuda es muy pequeña, precisa y fácil de entender.