Was sind ZFS-Snapshots?
ZFS arbeitet mit Copy-on-Write — jede Änderung wird an eine neue Stelle geschrieben, die alten Blöcke bleiben erhalten. Ein Snapshot friert diesen Stand ein: Die Blöcke werden einfach nicht mehr zum Überschreiben freigegeben. Deshalb ist ein Snapshot schneller erstellt als eine Datei gespeichert — er kostet nur so viel Platz, wie sich danach ändert.
Was man damit machen kann:
- Einzelne Dateien aus dem Snapshot herauskopieren
- Das gesamte Dataset auf den Snapshot-Stand zurückrollen
- Einen beschreibbaren Clone aus dem Snapshot erstellen
- Den Snapshot (oder nur die Differenz zum nächsten) per SSH auf ein anderes System replizieren
Snapshot erstellen und nutzen
Dataset mit Testdaten vorbereiten:
zfs create rpool/testdaten dd if=/dev/zero of=/rpool/testdaten/image01.img bs=10240 count=10240 # 100 MB zfs list rpool/testdaten NAME USED AVAIL REFER MOUNTPOINT rpool/testdaten 100M 9,02G 100M /rpool/testdaten
Snapshot erstellen — der Name nach dem @ ist frei wählbar:
zfs snapshot rpool/testdaten@vor-aenderung
Auf den Snapshot zugreifen — das versteckte Verzeichnis .zfs taucht nicht in ls auf, ist aber direkt erreichbar:
ls /rpool/testdaten/.zfs/snapshot/ vor-aenderung ls /rpool/testdaten/.zfs/snapshot/vor-aenderung/ image01.img
Von hier aus lassen sich versehentlich gelöschte Dateien einfach zurückkopieren. Um das gesamte Dataset auf den Snapshot-Stand zurückzurollen:
zfs rollback rpool/testdaten@vor-aenderung
Snapshot per SSH replizieren
Mit zfs send und zfs recv lässt sich ein Snapshot auf ein anderes System schieben — ein Einzeiler:
zfs send rpool/testdaten@vor-aenderung \ | ssh root@backup-server zfs recv backup/testdaten@vor-aenderung
Danach muss nur noch die Differenz zwischen zwei Snapshots übertragen werden — bei 1 GB Änderungen auf einem 100 GB Dataset werden auch nur 1 GB übertragen. Alle ZFS-Properties (NFS-Shares, SMB-Shares, Quotas) wandern mit. Mehr dazu im Beitrag zur ZFS-Datensicherung und zur Fehlerbehebung bei zfs send/recv.
Time Slider und Boot Environments
Unter OpenIndiana/Solaris gibt es den Time Slider — ein Nautilus-Plugin, das automatisch Snapshots erstellt und eine grafische Zeitleiste bietet. Alte Snapshots werden automatisch aufgeräumt wenn die Platte voll wird.
Noch mächtiger sind Boot Environments (beadm). Vor einem Systemupdate wird automatisch ein Snapshot des Root-Pools erstellt und davon ein Clone gebootet. Geht beim Update etwas schief, bootet man einfach das alte Environment — kein Stress, kein Ausfall:
beadm list BE Active Mountpoint Space Policy Created openindiana NR / 11,6G static 2011-09-28 19:06 openindiana-1 - - 37,3M static 2011-10-27 20:04 # Neues Boot Environment anlegen beadm create vor-experiment
Für automatisierte Snapshots unter FreeBSD siehe automatische ZFS-Snapshots mit zfs-auto-snapshot. Fragen? Einfach melden.


Schreibe einen Kommentar