rsync eines spärlichen QEMU-Images erhöht die Festplattengröße

rsync eines spärlichen QEMU-Images erhöht die Festplattengröße

Ich habe ein spärliches, rohes QEMU-Image, das ich auf einen anderen Server übertragen möchte. qemu-img infogibt mir:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G

Ich überweise es mit:

rsync -azhP --sparse origin:/path/to/img/sparse.img .

Jetzt habe ich auf dem Zielserver:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 40G

virt-sparsifyNach dem erneuten Ausführen des kopierten Images erhalte ich jedoch Folgendes:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G

Auf beiden Servern läuft CentOS 7.2 auf einem XFS-Dateisystem. Was ist also passiert?

Aktualisieren:

Nach einigen weiteren Recherchen fand ich mehrere Beiträge, die darauf hinwiesen, dass rsync mit Sparse-Dateien nicht gut umgehen kann und dass es besser ist, ein anderes Tool zu verwenden,wie Teer, um Sparse-Dateien zu übertragen.

tarSie können die Übertragung mit verfolgen rsync --inplace, um sicherzustellen, dass die Datei fehlerfrei übertragen wurde, wie erläutertHier.

Ein andererLösungDer Vorschlag bestand darin, eine leere Sparse-Datei derselben Größe auf dem Ziel zu erstellen und diese dann rsync --inplacezum Übertragen der eigentlichen Daten zu verwenden.

Ich habe das nicht als Lösung geschrieben, weil es nicht wirklich erklärt, warum rsync --sparsees sich so verhält.

Antwort1

Ich gehe davon aus, dass dies auf FS-Unterschiede zwischen Quelle und Ziel zurückzuführen ist.

Lassen Sie mich das anhand eines Beispiels erläutern. Sparse-Dateien sind Dateien, deren leere Blöcke (d. h. voller 0) nicht auf der Festplatte zugeordnet sind. Je kleiner die Blockgröße auf dem FS ist, desto wahrscheinlicher ist es, dass ein solcher Block gefunden wird. Ihr Problem kann also daran liegen, dass die Blockgröße auf dem Ziel größer ist als auf der Quelle.

Es gibt möglicherweise andere XFS-Parameter, die ich nicht kenne.

Siehe auchdiese Frage auf ServerFault

Antwort2

Die Lösung, die für mich am besten funktioniert, besteht meiner Erfahrung nach darin, zuerst

virt-sparsify imagename

Dauert etwas. Dadurch wird ein kleineres Image erstellt, das sowohl in als auch in ls -hdie gleiche Größe anzeigt . Wenn Sie das Image jedoch mounten, zeigt es die korrekte Größe an (und wächst wie erwartet).du -hdu -h --apparent-size

Synchronisieren Sie das Bild anschließend mit rsync.

verwandte Informationen