Moin zusammen,
ich beschäftige mich gerade mit dem ZFS:
Wenn ich das richtig verstanden habe, werden durch die copy-on-write Methode (CoW) Dateien niemals überschrieben, sondern die Änderungen in einen neuen Block geschrieben.
Ist die Datei kleiner als der Block (4k) dann wird sie eben komplett neu geschrieben - bei jeder Änderung!
Mache ich jetzt einen Snapshot "merkt" sich ZFS einfach den aktuellen Block in dem die Datei steht und macht ja nicht wirklich noch eine Kopie davon.
Ich kann via /dataset/.zfs/snapshot auf die Snapshot zugreifen, kann ja auch in die Datei hineinschauen, weil es ist ja nur eine Referenz auf einen alten Block.
Mache ich einen Rollback von diesem Snapshot wird einfach nur der "alte" Block aus dem Snapshot als aktueller Block markiert, ohne die Datei wirklich irgendwo hinzukopieren.
Richtig soweit?
Jetzt zu meiner "kruden" Frage:
Mal angenommen ich habe eine 2 TB Platte, auf der nur eine (1) Datei mit 4 kb (also 1 Block) geschrieben ist.
Auch wenn ich keine Snapshot mache, existieren ja trotz täglicher Änderung dieser Datei alle Versionen dieser Datei, da die ZFS Blöcke durch CoW ja "nie" über schrieben werden.
(In diesem Fall erst bei der 500 Mrd 'sten Kopie)
Ich kann nur nicht darauf referenzieren, weil ich keine Snapshot gemacht habe, aber ZFS weis ja selbst welche Blöcke es beschrieben hat.
Jetzt müsste es ja rein theoretisch möglich sein, einen Snapshot in die Vergangenheit zu machen, also ZFS anweisen eine Referenz auf alle Blöcke zu erstellen, die vorgestern geändert wurden (In diesem einfachen Fall wäre es ja nur einer).
Mache ich einen Denkfehler? Oder geht das am Ende sogar und ich weis es nur nicht?
Ist mir klar, bei einem Dataset mit tausenden von Dateien können da komische Sachen bei rauskommen.
Auto-Snapshot sind mir bekannt, es steckt jetzt auch kein Anwendungsfall dahinter, es geht mir mehr ums Verständnis.
Vielen Dank & Gruß
Thorsten
ich beschäftige mich gerade mit dem ZFS:
Wenn ich das richtig verstanden habe, werden durch die copy-on-write Methode (CoW) Dateien niemals überschrieben, sondern die Änderungen in einen neuen Block geschrieben.
Ist die Datei kleiner als der Block (4k) dann wird sie eben komplett neu geschrieben - bei jeder Änderung!
Mache ich jetzt einen Snapshot "merkt" sich ZFS einfach den aktuellen Block in dem die Datei steht und macht ja nicht wirklich noch eine Kopie davon.
Ich kann via /dataset/.zfs/snapshot auf die Snapshot zugreifen, kann ja auch in die Datei hineinschauen, weil es ist ja nur eine Referenz auf einen alten Block.
Mache ich einen Rollback von diesem Snapshot wird einfach nur der "alte" Block aus dem Snapshot als aktueller Block markiert, ohne die Datei wirklich irgendwo hinzukopieren.
Richtig soweit?
Jetzt zu meiner "kruden" Frage:
Mal angenommen ich habe eine 2 TB Platte, auf der nur eine (1) Datei mit 4 kb (also 1 Block) geschrieben ist.
Auch wenn ich keine Snapshot mache, existieren ja trotz täglicher Änderung dieser Datei alle Versionen dieser Datei, da die ZFS Blöcke durch CoW ja "nie" über schrieben werden.
(In diesem Fall erst bei der 500 Mrd 'sten Kopie)
Ich kann nur nicht darauf referenzieren, weil ich keine Snapshot gemacht habe, aber ZFS weis ja selbst welche Blöcke es beschrieben hat.
Jetzt müsste es ja rein theoretisch möglich sein, einen Snapshot in die Vergangenheit zu machen, also ZFS anweisen eine Referenz auf alle Blöcke zu erstellen, die vorgestern geändert wurden (In diesem einfachen Fall wäre es ja nur einer).
Mache ich einen Denkfehler? Oder geht das am Ende sogar und ich weis es nur nicht?
Ist mir klar, bei einem Dataset mit tausenden von Dateien können da komische Sachen bei rauskommen.
Auto-Snapshot sind mir bekannt, es steckt jetzt auch kein Anwendungsfall dahinter, es geht mir mehr ums Verständnis.
Vielen Dank & Gruß
Thorsten