Wächst ein ZFS Snapshot bei Wiederanlage einer gelöschten Datei?

Diese Frage ist kürzlich im Rahmen eines Sicherungsszenario aufgetreten und soll hier kurz in Form einiger Terminalabfragen und -ausgaben erläutert werden.

Ausgangssituation

  • ZFS Version 5
  • Deduplication deaktiviert
# zfs get dedup stash/install
NAME           PROPERTY  VALUE          SOURCE
stash/install  dedup     off            default

# zfs get version stash/install
NAME           PROPERTY  VALUE    SOURCE
stash/install  version   5        -

Test 1: Lokales Umbenennen einer Datei

Eine Datei wird lediglich lokal umbenannt.

# Snapshot erstellen
# zfs snap stash/install@before_rename

# Snapshot anzeigen
# zfs list -t snapshot | grep -E 'NAME|before_rename'
NAME                                                                        USED  AVAIL  REFER  MOUNTPOINT
stash/install@before_rename                                                    0      -  68.1G  -

# Datei verschieben (= umbenennen)
# ls -ahl archlinux-2013.04.01-dual.iso
-rw-rw-r--  1 g  g   506M Apr 23  2013 archlinux-2013.04.01-dual.iso
# mv archlinux-2013.04.01-dual.iso RENAMED_x-2013.04.01-dual.iso

# Snapshot erstellen
# zfs snap stash/install@after_rename
# zfs list -t snapshot | grep -E 'NAME|rename'
NAME                                                                        USED  AVAIL  REFER  MOUNTPOINT
stash/install@before_rename                                                    0      -  68.1G  -
stash/install@after_rename                                                     0      -  68.1G  -

Ergebnis: Snapshotgröße bleibt unberührt.

Test 2: Löschen und Wiedereinkopieren über Netzwerk

Eine Datei wird lokal gelöscht und über das Netzwerk (CIFS) wiedereinkopiert.

Dieser Anwendungsfall ist gängig, wenn ZFS als Ziel-Dateisystem für regelmäßige Sicherungen von anderen Netzwerkgeräten eingesetzt wird.

# rm RENAMED_archlinux-2013.04.01-dual.iso
# [an dieser Stelle wurde via Netzwerk einkopiert]
# ls -hal archlinux-2013.04.01-dual.iso 
-rw-------  1 g  g   506M Apr 23  2013 archlinux-2013.04.01-dual.iso

# Snapshot erstellen
# zfs snap stash/install@after_recreation_via_network
# zfs list -t snapshot | grep -E 'NAME|before|after'
NAME                                                                        USED  AVAIL  REFER  MOUNTPOINT
stash/install@before_rename                                                    0      -  68.1G  -
stash/install@after_rename                                                  163K      -  68.1G  -
stash/install@after_recreation_via_network                                     0      -  68.1G  -

Ergebnis: Snapshotgröße wächst mit 163K minimal an, anstatt den benötigten Speicherplatz der Datei erneut zu verbrauchen.