Los archivos dispersos son (sparse files) una característica muy útil de los sistemas de archivos. Se vuelven muy útiles para almacenar los discos de máquinas virtuales como KVM, Xen, incluso VMWare, pero pueden ser un verdadero problema para hacer copias de seguridad de manera eficiente, especialmente a través de la red.

Afortunadamente, rsync proporciona una manera de copiar de forma inteligente archivos dispersos tanto a nivel local como a través de la red.
El truco es usar las opciones –sparse y –inplace.

Al copiar el archivo por primera vez, lo que significa que no existe en el servidor de destino, use “rsync –sparse”. Esto creará un archivo sparse en el servidor de destino y copiará solo los datos utilizados del archivo sparse.

Cuando el archivo ya existe en el servidor de destino y solo desea actualizarlo, use “rsync –inplace”. Esto solo transmitirá los bloques modificados y también puede agregarse al archivo disperso existente.

Ejemplo:

Copiaremos el archivo de 138G-VMDISK.qcow2 de servidor A al B por medio de rsync con las opciones mencionado s anteriormente.

+--------------------------------+        +--------------------------+                   
|                                |        |                          |                   
|        SERVER-A                |        |                          |                   
|                                ---------|      SERVER B            |                   
|    138G-VMDISK.qcow2           |        |                          |                   
|                                |        |                          |                   
+--------------------------------+        +--------------------------+

Tamaño de archivo:

qemu-img info 138G-VMDISK.qcow2
image: 138G-VMDISK.qcow2
file format: qcow2
virtual size: 138G (148176371712 bytes)
disk size: 81G
cluster_size: 65536

Copiarlo la primera vez, con la opción de “rsync –sparse”

rsync -avP --sparse 138G-VMDISK.qcow2 root@SERVER-B:/data/VMs

Despues de copiar la primera vez, usar la opción de –inplace para transferir solo los datos odificados:

rsync -avP --inplace 138G-VMDISK.qcow2 root@SERVER-B:/data/VMs

Actualización

1.- Es más rápido hacer la trasferencia usando tar en combinación con ssh.

time tar -cvzSf - 138G-VMDISK.qcow2| ssh [email protected] '(tar -C /data/VMs/t2 -xzSf -)'

2.- En entornos de alto ancho de banda es menor usar scp de manera directa.

aurlen@SERVER-A:~/$ time scp 138G-VMDISK.qcow2 root@SERVER-B:/data/VMs/t2
Password:
138G-VMDISK.qcow2 100% 76GB 57.0MB/s 22:38

real 22m39.260s
user 15m12.445s
sys 4m36.581s