我正在使用 KVM 将虚拟机从一台主机实时迁移到另一台主机。我已经编写了一个网络用户界面来做到这一点。现在我想实现一个进度条。
我的想法是在迁移时比较源和目标上的磁盘文件大小。
服务器1:
ls -ls /data/file.raw
858963 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw
服务器2:
ls -ls /data/file.raw
698543 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw
现在,我获取分配的值并以百分比计算。
100 / 858963 * 698543 = 81%
美好的。但有一个问题:
磁盘并不稀疏。文件的总大小为1717926 blocks
.事实上,只有858963 blocks
分配。所以实时迁移仍在复制文件的空白部分,而我的进度条已经达到 100%
我已经尝试过使用du
和stat
。
如何只获取磁盘传输文件的大小?
答案1
按照已经建议的方式使用 virsh migrate,或者利用 rsync 的稀疏文件支持,来自man rsync
:
-S, --sparse Try to handle sparse files efficiently so they take up less space on the destination.
如果您想查看进度和速度,请尝试rsync -ahHS
添加-P