Wenn Sie verschiedene automatische Snapshot-Richtlinien verwenden und dadurch ältere Snapshots durch zfs receive gelöscht werden, weil sie nicht mehr auf der Sendeseite vorhanden sind, können Sie die Snapshot-Aufbewahrungsfunktion verwenden.
Durch die Aufbewahrung eines Snapshots wird verhindert, dass er gelöscht wird. Außerdem ermöglicht diese Funktion das Löschen eines Snapshots zusammen mit Klonen in Abhängigkeit von der Entfernung des letzten Klons mithilfe des Befehls zfs destroy -d. Jeder Snapshot besitzt eine zugeordnete Benutzerreferenzzählung, die bei Null beginnt. Dieser Wert wird erhöht, wenn ein weiterer Snapshot aufbewahrt wird, und verringert, wenn eine Aufbewahrung beendet wird.
In der Vorgängerversion von Solaris konnte ein Snapshot nur dann mithilfe des Befehls zfs destroy gelöscht werden, wenn er keine Klone hatte. In dieser Solaris-Version muss zudem der Wert der Benutzerreferenzzählung des Snapshots auf Null stehen.
Sie können einen Snapshot oder eine Gruppe von Snapshots aufbewahren. Anhand der folgenden Syntax wird beispielsweise ein Aufbewahrungs-Tag, keep, für tank/home/cindys/snap@1 gesetzt.
# zfs hold keep tank/home/cindys@snap1 |
Sie können die Option -r verwenden, um die Snapshots aller untergeordneten Dateisystem rekursiv aufzubewahren. Beispiel:
# zfs snapshot -r tank/home@now # zfs hold -r keep tank/home@now |
Mithilfe dieser Syntax wird eine einzelne Referenz, keep, zu einem Snapshot oder einer Gruppe von Snapshots hinzugefügt. Jeder Snapshot besitzt einen eigenen Tag-Namensraum. Die Aufbewahrungs-Tags innerhalb dieses Namensraums müssen eindeutig sein. Wenn ein Snapshot aufbewahrt wird, kann er nicht mithilfe des Befehls zfs destroy gelöscht werden. Beispiel:
# zfs destroy tank/home/cindys@snap1 cannot destroy 'tank/home/cindys@snap1': dataset is busy |
Wenn Sie einen aufbewahrten Snapshot löschen möchten, verwenden Sie die Option -d. Beispiel:
# zfs destroy -d tank/home/cindys@snap1 |
Verwenden Sie den Befehl zfs holds, um eine Liste der aufbewahrten Snapshots anzuzeigen. Beispiel:
# zfs holds tank/home@now NAME TAG TIMESTAMP tank/home@now keep Thu Jul 15 11:25:39 2010 |
# zfs holds -r tank/home@now NAME TAG TIMESTAMP tank/home/cindys@now keep Thu Jul 15 11:25:39 2010 tank/home/mark@now keep Thu Jul 15 11:25:39 2010 tank/home@now keep Thu Jul 15 11:25:39 2010 |
Sie können den Befehl zfs release verwenden, um einen aufbewahrten Snapshot oder eine Gruppe aufbewahrter Snapshots freizugeben. Beispiel:
# zfs release -r keep tank/home@now |
Ist ein Snapshot freigegeben, kann er mithilfe des Befehls zfs destroy gelöscht werden. Beispiel:
# zfs destroy -r tank/home@now |
Zwei neue Eigenschaften liefern Informationen zur Aufbewahrung von Snapshots:
Die Eigenschaft defer_destroy ist aktiviert (on), wenn der Snapshot zur späteren Löschung mithilfe des Befehls zfs destroy -d vorgesehen ist. Anderenfalls ist die Eigenschaft deaktiviert (off).
Die Eigenschaft userrefs dient zur Angabe der Anzahl der Aufbewahrungen des Snapshots und wird auch als Benutzerreferenzzählung bezeichnet.