rsync de una imagen qemu dispersa aumenta el tamaño del disco

rsync de una imagen qemu dispersa aumenta el tamaño del disco

Tengo una imagen qemu sin formato escasa que quiero transferir a otro servidor. qemu-img infome da:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G

Lo transfiero con:

rsync -azhP --sparse origin:/path/to/img/sparse.img .

Ahora, en el servidor de destino tengo:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 40G

Sin embargo, después de ejecutar virt-sparsifynuevamente la imagen copiada, aparece esto:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G

Ambos servidores ejecutan CentOS 7.2 en un sistema de archivos XFS. ¿Entonces qué pasó?

Actualizar:

Después de investigar un poco más, encontré varias publicaciones que indican que rsync no maneja bien archivos dispersos y que es mejor usar una herramienta diferente.como el alquitrán, para transferir archivos dispersos.

Puede realizar un seguimiento de la tartransferencia con rsync --inplace, para asegurarse de que el archivo se haya transferido sin errores, como se explicaaquí.

OtrosoluciónLo que se propuso fue crear un archivo disperso vacío del mismo tamaño en el destino y luego usarlo rsync --inplacepara transferir los datos reales.

No escribí esto como una solución, porque realmente no explica por qué rsync --sparsese comporta de esta manera.

Respuesta1

Apuesto a que esto se debe a las disparidades de FS entre el origen y el destino.

Permítanme explicarme con un ejemplo. Los archivos dispersos son archivos cuyos bloques vacíos (es decir, llenos de 0) no están asignados en el disco. Cuanto más pequeño sea el tamaño del bloque en el FS, más probable será que se encuentre dicho bloque. Por lo tanto, su problema puede deberse a que el tamaño de un bloque es mayor en el destino que en el origen.

Puede que haya otros parámetros XFS que no conozco.

Ver tambiénesta pregunta en ServerFault

Respuesta2

La solución que he encontrado que funciona mejor para mí es ejecutar primero

virt-sparsify imagename

Lleva algo de tiempo. Eso produce una imagen de menor tamaño que informa el mismo tamaño tanto en ls -hcomo du -hen du -h --apparent-size. Pero cuando montas la imagen, informa el tamaño correcto (y crece como se esperaba).

Luego sincroniza esa imagen.

información relacionada