rsync partial qcow2 | größe gleich | md5sum unterschiedlich

Smalltalk
Antworten
slu
Beiträge: 2148
Registriert: 23.02.2005 23:58:47

rsync partial qcow2 | größe gleich | md5sum unterschiedlich

Beitrag von slu » 18.10.2023 14:13:01

Ich experimentiere derzeit mit einer schnellen Sicherung für große Dateien ~ 500GB, in diesem Fall qcow2 Images.

Durch diesen Artikel [1] bin ich auf die Möglichkeit gestoßen nur die Änderungen zu übertragen, das ist nämlich kein rsync Standard!
Das funktioniert auch hervorragend, es wurde in diesem Beispiel 268 MB der 23 GB großen Datei übertragen, ls zeigt die selbe Größe
an, aber die md5sum unterscheidet sich.

Vermutlich liegt das an den rsync Optionen (--partial --inplace --append), hat jemand eine Idee woher das technisch kommt?

KVM Host:

Code: Alles auswählen

ls -l
23810015232 Oct 18 13:57 wintest.qcow2
md5sum
d77979a048ddc0ac375c9dfe820992b8  wintest.qcow2
Rsync Sicherung:

Code: Alles auswählen

rsync -av --partial --inplace --append --progress wintest.qcow2 kvm@backupserver:/mnt/disk/test
sending incremental file list
wintest.qcow2
 23,810,015,232 100%  288.51MB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 268,435,544 bytes  received 35 bytes  178,957,052.67 bytes/sec
total size is 23,810,015,232  speedup is 88.70

Backup Server:

Code: Alles auswählen

ls -l
23810015232 Oct 18 13:57 wintest.qcow2
md5sum
e56276c20bb49e456205a750f4ebc0e6  wintest.qcow2
Beim schreiben ist mir die Lösung gekommen, ls -l ist zwar gleich aber das du -s unterscheidet sich, damit auch die md5sum.
Ich denke das hat seine Richtigkeit, falls jemand Gedanken dazu hat immer her damit.


[1] https://fedoramagazine.org/copying-larg ... nceptions/
Zuletzt geändert von slu am 19.10.2023 11:13:41, insgesamt 1-mal geändert.
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: rsync partial qcow2 | größe gleich | md5sum unterschiedlich

Beitrag von JTH » 18.10.2023 14:52:38

slu hat geschrieben: ↑ zum Beitrag ↑
18.10.2023 14:13:01
Durch diesen Artikel [1] bin ich auf die Möglichkeit gestoßen nur die Änderungen zu übertragen, das ist nämlich kein rsync Standard!
Ähm, doch, das Übertragen nur von Deltas ist – bei Übertragung übers Netzwerk, wie du es tust – absolut das Standardverhalten von rsync. Man müsste das Übertragen nur von Deltas in deinem Fall explizit abschalten:
man rsync hat geschrieben: --whole-file, -W
This option disables rsync's delta-transfer algorithm, which causes all transferred files to be sent whole. […] This is the default [only!] when both the source and destination are specified as local paths […]
Siehe auch Kommentare unter dem verlinkten Artikel. Nur bei Synchronisierung rein auf dem lokalen System werden normalerweise einfach ganze Dateien kopiert.

Was du bei deinem Aufruf allerdings mit --inplace vermeidest, ist ein Kopieren in eine temporäre Datei, die abschließend die alte Datei ersetzt. (--partial ist automatisch gesetzt, wenn man --inplace benutzt; also eigentlich überflüssig.)


Ich könnt mir vorstellen, dass --append hier eher dein Problem oder zumindest ein Risiko ist/war:
man rsync hat geschrieben: --append
This special copy mode only works to efficiently update files that are known to be growing larger where any existing content on the receiving side is also known to be the same as the content on the sender. The use of --append can be dangerous if you aren't 100% sure that all the files in the transfer are […] growing files.

Rsync updates these growing file in-place without verifying any of the existing content in the file (it only verifies the content that it is appending).
(Hervorhebung zum Teil meine.) Das würde auch ganz gut unterschiedliche Checksummen erklären.

Nachtrag:
Vielleicht wäre die Option --sparse etwas fürs Kopieren von qcows? Der verlinkte Artikel ist da veraltet, inzwischen kann man --inplace und --sparse zusammen benutzen,
Manchmal bekannt als Just (another) Terminal Hacker.

slu
Beiträge: 2148
Registriert: 23.02.2005 23:58:47

Re: rsync partial qcow2 | größe gleich | md5sum unterschiedlich

Beitrag von slu » 18.10.2023 15:52:17

Danke für dein Beitrag.

Ich hab das jetzt Mal probiert, er überträgt auch nur eine kleine Menge, braucht aber 4:32 Minuten.

Code: Alles auswählen

rsync -av --partial --inplace --sparse --progress wintest.qcow2 vmbackup@backupserver:/mnt/disk/test
sending incremental file list
wintest.qcow2
 24,017,371,136 100%   84.03MB/s    0:04:32 (xfr#1, to-chk=0/1)

sent 345,132,776 bytes  received 1,454,371 bytes  1,240,025.57 bytes/sec
total size is 24,017,371,136  speedup is 69.30
Jetzt bin ich mir wieder unsicher, aber die Warnung von --append sollte man tatsächlich genauer betrachten.

[AABBCCDDEE] -> [AABBCCDD] + [EE] müsste sicher sein.

Kann es aber auch so etwas in der qcow2 geben?
[AAYYCCDDEEFF] -> [AABBCCDDEE] + [FF]
Wird dann [AAYYCCDDEEFF] auf dem Backup daraus oder [AABBCCDDEEFF]

Edit:
Die Gefahr ist wohl das die Datei übersprungen wird wenn sie nicht größer wird, das ist bei einer vm quasi nicht der Fall.
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: rsync partial qcow2 | größe gleich | md5sum unterschiedlich

Beitrag von JTH » 18.10.2023 22:28:28

slu hat geschrieben: ↑ zum Beitrag ↑
18.10.2023 15:52:17
Kann es aber auch so etwas in der qcow2 geben?
[AAYYCCDDEEFF] -> [AABBCCDDEE] + [FF]
Wird dann [AAYYCCDDEEFF] auf dem Backup daraus oder [AABBCCDDEEFF]
AAYYCCDDEEFF, die Daten sind also kaputt. Siehe das allerletzte Beispiel unten.

slu hat geschrieben: ↑ zum Beitrag ↑
18.10.2023 15:52:17
Edit:
Die Gefahr ist wohl das die Datei übersprungen wird wenn sie nicht größer wird, das ist bei einer vm quasi nicht der Fall.
Puh, den letzten Satz halte ich aber für eine seehr mutige Vermutung. Warum sollte sich in einer qcow-Datei nicht mal etwas „am Anfang“ ändern? Falls das gar nicht möglich ist, müsste die Datei ja beim nachträglichen Hineinschreiben zwangsläufig ins Unendliche Wachsen.

Ich wäre hier wirklich sehr, sehr vorsichtig mit dieser Option --append. Mal einfach mit Textdateien ausprobiert:

Code: Alles auswählen

#!/bin/bash

cat_files()
{
	for f in src/f dest/f; do
		echo "### $f:"
		cat "$f"
		echo
	done
}

tmpdir=$(mktemp -d) || exit
trap "rm -r '$tmpdir'" EXIT HUP INT TERM
cd "$tmpdir" || exit
mkdir src dest

echo -e "# For a changed but same-size file:\n"
echo -n "AYC" >src/f

echo "## Without --append:"
echo -n "ABC" >dest/f
rsync -Iir src/ dest/
cat_files

echo -e "\n## With --append:"
echo -n "ABC" >dest/f
rsync -Iir --append src/ dest/
cat_files

echo -e "\n# For a grown file:\n"
echo -n "ABCD" >src/f

echo "## Without --append:"
echo -n "ABC" >dest/f
rsync -Iir src/ dest/
cat_files

echo -e "\n## With --append:"
echo -n "ABC" >dest/f
rsync -Iir --append src/ dest/
cat_files

echo -e "\n# For a changed and grown file:\n"
echo -n "AYCD" >src/f

echo "## Without --append:"
echo -n "ABC" >dest/f
rsync -Iir src/ dest/
cat_files

echo -e "\n## With --append:"
echo -n "ABC" >dest/f
rsync -Iir --append src/ dest/
cat_files
Erwartete und befürchtete Ausgabe:

Code: Alles auswählen

# For a changed but same-size file:

## Without --append:
>f..T...... f
### src/f:
AYC
### dest/f:
AYC

## With --append:
### src/f:
AYC
### dest/f:
ABC

# For a grown file:

## Without --append:
>f.sT...... f
### src/f:
ABCD
### dest/f:
ABCD

## With --append:
>f.sT...... f
### src/f:
ABCD
### dest/f:
ABCD

# For a changed and grown file:

## Without --append:
>f.sT...... f
### src/f:
AYCD
### dest/f:
AYCD

## With --append:
>f.sT...... f
### src/f:
AYCD
### dest/f:
ABCD
Der letzte Fall ist der gefährliche. Er ist bei so einer ganz simplen Textdatei zwar blöd, aber keine Katastrophe. Bei komplizierteren Textdateien oder gar Binärdateien (wie qcow) kannst du die Zieldatei danach sehr wahrscheinlich wegschmeißen.
Manchmal bekannt als Just (another) Terminal Hacker.

slu
Beiträge: 2148
Registriert: 23.02.2005 23:58:47

Re: rsync partial qcow2 | größe gleich | md5sum unterschiedlich

Beitrag von slu » 19.10.2023 11:13:11

JTH hat geschrieben: ↑ zum Beitrag ↑
18.10.2023 22:28:28
Der letzte Fall ist der gefährliche. Er ist bei so einer ganz simplen Textdatei zwar blöd, aber keine Katastrophe. Bei komplizierteren Textdateien oder gar Binärdateien (wie qcow) kannst du die Zieldatei danach sehr wahrscheinlich wegschmeißen.
Wow, vielen Dank für das Script und den Test, auf die Idee wäre ich so nicht gekommen! :THX: :hail:

Ich sehe schon, das --append ist extrem gefährlich, in dem verlinkten Beitrag wird da kein Wort erwähnt.
Leider stehe ich damit wieder am Anfang von meinem Problem, 300 GB qcow2 über VDSL zu sichern. 8O
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

Antworten