コピー中に2つの同一の非スパースファイルのファイルサイズを比較する

コピー中に2つの同一の非スパースファイルのファイルサイズを比較する

私は KVM を使用して、VM をあるホストから別のホストにライブ マイグレーションしています。そのために Web UI をすでに作成しました。今度は、進行状況バーを実装したいと思います。

私の考えは、移行中にソースとターゲットのディスクのファイル サイズを比較することです。

サーバー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進捗状況と速度を確認したい場合は追加してください

関連情報