
Estou usando o KVM para migrar VMs ao vivo de um host para outro. Já escrevi uma interface web para fazer isso. Agora quero implementar uma barra de progresso.
Minha ideia é comparar o tamanho do arquivo do disco na origem e no destino durante a migração.
Servidor1:
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
Agora peguei o valor alocado e calculei em porcentagem.
100/858963 * 698543 = 81%
Multar. Mas há um problema:
O disco não é escasso. O tamanho total do arquivo é 1717926 blocks
. Na verdade, existem apenas 858963 blocks
alocados. Portanto, a migração ao vivo ainda está copiando as partes vazias do arquivo enquanto minha barra de progresso já está em 100%
Eu já tentei com du
e stat
.
Como obter apenas o tamanho do arquivo transferido do disco?
Responder1
Use virsh Migrate como já sugerido ou aproveite o suporte a arquivos esparsos do rsync em man rsync
:
-S, --sparse Try to handle sparse files efficiently so they take up less space on the destination.
Experimente rsync -ahHS
, adicione -P
se quiser ver o progresso e a velocidade