
Ich habe ein spärliches, rohes QEMU-Image, das ich auf einen anderen Server übertragen möchte. qemu-img info
gibt 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-sparsify
Nach 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.
tar
Sie 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 --inplace
zum Übertragen der eigentlichen Daten zu verwenden.
Ich habe das nicht als Lösung geschrieben, weil es nicht wirklich erklärt, warum rsync --sparse
es 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 -h
die gleiche Größe anzeigt . Wenn Sie das Image jedoch mounten, zeigt es die korrekte Größe an (und wächst wie erwartet).du -h
du -h --apparent-size
Synchronisieren Sie das Bild anschließend mit rsync.