Snapshot Größe bei Dateiänderungen

Skywalker

Dabbler
Joined
Dec 30, 2022
Messages
16
Hallo Zusammen,

ich habe eine Frage, auf die ich trotz Suche bislang keine Antwort gefunden haben.
Ich habe ein Word-File (zum Test) von 400MB auf meinem Dataset abgelegt. Dann erstelle ich einen Snapshot, der zu dem Zeitpunkt keinen Platz belegt. So weit so gut. Ich ändere jetzt das Word-File ab, indem ich mehrere Seiten lösche, sodass die Datei nur noch 200MB groß ist. Meinem Verständnis nach müsste der Snapshot jetzt eine Größe von 200MB vorweisen. Leider wächst dieser jedoch auf nahezu 400MB an. Ich verstehe jedoch nicht warum, da ich eig dachte, dass nur die Änderungen gesichert werden.
Wenn dieses Vorgehen in einem Ordner mit mehreren Files wiederhole und ein File davon lösche, ist die Größe des Snapshots genauso groß wie das gelöschte File, klappt also.

Warum klappt das nicht auf File-Ebene? Habe ich einen Denkfehler?
vielen Dank für eure Hilfe!
 

Patrick M. Hausen

Hall of Famer
Joined
Nov 25, 2013
Messages
7,776
1. Snapshots interessieren sich nicht für einzelne Files. Sie frieren eine Zustand des gesamten Datasets auf Blockebene ein.
2. ZFS ist ein Copy-on-Write Dateisystem, d.h. es werden niemals belegte Blöcke überschrieben.

Die Datei liegt da so in der Gegend rum, der Snapshot belegt 0 Bytes.

Du speicherst eine kleiner Version ab. Word wird wahrscheinlich eine komplett neue Version schreiben und danach die alte löschen. Aber auch wenn Word versuchen würde, die Datei "in place" zu überrschreiben, würde ZFS neue Blöcke schreiben wegen 2.

Die alte Version der Datei ist im Snapshot noch vorhanden. Dieser belegt daher ungfähr die alte Größe der Datei, denn er muss ja alle alten Blöcke aufheben.

Von der internen Struktur eines Dokuments und ggf. Differenzen weiß ZFS nichts. Alles immer Blockweise. Es sind sicher keine zwei Blöcke der alten und der neuen Version identisch, selbst wenn der Seiteninhalt gleich sein sollte.
 

Skywalker

Dabbler
Joined
Dec 30, 2022
Messages
16
1. Snapshots interessieren sich nicht für einzelne Files. Sie frieren eine Zustand des gesamten Datasets auf Blockebene ein.
2. ZFS ist ein Copy-on-Write Dateisystem, d.h. es werden niemals belegte Blöcke überschrieben.

Die Datei liegt da so in der Gegend rum, der Snapshot belegt 0 Bytes.

Du speicherst eine kleiner Version ab. Word wird wahrscheinlich eine komplett neue Version schreiben und danach die alte löschen. Aber auch wenn Word versuchen würde, die Datei "in place" zu überrschreiben, würde ZFS neue Blöcke schreiben wegen 2.

Die alte Version der Datei ist im Snapshot noch vorhanden. Dieser belegt daher ungfähr die alte Größe der Datei, denn er muss ja alle alten Blöcke aufheben.

Von der internen Struktur eines Dokuments und ggf. Differenzen weiß ZFS nichts. Alles immer Blockweise. Es sind sicher keine zwei Blöcke der alten und der neuen Version identisch, selbst wenn der Seiteninhalt gleich sein sollte.

Hallo Patrick,

erstmal vielen lieben Dank für deine Antwort. An sich leuchtet mir das auch ein.

Kennst du das Buch FreeBSD Mastery: ZFS von Lucas und Jude? Dort wird ein Versuch ähnlich beschrieben wie ich ihn durchgeführt hatte:
Random Text Datei anlegen. Snapshot erstellen und dann 1MB des 2MB großen Files random-mäßig überschreiben.
Danach wächst der Snapshot nur um 1MB der durchgeführten Änderung.

Ich bin einfach verwirrt und verwundert weil es der generellen Aussage widerspricht :-/
 

Patrick M. Hausen

Hall of Famer
Joined
Nov 25, 2013
Messages
7,776
Wenn du gezielt 1 MB einer 2 MB großen Datei überschreibst, dann klappt das auch. Bei der Standard-Blockgöße von 128k sind das 8 Blöcke.

Aber ein Word-Dokument ist ja keine Textdatei. Das ist voller komplexer proprietärer Datenstrukturen. Kleine Änderung hier - ganze Datei anders.
 

Skywalker

Dabbler
Joined
Dec 30, 2022
Messages
16
Wenn du gezielt 1 MB einer 2 MB großen Datei überschreibst, dann klappt das auch. Bei der Standard-Blockgöße von 128k sind das 8 Blöcke.

Aber ein Word-Dokument ist ja keine Textdatei. Das ist voller komplexer proprietärer Datenstrukturen. Kleine Änderung hier - ganze Datei anders.
Verstehe.. ok danke dir auf jeden Fall für die Antwort! :smile:
 

jgreco

Resident Grinch
Joined
May 29, 2011
Messages
18,680
Ich habe diese Frage zufällig bemerkt, als ich einen doppelten Beitrag entfernt habe. Bei kleinen Dateien versucht ein Editor wahrscheinlich, die vorhandenen Daten zu überschreiben, was wahrscheinlich zur Zuweisung neuer Blöcke führt. Einige Editoren sind jedoch schlau genug, in der vorhandenen Datei zu suchen und nur geänderte Teile der Daten zu überschreiben. In solchen Fällen bleiben unveränderte Blöcke die gleichen wie im Snapshot.

Bitte denken Sie daran, dass Ihre ZFS-Blockgröße 128 KB oder sogar 1 MB betragen kann, daher kann es sinnvoller sein, für diese Art von Experimenten ein Tool wie "dd" zu verwenden.

Code:
# dd if=/dev/random of=mytestfile bs=1048576 count=10
Mach einen Schnappschuss
# dd if=/dev/random of=mytestfile bs=1048576 count=2
Dies sollte ein Delta von 2 MB zwischen dem Snap und dem Dateisystem anzeigen


Bitte entschuldigen Sie, dass ich für diese Nachricht Google Translate verwende.

Viel Glück beim Experimentieren!
 

Skywalker

Dabbler
Joined
Dec 30, 2022
Messages
16
Ich habe diese Frage zufällig bemerkt, als ich einen doppelten Beitrag entfernt habe. Bei kleinen Dateien versucht ein Editor wahrscheinlich, die vorhandenen Daten zu überschreiben, was wahrscheinlich zur Zuweisung neuer Blöcke führt. Einige Editoren sind jedoch schlau genug, in der vorhandenen Datei zu suchen und nur geänderte Teile der Daten zu überschreiben. In solchen Fällen bleiben unveränderte Blöcke die gleichen wie im Snapshot.

Bitte denken Sie daran, dass Ihre ZFS-Blockgröße 128 KB oder sogar 1 MB betragen kann, daher kann es sinnvoller sein, für diese Art von Experimenten ein Tool wie "dd" zu verwenden.

Code:
# dd if=/dev/random of=mytestfile bs=1048576 count=10
Mach einen Schnappschuss
# dd if=/dev/random of=mytestfile bs=1048576 count=2
Dies sollte ein Delta von 2 MB zwischen dem Snap und dem Dateisystem anzeigen


Bitte entschuldigen Sie, dass ich für diese Nachricht Google Translate verwende.

Viel Glück beim Experimentieren!
Danke dir jgreco :smile:
 

emk2203

Guru
Joined
Nov 11, 2012
Messages
573
Im Prinzip ist schon alles gesagt, aber hier noch ein paar Details für Interessierte:

Eine MS Word-Datei ist ein Archiv von XML-Dateien. Selbst ein Dokument mit nur drei Absätzen minimal zu formatieren (fett, kursiv) ändert so gut wie das gesamte Dokument mit seinen Strukturen und Referenzen. --> Die gesamte Datei ändert sich, und damit auch der Snapshot gesamt.

Kurzübersicht sehr anschaulich ist hier: https://www.toptal.com/xml/an-informal-introduction-to-docx

Wer mehr wissen will: Die ECMA-Spezifikation von MS Word Dokumenten hat 5000 Seiten und kann als ECMA-376 bei ecma-international.org eingesehen werden. Originaldokument von Microsoft ist abrufbar unter https://learn.microsoft.com/en-us/o...ms-oe376/db9b9b72-b10b-4e7e-844c-09f88c972219 . Viel Spaß beim Lesen! :wink:
 
Top