comparar el tamaño del archivo entre dos archivos idénticos no dispersos mientras se copia

comparar el tamaño del archivo entre dos archivos idénticos no dispersos mientras se copia

Estoy usando KVM para migrar en vivo máquinas virtuales de un host a otro. Ya escribí una interfaz de usuario web para hacer eso. Ahora quiero implementar una barra de progreso.

Mi idea es comparar el tamaño del archivo del disco en el origen y en el destino mientras se migra.

Servidor 1:

ls -ls /data/file.raw
858963 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw

Servidor2:

ls -ls /data/file.raw
698543 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw

Ahora tomé el valor asignado y lo calculé en porcentaje.

100/858963 * 698543 = 81%

Bien. Pero hay un problema:

El disco no es escaso. El tamaño total del archivo es 1717926 blocks. En realidad, sólo hay 858963 blocksasignados. Entonces, la migración en vivo sigue copiando las partes vacías del archivo mientras mi barra de progreso ya está al 100%.

Ya probé con duy stat.

¿Cómo obtener sólo el tamaño del archivo transferido del disco?

Respuesta1

Utilice virsh migrar como ya se sugirió, o aproveche la compatibilidad con archivos dispersos de rsync, desde man rsync:

-S, --sparse Try to handle sparse files efficiently so they take up less space on the destination.

Prueba rsync -ahHS, agrega -Psi quieres ver el progreso y la velocidad.

información relacionada