Vergleichen Sie die Dateigröße zwischen zwei identischen, nicht spärlich besetzten Dateien beim Kopieren

Vergleichen Sie die Dateigröße zwischen zwei identischen, nicht spärlich besetzten Dateien beim Kopieren

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 blocksallokierte Teile vorhanden. Die Live-Migration kopiert also immer noch die leeren Teile der Datei, während mein Fortschrittsbalken bereits bei 100 % steht.

duIch 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, -Pwenn Sie Fortschritt und Geschwindigkeit sehen möchten

verwandte Informationen