复制时比较两个相同的非稀疏文件之间的文件大小

复制时比较两个相同的非稀疏文件之间的文件大小

我正在使用 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%

我已经尝试过使用dustat

如何只获取磁盘传输文件的大小?

答案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

相关内容