
Ich verwende KVM, um VMs live von einem Host auf einen anderen zu migrieren. Ich habe dafür bereits eine Web-Benutzeroberfläche geschrieben. Jetzt möchte ich einen Fortschrittsbalken implementieren.
Meine Idee ist, während der Migration die Dateigröße der Festplatte auf der Quelle und auf dem Ziel zu vergleichen.
Server 1:
ls -ls /data/file.raw
858963 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw
Server2:
ls -ls /data/file.raw
698543 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw
Nun habe ich den zugewiesenen Wert genommen und in Prozent umgerechnet.
100 / 858963 * 698543 = 81%
Gut. Aber es gibt ein Problem:
Die Festplatte ist nicht spärlich belegt. Die Gesamtgröße der Datei beträgt 1717926 blocks
. Tatsächlich sind nur 858963 blocks
allokierte Teile vorhanden. Die Live-Migration kopiert also immer noch die leeren Teile der Datei, während mein Fortschrittsbalken bereits bei 100 % steht.
du
Ich habe schon mit und herumprobiert stat
.
Wie erhalte ich nur die übertragene Dateigröße der Festplatte?
Antwort1
Verwenden Sie virsh migrate wie bereits vorgeschlagen, oder nutzen Sie die Sparse-Files-Unterstützung von rsync von man rsync
:
-S, --sparse Try to handle sparse files efficiently so they take up less space on the destination.
Probieren Sie es aus rsync -ahHS
, fügen Sie hinzu, -P
wenn Sie Fortschritt und Geschwindigkeit sehen möchten