
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 blocks
asignados. 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 du
y 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 -P
si quieres ver el progreso y la velocidad.