Copia de seguridad de ejecutar KVM qcow2 VPS

9

Quiero un método robusto para hacer una copia de seguridad de KVM VPS del archivo qcow2, mientras se ejecuta. Después de buscar durante mucho tiempo, descubrí que podemos usar rsync para la copia de seguridad en vivo. Usé el siguiente comando para rsync:

rsync -avh /vms/base.qcow2 /backup/backup.qcow2

Funcionó correctamente. Pero me temo que puede dañar la imagen de copia de seguridad qcow2 si se realiza una copia de seguridad mientras se cambia el VPS debido a operaciones de escritura y eliminación (como instalar un nuevo software o actualización).

Por lo tanto, hacer una copia de seguridad de la instantánea de VPS en vivo parece una opción más interesante.

Usé los siguientes comandos para hacer una copia de seguridad de ejecutar VPS:

1.Crear instantánea:

qemu-img create -f qcow2 -b base.qcow2 snapshot.qcow2

2.Convertir instantánea en formato de imagen sin formato (.img):

qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Para restaurar VPS:

3.Convierta la imagen en bruto en la imagen qcow2:

qemu-img convert -O qcow2 /backup/backup.img base.qcow2

Entonces podemos iniciar VPS por virsh create base.xmlcomando.

Aunque este método también funciona perfectamente, todavía no estoy seguro de si este es el método adecuado para hacer una copia de seguridad de la ejecución de VPS. Encontré buena documentación sobre los comandos qemu-img aquí y aquí . Pero no mencionaron nada sobre la conversión de instantáneas de VPS en vivo en imágenes sin formato.

¿Qué método es más adecuado para la copia de seguridad de VPS en vivo? ¿Es seguro convertir una instantánea en una imagen sin formato?

Si pudiera obtener buena documentación detallada sobre cómo se comportan los archivos de instantáneas y base en ciertas condiciones, sería muy útil.

Tal vez también podamos convertir la imagen base qcow2 en un archivo de copia de seguridad sin formato en lugar de convertir una instantánea. Por lo tanto, el flujo de comandos será:
1. Crear una instantánea
2. Convertir la base qcow2 en una imagen cruda de respaldo
3. Confirmar los cambios de la instantánea en la imagen base
4. Eliminar la instantánea

Probé esto y funcionó bien en pequeños VPS de 5GB. Pero, ¿hay alguna posibilidad de error o corrupción de VPS cuando el tamaño de VPS es enorme?

Gracias por adelantado...

Bosco D'mello
fuente
2
Esa es una de las razones por las que me gusta que mis máquinas virtuales residan en volúmenes lógicos. Tienen soporte de instantánea inherente.
Halfgaar

Respuestas:

12

Lo único que falta es inmovilizar el sistema de archivos invitado antes de tomar la instantánea, para garantizar que sea coherente. Esto se puede hacer virsh domfsfreezesi está usando libvirtd.

Por ejemplo, el orden de las operaciones es:

# Freeze guest filesystems
virsh domfsfreeze $VM_NAME

# Create snapshot
qemu-img create -f qcow2 -b $VM_NAME.qcow2 snapshot.qcow2

# Thaw guest filesystems
virsh domfsthaw $VM_NAME

# Take backup from snapshot
qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Tenga en cuenta que esto requiere que qemu-guest-agentesté instalado y ejecutándose en la VM. Dependiendo de las opciones de distribución e instalación, este puede o no ser el caso.

El qemu-guest-agenttambién es extensible; puede agregarle scripts para admitir software específico. Por ejemplo, incluye un script de muestra para poner MySQL en un estado consistente.

Michael Hampton
fuente
Lo único que falta esta respuesta es la eliminación de instantáneas después de la copia de seguridad :)
dyasny
2
@ BoscoD'mello A menos que tenga discos duros muy malos, debería ser menos de una fracción de segundo. No vale la pena preocuparse.
Michael Hampton
1
Por desgracia, la instantánea no funcionó para mí. Al intentarlo virsh domfsfreeze $VM_NAME, obtengo permiso denegado en mi sistema de archivos invitado. Mis sistemas de archivos invitados están encriptados, no estoy seguro de que eso importe.
un codificador
2
@ Edward_178118 Depende de si su carga de trabajo puede estar suspendida por una fracción de segundo.
Michael Hampton
2
@ Edward_178118 ¿Operaciones de red de latencia extremadamente baja, tal vez? Nunca me he encontrado con nada que fuera un problema.
Michael Hampton
1

Existe otro enfoque que implica la creación de instantáneas temporales durante la copia de seguridad y su posterior confirmación.

# Create a temporary backup snapshot which records changes during backup
virsh snapshot-create-as vm backup-tmp --disk-only --atomic --quiesce --no-metadata --diskspec sda,file=/tmp/sda_temp.qcow2
# Now the main image is frozen and the changes are going into /tmp/sda_temp.qcow2

# Do your backup here
...

# Now we commit back data from temp snapshot into the main image
virsh blockcommit vm sda --active --pivot
# Remove the temporary snapshot file
rm /tmp/sda_temp.qcow2

Para obtener más información, consulte: https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit

Thuffir
fuente
1
Si necesita su copia de seguridad del disco nuevamente más tarde, que proviene de una máquina virtual en ejecución, ¿cómo lo restauraría? ¿No necesitas también el contenido del carnero para restaurar?
Adrian Zaugg