1. Oracle Solaris ZFS-Dateisystem (Einführung)
2. Erste Schritte mit Oracle Solaris ZFS
3. Unterschiede zwischen Oracle Solaris ZFS und herkömmlichen Dateisystemen
4. Verwalten von Oracle Solaris ZFS-Speicher-Pools
5. Installieren und Booten eines Oracle Solaris ZFS-Root-Dateisystems
6. Verwalten von Oracle Solaris ZFS-Dateisystemen
7. Arbeiten mit Oracle Solaris ZFS-Snapshots und -Klonen
Überblick über ZFS-Schnappschüsse
Erstellen und Löschen von ZFS-Schnappschüssen
Aufbewahren von ZFS-Schnappschüssen
Umbenennen von ZFS-Schnappschüssen
Anzeigen von und Zugreifen auf ZFS-Schnappschüsse
Berechnung von Festplattenkapazität für ZFS-Schnappschüsse
Ersetzen eines ZFS-Dateisystems durch einen ZFS-Klon
Senden und Empfangen von ZFS-Daten
Sichern von ZFS-Daten mit anderen Softwarepaketen zur Erstellung von Sicherungskopien
Senden von ZFS-Schnappschüssen
Empfangen von ZFS-Schnappschüssen
Anwenden verschiedener Eigenschaftswerte auf einen ZFS-Schnappschussdatenstrom
Senden und Empfangen komplexer ZFS-Schnappschuss-Datenströme
Replikation von ZFS-Daten über das Netzwerk
8. Schützen von Oracle Solaris ZFS-Dateien mit Zugriffskontrolllisten und Attributen
9. Delegierte Oracle Solaris ZFS-Administration
10. Fortgeschrittene Oracle Solaris ZFS-Themen
11. Problembehebung und Pool-Wiederherstellung in Oracle Solaris ZFS
Ein Schnappschuss ist eine schreibgeschützte Kopie eines Dateisystems bzw. Volumes. Schnappschüsse können sehr schnell erstellt werden und belegen anfänglich keine zusätzliche Festplattenkapazität im Pool. Mit der Änderung von Daten innerhalb des aktiven Datasets belegt der Schnappschuss jedoch schrittweise mehr Festplattenkapazität, da er Verweise auf die älteren Daten speichert und so ein Löschen dieser Daten verhindert
ZFS-Schnappschüsse besitzen die folgenden Leistungsmerkmale:
Sie bleiben auch nach Systemneustarts wirksam.
Die theoretische Maximalanzahl möglicher Schnappschüsse beträgt 264.
Schnappschüsse verwenden keine separaten Zusatzspeicher. Schnappschüsse belegen Festplattenkapazität direkt im gleichen Speicher-Pool, wie auch das Dateisystem oder Volume, aus dem sie erstellt wurden.
Rekursive Schnappschüsse werden schnell in einem unteilbaren Vorgang erstellt. Schnappschüsse werden entweder zusammen (d. h. alle auf einmal) oder gar nicht erstellt. Der Vorteil solcher unteilbarer Schnappschüsse besteht darin, dass die Schnappschussdaten auch bei Dateisystemhierarchien zu einem einzigen konsistenten Zeitpunkt erstellt werden.
Auf Schnappschüsse von Volumes kann nicht direkt zugegriffen werden, aber sie können geklont, als Sicherungskopie gesichert und wiederhergestellt werden. Informationen zum Erstellen von Sicherungskopien für ZFS-Schnappschüsse finden Sie unter Senden und Empfangen von ZFS-Daten.
Schnappschüsse werden mithilfe des Befehls zfs snapshot erstellt. Diesem wird als einziges Argument der Name des zu erstellenden Schnappschusses übergeben. Der Schnappschussname ist wie folgt anzugeben:
filesystem@snapname volume@snapname
Der Schnappschussname muss den unter Konventionen für das Benennen von ZFS-Komponenten aufgeführten Benennungskonventionen genügen.
Im folgenden Beispiel wird ein Schnappschuss des Dateisystems tank/home/matt mit dem Namen friday erstellt.
# zfs snapshot tank/home/matt@friday
Mithilfe der Option -r können Sie Schnappschüsse für alle untergeordneten Dateisysteme erstellen. Beispiel:
# zfs snapshot -r tank/home@snap1 # zfs list -t snapshot -r tank/home zfs list -t snapshot -r tank/home NAME USED AVAIL REFER MOUNTPOINT tank/home@snap1 0 - 34K - tank/home/mark@snap1 0 - 2.00G - tank/home/matt@snap1 0 - 1.00G - tank/home/tom@snap1 0 - 2.00G -
Schnappschüsse besitzen keine konfigurierbaren Eigenschaften, und es können für Schnappschüsse auch keine Dataset-Eigenschaften gesetzt werden. Beispiel:
# zfs set compression=on tank/home/matt@friday cannot set property for 'tank/home/matt@friday': this property can not be modified for snapshots
Schnappschüsse werden mithilfe des Befehls zfs destroy gelöscht. Beispiel:
# zfs destroy tank/home/matt@friday
Ein Dataset kann nicht gelöscht werden, wenn Schnappschüsse dieses Datasets vorhanden sind. Beispiel:
# zfs destroy tank/home/matt cannot destroy 'tank/home/matt': filesystem has children use '-r' to destroy the following datasets: tank/home/matt@tuesday tank/home/matt@wednesday tank/home/matt@thursday
Wenn von einem Schnappschuss Klone erstellt wurden, müssen diese zuerst gelöscht werden, bevor das Löschen des Schnappschusses möglich ist.
Weitere Informationen zum Unterbefehl destroy finden Sie unter Löschen eines ZFS-Dateisystems.
Wenn Sie verschiedene automatische Schnappschuss-Richtlinien verwenden und dadurch ältere Schnappschüsse durch zfs receive gelöscht werden, weil sie nicht mehr auf der Sendeseite vorhanden sind, können Sie die Schnappschuss-Aufbewahrungsfunktion verwenden.
Durch die Aufbewahrung eines Schnappschusses wird verhindert, dass er gelöscht wird. Außerdem ermöglicht diese Funktion das Löschen eines Schnappschusses zusammen mit Klonen in Abhängigkeit von der Entfernung des letzten Klons mithilfe des Befehls zfs destroy -d. Jeder Schnappschuss besitzt eine zugeordnete Benutzerreferenzzählung, die bei Null beginnt. Dieser Wert wird erhöht, wenn ein weiterer Schnappschuss aufbewahrt wird, und verringert, wenn eine Aufbewahrung beendet wird.
In der Vorgängerversion von Oracle Solaris konnte ein Schnappschuss nur dann mithilfe des Befehls zfs destroy gelöscht werden, wenn er keine Klone hatte. In dieser Oracle Solaris-Version muss zudem der Wert der Benutzerreferenzzählung des Schnappschusses auf Null stehen.
Sie können einen Schnappschuss oder eine Gruppe von Schnappschüssen aufbewahren. Anhand der folgenden Syntax wird beispielsweise ein Aufbewahrungs-Tag, keep, für tank/home/cindy/snap@1 gesetzt:
# zfs hold keep tank/home/cindy@snap1
Sie können die Option -r verwenden, um die Schnappschüsse 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 Schnappschuss oder einer Gruppe von Schnappschüssen hinzugefügt. Jeder Schnappschuss besitzt einen eigenen Tag-Namensraum. Die Aufbewahrungs-Tags innerhalb dieses Namensraums müssen eindeutig sein. Wenn ein Schnappschuss aufbewahrt wird, kann er nicht mithilfe des Befehls zfs destroy gelöscht werden. Beispiel:
# zfs destroy tank/home/cindy@snap1 cannot destroy 'tank/home/cindy@snap1': dataset is busy
Wenn Sie einen aufbewahrten Schnappschuss löschen möchten, verwenden Sie die Option -d. Beispiel:
# zfs destroy -d tank/home/cindy@snap1
Verwenden Sie den Befehl zfs holds, um eine Liste der aufbewahrten Schnappschüsse anzuzeigen. Beispiel:
# zfs holds tank/home@now NAME TAG TIMESTAMP tank/home@now keep Fri May 6 06:34:03 2011
# zfs holds -r tank/home@now NAME TAG TIMESTAMP tank/home/cindy@now keep Fri May 6 06:34:03 2011 tank/home/mark@now keep Fri May 6 06:34:03 2011 tank/home/matt@now keep Fri May 6 06:34:03 2011 tank/home/tom@now keep Fri May 6 06:34:03 2011 tank/home@now keep Fri May 6 06:34:03 2011
Sie können den Befehl zfs release verwenden, um einen aufbewahrten Schnappschuss oder eine Gruppe aufbewahrter Schnappschüsse freizugeben. Beispiel:
# zfs release -r keep tank/home@now
Ist ein Schnappschuss 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 Schnappschüssen.
Die Eigenschaft defer_destroy ist aktiviert (on), wenn der Schnappschuss 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 Schnappschusses und wird auch als Benutzerreferenzzählung bezeichnet.
Sie können Schnappschüsse umbenennen. Allerdings müssen Schnappschüsse innerhalb des Pools und Datasets, in dem sie erstellt wurden, umbenannt werden. Beispiel:
# zfs rename tank/home/cindy@snap1 tank/home/cindy@today
Außerdem entspricht die folgende Kurzsyntax der obigen Syntax:
# zfs rename tank/home/cindy@snap1 today
Der folgende Vorgang zum Umbenennen eines Schnappschusses wird nicht unterstützt, da sich Ziel-Pool und -Dateisystem von dem Pool und Dateisystem unterscheiden, in denen der betreffende Schnappschuss erstellt wurde:
# zfs rename tank/home/cindy@today pool/home/cindy@saturday cannot rename to 'pool/home/cindy@today': snapshots must be part of same dataset
Sie können Schnappschüsse mithilfe des Befehls zfs rename - r rekursiv umbenennen. Beispiel:
# zfs list -t snapshot -r users/home NAME USED AVAIL REFER MOUNTPOINT users/home@now 23.5K - 35.5K - users/home@yesterday 0 - 38K - users/home/lori@yesterday 0 - 2.00G - users/home/mark@yesterday 0 - 1.00G - users/home/neil@yesterday 0 - 2.00G - # zfs rename -r users/home@yesterday @2daysago # zfs list -t snapshot -r users/home NAME USED AVAIL REFER MOUNTPOINT users/home@now 23.5K - 35.5K - users/home@2daysago 0 - 38K - users/home/lori@2daysago 0 - 2.00G - users/home/mark@2daysago 0 - 1.00G - users/home/neil@2daysago 0 - 2.00G -
Sie können das Anzeigen von Schnappschusslisten in der zfs list-Ausgabe durch Verwenden der Pool-Eigenschaft listsnapshots aktivieren oder deaktivieren. Diese Eigenschaft ist standardmäßig aktiviert.
Wenn Sie diese Eigenschaft deaktivieren, können Sie Schnappschuss-Informationen mit dem Befehl zfs list -t snapshot anzeigen. Oder aktivieren Sie die Pool-Eigenschaft listsnapshots. Beispiel:
# zpool get listsnapshots tank NAME PROPERTY VALUE SOURCE tank listsnapshots on default # zpool set listsnapshots=off tank # zpool get listsnapshots tank NAME PROPERTY VALUE SOURCE tank listsnapshots off local
Schnappschüsse befinden sich im Verzeichnis .zfs/snapshot des Stammverzeichnisses des Dateisystems. Wenn das Dateisystem tank/home/ahrens beispielsweise in /home/ahrens eingehängt ist, befinden sich die Daten des Schnappschusses tank/home/ahrens@thursday im Verzeichnis /home/ahrens/.zfs/snapshot/thursday .
# ls /tank/home/matt/.zfs/snapshot tuesday wednesday thursday
Schnappschüsse können wie folgt angezeigt werden:
# zfs list -t snapshot -r tank/home NAME USED AVAIL REFER MOUNTPOINT tank/home/cindy@today 0 - 2.00G - tank/home/mark@today 0 - 2.00G - tank/home/matt@tuesday 20K - 1.00G - tank/home/matt@wednesday 20K - 1.00G - tank/home/matt@thursday 0 - 1.00G -
Schnappschüsse, die für ein bestimmtes Dateisystem erstellt wurden, können wie folgt angezeigt werden:
# zfs list -r -t snapshot -o name,creation tank/home NAME CREATION tank/home/cindy@today Fri May 6 6:32 2011 tank/home/mark@today Fri May 6 6:22 2011 tank/home/matt@tuesday Tue May 3 6:27 2011 tank/home/matt@wednesday Wed May 4 6:28 2011 tank/home/matt@thursday Thu May 5 6:28 2011
Nach der Erstellung eines Schnappschusses wird dessen Festplattenkapazität anfänglich vom Schnappschuss und vom Dateisystem (sowie eventuell von früheren Schnappschüssen) gemeinsam genutzt. Wenn sich ein Dateisystem mit der Zeit ändert, wird gemeinsam genutzte Festplattenkapazität dann nur noch vom Schnappschuss belegt und in die Berechnung des vom Schnappschuss belegten Speicherplatzes (Eigenschaft used) einbezogen. Darüber hinaus kann durch das Löschen von Schnappschüssen die Festplattenkapazität, die Schnappschüssen eindeutig zugewiesen ist (und deswegen in der Eigenschaft used angegeben ist und somit belegt wird), größer werden.
Der Eigenschaftswert referenced des Speicherlatzes eines Schnappschusses entspricht dem des Dateisystems zum Zeitpunkt der Erstellung dieses Schnappschusses.
Sie können zusätzliche Informationen darüber erhalten, wie die Werte der Eigenschaft used belegt werden. Neue schreibgeschützte Dateisystem-Eigenschaften beschreiben die Belegung von Festplattenkapazität für Klone, Dateisysteme und Volumes. Beispiel:
$ zfs list -o space -r rpool NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD rpool 59.1G 7.84G 21K 109K 0 7.84G rpool@snap1 - 21K - - - - rpool/ROOT 59.1G 4.78G 0 31K 0 4.78G rpool/ROOT@snap1 - 0 - - - - rpool/ROOT/zfsBE 59.1G 4.78G 15.6M 4.76G 0 0 rpool/ROOT/zfsBE@snap1 - 15.6M - - - - rpool/dump 59.1G 1.00G 16K 1.00G 0 0 rpool/dump@snap1 - 16K - - - - rpool/export 59.1G 99K 18K 32K 0 49K rpool/export@snap1 - 18K - - - - rpool/export/home 59.1G 49K 18K 31K 0 0 rpool/export/home@snap1 - 18K - - - - rpool/swap 61.2G 2.06G 0 16K 2.06G 0 rpool/swap@snap1 - 0 - - - -
Eine Beschreibung dieser Eigenschaften können Sie Tabelle 6-1 entnehmen.
Mit dem Befehl zfs rollback können Sie alle Änderungen rückgängig machen, die seit der Erstellung eines bestimmten Schnappschusses an einem Dateisystem vorgenommen wurden. Im Dateisystem wird der Zustand zum Zeitpunkt der Erstellung des betreffenden Schnappschusses wiederhergestellt. Standardmäßig stellt dieser Befehl stets den Zustand des zuletzt gemachten Schnappschusses wieder her.
Damit das Dateisystem im Zustand eines früheren Schnappschusses wiederhergestellt werden kann, müssen alle dazwischen liegenden Schnappschusses gelöscht werden. Frühere Schnappschüsse können mithilfe der Option -r gelöscht werden.
Wenn Klone dazwischen liegender Schnappschüsse vorhanden sind, müssen auch diese Klone mithilfe der Option -R gelöscht werden.
Hinweis - Das Dateisystem, dessen früherer Zustand wiederhergestellt werden soll, wird aus- und wieder eingehängt, wenn es gerade eingehängt ist. Wenn das betreffende Dateisystem nicht ausgehängt werden kann, schlägt die Wiederherstellung des früheren Zustands fehl. Die Option -f erzwingt bei Bedarf das Aushängen des Dateisystems.
Im folgenden Beispiel wird das Dateisystem tank/home/ahrens auf den Schnappschuss mit dem Namen tuesday zurückgesetzt:
# zfs rollback tank/home/matt@tuesday cannot rollback to 'tank/home/matt@tuesday': more recent snapshots exist use '-r' to force deletion of the following snapshots: tank/home/matt@wednesday tank/home/matt@thursday # zfs rollback -r tank/home/matt@tuesday
In diesem Beispiel wurden die Schnappschüsse wednesday und thursday gelöscht, da Sie den Zustand des davor liegenden Schnappschusses tuesday wiederhergestellt haben.
# zfs list -r -t snapshot -o name,creation tank/home/matt NAME CREATION tank/home/matt@tuesday Tue May 3 6:27 2011
Sie können ZFS-Schnappschussunterschiede mithilfe des Befehls zfs diff ermitteln.
Beispielsweise werden folgende zwei Schnappschüsse erstellt:
$ ls /tank/home/tim fileA $ zfs snapshot tank/home/tim@snap1 $ ls /tank/home/tim fileA fileB $ zfs snapshot tank/home/tim@snap2
Um beispielsweise die Unterschiede zwischen zwei Schnappschüssen zu ermitteln, verwenden Sie folgende Syntax:
$ zfs diff tank/home/tim@snap1 tank/home/timh@snap2 M /tank/home/tim/ + /tank/home/tim/fileB
In der Ausgabe gibt M an, dass das Verzeichnis geändert wurde. Das + gibt an, dass fileB im späteren Schnappschuss vorhanden ist.
Das R in der folgenden Ausgabe gibt an, dass eine Datei in einem Schnappschuss umbenannt wurde.
$ mv /tank/cindy/fileB /tank/cindy/fileC $ zfs snapshot tank/cindy@snap2 $ zfs diff tank/cindy@snap1 tank/cindy@snap2 M /tank/cindy/ R /tank/cindy/fileB -> /tank/cindy/fileC
In der folgenden Tabelle werden die vom Befehl zfs diff ermittelten Datei- oder Verzeichnisänderungen zusammengefasst.
|
Weitere Informationen finden Sie in der Manpage zfs(1M).