Dieses Kapitel enthält Informationen zum Erstellen und Verwalten von Oracle Solaris ZFS-Snapshots und -Klonen. Außerdem finden Sie hier auch Informationen zum Speichern von Snapshots.
Dieses Kapitel enthält folgende Abschnitte:
Ein Snapshot ist eine schreibgeschützte Kopie eines Dateisystems bzw. Volumes. Snapshots 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 Snapshot jedoch schrittweise mehr Festplattenkapazität, da er Verweise auf die älteren Daten speichert und so ein Löschen dieser Daten verhindert
ZFS-Snapshots besitzen die folgenden Leistungsmerkmale:
Sie bleiben auch nach Systemneustarts wirksam.
Die theoretische Maximalanzahl möglicher Snapshots beträgt 264.
Snapshots verwenden keine separaten Zusatzspeicher. Snapshots belegen Festplattenkapazität direkt im gleichen Speicher-Pool, wie auch das Dateisystem oder Volume, aus dem sie erstellt wurden.
Rekursive Snapshots werden schnell in einem unteilbaren Vorgang erstellt. Snapshots werden entweder zusammen (d. h. alle auf einmal) oder gar nicht erstellt. Der Vorteil solcher unteilbarer Snapshots besteht darin, dass die Snapshot-Daten auch bei Dateisystemhierarchien zu einem einzigen konsistenten Zeitpunkt erstellt werden.
Auf Snapshots 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-Snapshots finden Sie unter Senden und Empfangen von ZFS-Daten.
Snapshots werden mithilfe des Befehls zfs snapshot erstellt. Diesem wird als einziges Argument der Name des zu erstellenden Snapshots übergeben. Der Snapshot-Name ist wie folgt anzugeben:
filesystem@snapname volume@snapname |
Der Snapshot-Name muss den unter Konventionen für das Benennen von ZFS-Komponenten aufgeführten Benennungskonventionen genügen.
Im folgenden Beispiel wird ein Snapshot des Dateisystems tank/home/ahrens mit dem Namen friday erstellt.
# zfs snapshot tank/home/ahrens@friday |
Mithilfe der Option -r können Sie Snapshots für alle untergeordneten Dateisysteme erstellen. Beispiel:
# zfs snapshot -r tank/home@now # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT rpool/ROOT/zfs2BE@zfs2BE 78.3M - 4.53G - tank/home@now 0 - 26K - tank/home/ahrens@now 0 - 259M - tank/home/anne@now 0 - 156M - tank/home/bob@now 0 - 156M - tank/home/cindys@now 0 - 104M - |
Snapshots besitzen keine konfigurierbaren Eigenschaften, und es können für Snapshots auch keine Dataset-Eigenschaften gesetzt werden. Beispiel:
# zfs set compression=on tank/home/ahrens@now cannot set compression property for 'tank/home/ahrens@now': snapshot properties cannot be modified |
Snapshots werden mithilfe des Befehls zfs destroy gelöscht. Beispiel:
# zfs destroy tank/home/ahrens@now |
Ein Dataset kann nicht gelöscht werden, wenn Snapshots dieses Datasets vorhanden sind. Beispiel:
# zfs destroy tank/home/ahrens cannot destroy 'tank/home/ahrens': filesystem has children use '-r' to destroy the following datasets: tank/home/ahrens@tuesday tank/home/ahrens@wednesday tank/home/ahrens@thursday |
Wenn von einem Snapshot Klone erstellt wurden, müssen diese zuerst gelöscht werden, bevor das Löschen des Snapshots möglich ist.
Weitere Informationen zum Unterbefehl destroy finden Sie unter Löschen eines ZFS-Dateisystems.
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.
Sie können Snapshots umbenennen. Allerdings müssen Snapshots innerhalb des Pools und Datasets, in dem sie erstellt wurden, umbenannt werden. Beispiel:
# zfs rename tank/home/cindys@083006 tank/home/cindys@today |
Außerdem entspricht die folgende Kurzsyntax der obigen Syntax:
# zfs rename tank/home/cindys@083006 today |
Der folgende Vorgang zum Umbenennen eines Snapshots wird nicht unterstützt, da sich Ziel-Pool und -Dateisystem von dem Pool und Dateisystem unterscheiden, in denen der betreffende Snapshot erstellt wurde:
# zfs rename tank/home/cindys@today pool/home/cindys@saturday cannot rename to 'pool/home/cindys@today': snapshots must be part of same dataset |
Sie können Snapshots mithilfe des Befehls zfs rename - r rekursiv umbenennen. Beispiel:
# zfs list NAME USED AVAIL REFER MOUNTPOINT users 270K 16.5G 22K /users users/home 76K 16.5G 22K /users/home users/home@yesterday 0 - 22K - users/home/markm 18K 16.5G 18K /users/home/markm users/home/markm@yesterday 0 - 18K - users/home/marks 18K 16.5G 18K /users/home/marks users/home/marks@yesterday 0 - 18K - users/home/neil 18K 16.5G 18K /users/home/neil users/home/neil@yesterday 0 - 18K - # zfs rename -r users/home@yesterday @2daysago # zfs list -r users/home NAME USED AVAIL REFER MOUNTPOINT users/home 76K 16.5G 22K /users/home users/home@2daysago 0 - 22K - users/home/markm 18K 16.5G 18K /users/home/markm users/home/markm@2daysago 0 - 18K - users/home/marks 18K 16.5G 18K /users/home/marks users/home/marks@2daysago 0 - 18K - users/home/neil 18K 16.5G 18K /users/home/neil users/home/neil@2daysago 0 - 18K - |
Sie können das Anzeigen von Snapshot-Listen 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 Snapshot-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 |
Snapshots 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 Snapshots tank/home/ahrens@thursday im Verzeichnis /home/ahrens/.zfs/snapshot/thursday .
# ls /tank/home/ahrens/.zfs/snapshot tuesday wednesday thursday |
Snapshots können wie folgt angezeigt werden:
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT pool/home/anne@monday 0 - 780K - pool/home/bob@monday 0 - 1.01M - tank/home/ahrens@tuesday 8.50K - 780K - tank/home/ahrens@wednesday 8.50K - 1.01M - tank/home/ahrens@thursday 0 - 1.77M - tank/home/cindys@today 8.50K - 524K - |
Snapshots, 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@now Wed Jun 30 16:16 2010 tank/home/ahrens@now Wed Jun 30 16:16 2010 tank/home/anne@now Wed Jun 30 16:16 2010 tank/home/bob@now Wed Jun 30 16:16 2010 tank/home/cindys@now Wed Jun 30 16:16 2010 |
Nach der Erstellung eines Snapshots wird dessen Festplattenkapazität anfänglich vom Snapshot und vom Dateisystem (sowie eventuell von früheren Snapshots) gemeinsam genutzt. Wenn sich ein Dateisystem mit der Zeit ändert, wird gemeinsam genutzte Festplattenkapazität dann nur noch vom Snapshot belegt und in die Berechnung des vom Snapshot belegten Speicherplatzes (Eigenschaft used) einbezogen. Darüber hinaus kann durch das Löschen von Snapshots die Festplattenkapazität, die Snapshots eindeutig zugewiesen ist (und deswegen in der Eigenschaft used angegeben ist und somit belegt wird), größer werden.
Der Eigenschaftswert referenced des Speicherlatzes eines Snapshots entspricht dem des Dateisystems zum Zeitpunkt der Erstellung dieses Snapshots.
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 # zfs list -ro space tank/home NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD tank/home 66.3G 675M 0 26K 0 675M tank/home@now - 0 - - - - tank/home/ahrens 66.3G 259M 0 259M 0 0 tank/home/ahrens@now - 0 - - - - tank/home/anne 66.3G 156M 0 156M 0 0 tank/home/anne@now - 0 - - - - tank/home/bob 66.3G 156M 0 156M 0 0 tank/home/bob@now - 0 - - - - tank/home/cindys 66.3G 104M 0 104M 0 0 tank/home/cindys@now - 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 Snapshots an einem Dateisystem vorgenommen wurden. Im Dateisystem wird der Zustand zum Zeitpunkt der Erstellung des betreffenden Snapshots wiederhergestellt. Standardmäßig stellt dieser Befehl stets den Zustand des zuletzt gemachten Snapshots wieder her.
Damit das Dateisystem im Zustand eines früheren Snapshots wiederhergestellt werden kann, müssen alle dazwischen liegenden Snapshots gelöscht werden. Frühere Snapshots können mithilfe der Option -r gelöscht werden.
Wenn Klone dazwischen liegender Snapshots vorhanden sind, müssen auch diese Klone mithilfe der Option -R gelöscht werden.
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 Snapshot mit dem Namen tuesday zurückgesetzt:
# zfs rollback tank/home/ahrens@tuesday cannot rollback to 'tank/home/ahrens@tuesday': more recent snapshots exist use '-r' to force deletion of the following snapshots: tank/home/ahrens@wednesday tank/home/ahrens@thursday # zfs rollback -r tank/home/ahrens@tuesday |
In diesem Beispiel wurden die Snapshots wednesday und thursday gelöscht, da Sie den Zustand des davor liegenden Snapshots tuesday wiederhergestellt haben.
# zfs list -r -t snapshot -o name,creation tank/home/ahrens NAME CREATION tank/home/ahrens@now Wed Jun 30 16:16 2010 |
Ein Klon ist ein schreibbares Volume bzw. Dateisystem, dessen anfänglicher Inhalt gleich dem des Datasets ist, von dem er erstellt wurde. Ebenso wie Snapshots werden auch Klone sehr schnell erstellt und belegen anfänglich keine zusätzliche Festplattenkapazität. Darüber hinaus können Sie Snapshots von Klonen erstellen.
Klone können nur von Snapshots erstellt werden. Beim Klonen eines Snapshots wird zwischen dem Klon und dem Snapshot eine implizite Abhängigkeit erstellt. Obwohl der betreffende Klon an anderer Stelle der Dataset-Hierarchie erstellt wird, kann der ursprüngliche Snapshot nicht gelöscht werden, solange von ihm ein Klon vorhanden ist. Die Eigenschaft origin enthält diese Abhängigkeit, und mit dem Befehl zfs destroy können solche Abhängigkeiten aufgelistet werden, falls sie vorhanden sind.
Klone erben keine Eigenschaften von dem Dataset, von dem sie erstellt wurden. Mit den Befehlen zfs get und zfs set können Sie die Eigenschaften eines geklonten Datasets anzeigen und ändern. Weitere Informationen zum Setzen von Eigenschaften von ZFS-Datasets finden Sie unter Setzen von ZFS-Eigenschaften.
Da ein Klon seine gesamte Festplattenkapazität anfänglich mit dem ursprünglichen Snapshot gemeinsam nutzt, ist sein Eigenschaftswert used zu Beginn auf null gesetzt. Wenn am Klon Änderungen vorgenommen werden, belegt er dementsprechend mehr Festplattenkapazität. Die Eigenschaft used des ursprünglichen Snapshots berücksichtigt keinen vom Klon belegten Speicherplatz.
Klone werden mit dem Befehl zfs clone erstellt. Sie müssen den Snapshot, von dem der Klon erstellt werden soll, sowie den Namen des neuen Dateisystems bzw. Volumes angeben. Das neue Dateisystem bzw. Volume kann sich an beliebiger Stelle innerhalb der ZFS-Hierarchie befinden. Der Typ (z. B. Dateisystem oder Volume) des neuen Datasets entspricht dem des Snapshots, aus dem der Klon erstellt wurde. Sie können von einem Dateisystem in einem anderen Pool als dem des Snapshots des ursprünglichen Dateisystems keinen Klon erstellen.
Im folgenden Beispiel wird ein neuer Klon tank/home/ahrens/bug123 mit dem gleichen anfänglichen Inhalt wie der des Snapshots tank/ws/gate@gestern erstellt:
# zfs snapshot tank/ws/gate@yesterday # zfs clone tank/ws/gate@yesterday tank/home/ahrens/bug123 |
Im folgenden Beispiel wird für einen temporären Benutzer aus dem Snapshot projects/newproject@today ein geklonter Arbeitsbereich namens projects/teamA/tempuser erstellt. Danach werden die Eigenschaften des geklonten Arbeitsbereichs gesetzt.
# zfs snapshot projects/newproject@today # zfs clone projects/newproject@today projects/teamA/tempuser # zfs set sharenfs=on projects/teamA/tempuser # zfs set quota=5G projects/teamA/tempuser |
ZFS-Klone werden mithilfe des Befehls zfs destroy gelöscht. Beispiel:
# zfs destroy tank/home/ahrens/bug123 |
Bevor ein übergeordneter Snapshot gelöscht werden kann, müssen zunächst seine Klone gelöscht werden.
Mit dem Befehl zfs promote können Sie ein aktives ZFS-Dateisystem durch einen Klon dieses Dateisystems ersetzen. Diese Funktion ermöglicht das Klonen und Ersetzen von Dateisystemen, sodass das ursprüngliche Dateisystem der Klon des betreffenden Dateisystems werden kann. Darüber hinaus ermöglicht diese Funktion das Löschen des Dateisystems, von dem der Klon ursprünglich erstellt wurde. Ohne diese ?Klon-Promotion“ können ursprüngliche Dateisysteme, in denen aktive Klone enthalten sind, nicht gelöscht werden. Weitere Informationen zum Löschen von Klonen finden Sie unter Löschen eines ZFS-Klons.
Im folgenden Beispiel wird das Dateisystem tank/test/produktA geklont. Anschließend wird das geklonte Dateisystem (tank/test/produktAbeta) zum ursprünglichen Dateisystem tank/test/produktA gemacht.
# zfs create tank/test # zfs create tank/test/productA # zfs snapshot tank/test/productA@today # zfs clone tank/test/productA@today tank/test/productAbeta # zfs list -r tank/test NAME USED AVAIL REFER MOUNTPOINT tank/test 104M 66.2G 23K /tank/test tank/test/productA 104M 66.2G 104M /tank/test/productA tank/test/productA@today 0 - 104M - tank/test/productAbeta 0 66.2G 104M /tank/test/productAbeta # zfs promote tank/test/productAbeta # zfs list -r tank/test NAME USED AVAIL REFER MOUNTPOINT tank/test 104M 66.2G 24K /tank/test tank/test/productA 0 66.2G 104M /tank/test/productA tank/test/productAbeta 104M 66.2G 104M /tank/test/productAbeta tank/test/productAbeta@today 0 - 104M - |
In dieser Ausgabe des Befehls zfs list sehen Sie, dass die Festplattenkapazitätsangabe des ursprünglichen Dateisystems produktA durch die des Dateisystems produktAbeta ersetzt wurde.
Sie können den Ersetzungsvorgang durch Umbenennen der Dateisysteme abschließen. Beispiel:
# zfs rename tank/test/productA tank/test/productAlegacy # zfs rename tank/test/productAbeta tank/test/productA # zfs list -r tank/test |
Optional können Sie auch das alte Dateisystem entfernen. Beispiel:
# zfs destroy tank/test/productAlegacy |
Der Befehl zfs send erstellt von Snapshots Datenstrominstanzen, die auf die Standardausgabe geschrieben werden. Standardmäßig wird ein vollständiger Datenstrom erzeugt. Sie können die Ausgabe in eine Datei oder ein anderes Dateisystem umleiten. Der Befehl zfs receive erstellt einen Snapshot, dessen Inhalt in einem Datenstrom auf der Standardeingabe angegeben wird. Wenn ein vollständiger Datenstrom gelesen wurde, wird ein neues Dateisystem erstellt. Mit diesen Befehlen können Sie ZFS-Snapshot-Daten senden und ZFS-Snapshot-Daten und Dateisysteme empfangen. Siehe hierzu die Beispiele im nachfolgenden Abschnitt.
Die folgenden Lösungen zum Sichern von ZFS-Daten stehen zur Verfügung:
Sicherungsprodukte für Unternehmen – Wenn Sie Bedarf an folgenden Leistungsmerkmalen haben, sollten Sie eine Unternehmenslösung für die Datensicherung in Betracht ziehen:
Wiederherstellung auf Dateibasis
Überprüfung der Datensicherungsmedien
Medienverwaltung
Dateisystem-Snapshots und Wiederherstellen des früheren Zustands eines Dateisystems – Mit den Befehlen zfs snapshot und zfs rollback können Sie auf einfache Weise Kopien von Dateisystemen erstellen und aus diesen bei Bedarf Dateisysteme auf einen früheren Zustand zurücksetzen. Sie können die Lösung beispielsweise verwenden, wenn Sie ein Dateisystem bzw. Dateien aus einer früheren Dateisystemversion wiederherstellen möchten.
Weitere Informationen zum Erstellen von Snapshots und Wiederherstellen einer früheren Version aus einem Snapshot finden Sie unter Überblick über ZFS-Snapshots.
Sichern von Snapshots – Mit den Befehlen zfs send und zfs receive können Sie ZFS-Snapshots senden und empfangen. Sie können inkrementelle Änderungen zwischen Snapshots sichern, Dateien können jedoch nicht einzeln wiederhergestellt werden. Stattdessen muss der gesamte Dateisystem-Snapshot wiederhergestellt werden. Diese Befehle stellen keine vollständige Sicherungslösung für Ihre ZFS-Daten dar.
Replikation über Netzwerk – Mit den Befehlen zfs send und zfs receive können Sie Dateisysteme von einem System auf ein anderes kopieren. Dieser Vorgang unterscheidet sich von herkömmlichen Praktiken bei Software zur Datenträgerverwaltung, die Datenspeichergeräte über WAN spiegeln. Dafür ist keine spezielle Konfiguration bzw. Hardware erforderlich. Der Vorteil der Replikation eines ZFS-Dateisystems besteht darin, dass das betreffende Dateisystem in einem Speicher-Pool eines anderen Systems neu erstellt werden kann und Sie für diesen neuen Pool verschiedene Replikationsmethoden wie z. B. RAID-Z angeben können, die Dateisystemdaten aber gleich bleiben.
Archivierungsdienstprogramme – Speichern von ZFS-Daten mit Archivierungsdienstprogrammen wie tar, cpio und pax oder Datensicherungssoftware von Drittherstellern. Derzeit konvertieren tar und cpio die NFSv4-basierten Zugriffssteuerungslisten korrekt, pax hingegen nicht.
Neben den Befehlen zfs send und zfs receive können Sie zum Sichern von ZFS-Dateien auch Archivierungsdienstprogramme wie z. B. tar und cpio verwenden. Diese Dienstprogramme sichern ZFS-Dateiattribute und -Zugriffssteuerungslisten und können diese auch wiederherstellen. Überprüfen Sie die entsprechenden Optionen der Befehle tar und cpio.
Aktuelle Informationen zu Problemen im Zusammenhang mit ZFS und Sicherungssoftware von Drittherstellern finden Sie in den Solaris 10-Versionshinweisen oder den ZFS FAQs unter:
http://hub.opensolaris.org/bin/view/Community+Group+zfs/faq/#backupsoftware
Der Befehl zfs send dient zum Senden der Kopie eines Snapshot-Datenstroms und zum Empfangen des Snapshot-Datenstroms in einem anderen Pool auf demselben System oder in einem anderen Pool auf einem anderen System, das zur Aufbewahrung von Sicherungsdaten verwendet wird. Zum Senden des Snapshot-Datenstroms an einen anderen Pool auf demselben System verwenden Sie beispielsweise folgende Syntax:
# zfs send tank/data@snap1 | zfs recv spool/ds01 |
Sie können zfs recv als Aliasnamen für den Befehl zfs receive verwenden.
Wenn Sie den Snapshot-Datenstrom an ein anderes System senden, setzen Sie für die Ausgabe von zfs send mit dem Befehl ssh eine Pipeline. Beispiel:
host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana |
Wenn Sie einen vollständige Datenstrom senden, darf das Zieldateisystem nicht vorhanden sein.
Sie können inkrementelle Daten mit der Option i des Befehls -zfs send senden. Beispiel:
host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana |
Bitte beachten Sie, dass das erste Argument (snap1) der frühere und das zweite Argument (snap2) der spätere Snapshot ist. In diesem Fall muss das Dateisystem newtank/dana bereits vorhanden sein, damit die inkrementellen Daten empfangen werden können.
Die inkrementelle Quelle snap1 kann als letzte Komponente des Snapshot-Namens angegeben werden. Dies bedeutet, dass Sie nach dem Zeichen @ für snap1 nur den Namen angeben müssen, von dem angenommen wird, dass er zum gleichen System wie snap2 gehört. Beispiel:
host1# zfs send -i snap1 tank/dana@snap2 > ssh host2 zfs recv newtank/dana |
Diese Kurzsyntax entspricht der im vorherigen Beispiel demonstrierten inkrementellen Syntax.
Die folgende Meldung wird angezeigt, wenn Sie versuchen, aus einem anderen Dateisystem (snapshot1) einen inkrementellen Datenstrom zu erzeugen.
cannot send 'pool/fs@name': not an earlier snapshot from the same fs |
Wenn mehrere Kopien gespeichert werden sollen, kann eine Komprimierung der Datenstrominstanz des ZFS-Snapshots mithilfe des Befehls gzip nützlich sein. Beispiel:
# zfs send pool/fs@snap | gzip > backupfile.gz |
Beim Empfangen von Datensystem-Snapshots sollten Sie folgenden wichtigen Punkte beachten:
Sowohl der Snapshot als auch das Dateisystem werden empfangen.
Das Dateisystem und alle untergeordneten Dateisysteme werden ausgehängt.
Während des Empfangs kann auf die betreffenden Dateisysteme nicht zugegriffen werden.
Das ursprüngliche Dateisystem, das empfangen werden soll, darf bei der Übertragung nicht vorhanden sein.
Wenn der Dateisystemname bereits vorhanden ist, können Sie das Dateisystem mit dem Befehl zfs rename umbenennen.
Beispiel:
# zfs send tank/gozer@0830 > /bkups/gozer.083006 # zfs receive tank/gozer2@today < /bkups/gozer.083006 # zfs rename tank/gozer tank/gozer.old # zfs rename tank/gozer2 tank/gozer |
Wenn Sie am Zieldateisystem eine Änderung vornehmen und danach einen weiteren inkrementellen Snapshot senden möchten, müssen Sie zunächst den vorherigen Zustand des Zieldateisystems wiederherstellen.
Betrachten wir das folgende Beispiel. Zunächst ändern Sie das Dateisystem wie folgt:
host2# rm newtank/dana/file.1 |
Dann senden Sie einen weiteren inkrementellen Snapshot (tank/dana@snap3). Sie müssen jedoch erst den vorherigen Zustand des Zieldateisystems wiederherstellen, damit es den neuen inkrementellen Snapshot empfangen kann. Sie können den Wiederherstellungsschritt aber auch mithilfe der Option -F überspringen. Beispiel:
host1# zfs send -i tank/dana@snap2 tank/dana@snap3 | ssh host2 zfs recv -F newtank/dana |
Beim Empfang eines inkrementellen Snapshots muss das Zieldateisystem bereits vorhanden sein.
Wenn Sie am Dateisystem Änderungen vornehmen und den vorherigen Zustand des Zieldateisystems nicht wiederherstellen, sodass es den neuen inkrementellen Snapshot empfangen kann, oder Sie die Option -F nicht verwenden, wird eine Meldung wie die folgende angezeigt:
host1# zfs send -i tank/dana@snap4 tank/dana@snap5 | ssh host2 zfs recv newtank/dana cannot receive: destination has been modified since most recent snapshot |
Bevor das Ausführen der Option -F als erfolgreich gemeldet wird, werden die folgenden Überprüfungen durchgeführt:
Wenn der letzte Snapshot nicht mit der inkrementellen Quelle identisch ist, wird weder die Wiederherstellung des früheren Zustands noch der Empfang abgeschlossen, und es wird eine Fehlermeldung angezeigt.
Wenn Sie versehentlich den Namen eines anderen Dateisystems angeben, der mit dem inkrementellen Quellparameter des Befehls zfs receive nicht übereinstimmt, wird weder die Wiederherstellung des früheren Zustands noch der Empfang abgeschlossen, und es wird die folgende Fehlermeldung angezeigt:
cannot send 'pool/fs@name': not an earlier snapshot from the same fs |
In diesem Abschnitt wird das Senden und Empfangen komplexerer Snapshot-Datenströme mit den Befehlen zfs send -I und -R beschrieben.
Beachten Sie beim Senden und Empfangen von komplexen ZFS-Snapshot-Datenströmen Folgendes:
Verwenden Sie zfs send mit der Option -I, um alle inkrementellen Datenströme aus einem Snapshot an einen kumulativen Snapshot zu senden. Sie können mithilfe dieser Option aber auch einen inkrementellen Datenstrom aus dem ursprünglichen Snapshot senden, um einen Klon zu erstellen. Der ursprüngliche Snapshot muss auf der Empfangsseite bereits vorhanden sein, damit der inkrementelle Datenstrom angenommen werden kann.
Mit zfs send und der Option -R senden Sie einen Replikationsdatenstrom aller untergeordneten Dateisysteme. Nach dem Empfang des Replikationsdatenstroms werden alle Eigenschaften, Snapshots, abhängigen Dateisysteme und Klone beibehalten.
Verwenden Sie beide Optionen, um einen inkrementellen Replikationsdatenstrom zu senden.
Änderungen an Eigenschaften werden beibehalten, ebenso wie Namensänderungen von Snapshots und Dateisystemen und Löschvorgänge.
Wenn zfs recv -F beim Empfang des Replikationsdatenstroms nicht angegeben ist, werden Löschvorgänge von Datasets ignoriert. In diesem Fall behält die Syntax zfs recv -F auch die Bedeutung Bei Bedarf Rollback bei.
Wie in anderen Fällen (außer zfs send -R) mit - i oder -I werden bei Verwendung von -I alle Snapshots zwischen snapA und snapD gesendet. Bei Verwendung von -i wird nur snapD (für sämtliche untergeordneten Objekte) gesendet.
Der Empfang dieser mithilfe des Befehls zfs send gesendeten neuen Datenströme setzt voraus, dass auf dem empfangenden System eine Softwareversion ausgeführt wird, die in der Lage ist, diese Datenströme zu senden. Die Version des Datenstroms wird inkrementiert.
Es ist jedoch möglich, auf Datenströme aus älteren Pool-Versionen über neuere Softwareversionen zuzugreifen. So können Sie beispielsweise Datenströme, die mit den neueren Optionen erstellt wurden, an und aus Pools der Version 3 senden. Zum Empfangen eines mit den neueren Optionen gesendeten Datenstroms muss jedoch aktuelle Software ausgeführt werden.
Eine Gruppe inkrementeller Snapshots lässt sich mithilfe von zfs send und der Option -I zu einem Snapshot kombinieren. Beispiel:
# zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@all-I |
Anschließend entfernen Sie snapB, snapC und snapD.
# zfs destroy pool/fs@snapB # zfs destroy pool/fs@snapC # zfs destroy pool/fs@snapD |
Um den kombinierten Snapshot zu empfangen, verwenden Sie den folgenden Befehl.
# zfs receive -d -F pool/fs < /snaps/fs@all-I # zfs list NAME USED AVAIL REFER MOUNTPOINT pool 428K 16.5G 20K /pool pool/fs 71K 16.5G 21K /pool/fs pool/fs@snapA 16K - 18.5K - pool/fs@snapB 17K - 20K - pool/fs@snapC 17K - 20.5K - pool/fs@snapD 0 - 21K - |
Außerdem können Sie mit zfs send -I einen Snapshot und einen Klon-Snapshot zu einem kombinierten Dataset verbinden. Beispiel:
# zfs create pool/fs # zfs snapshot pool/fs@snap1 # zfs clone pool/fs@snap1 pool/clone # zfs snapshot pool/clone@snapA # zfs send -I pool/fs@snap1 pool/clone@snapA > /snaps/fsclonesnap-I # zfs destroy pool/clone@snapA # zfs destroy pool/clone # zfs receive -F pool/clone < /snaps/fsclonesnap-I |
Mit dem Befehl zfs send -R können Sie ein ZFS-Dateisystem und alle untergeordneten Dateisysteme bis hin zum benannten Snapshot replizieren. Nach dem Empfang dieses Datenstroms werden alle Eigenschaften, Snapshots, abhängigen Dateisysteme und Klone beibehalten.
Im folgenden Beispiel werden Snapshots für Benutzerdateisysteme erstellt. Es wird ein Replikationsdatenstrom für alle Benutzer-Snapshots erstellt. Anschließend werden die ursprünglichen Dateisysteme und Snapshots gelöscht und wiederhergestellt.
# zfs snapshot -r users@today # zfs list NAME USED AVAIL REFER MOUNTPOINT users 187K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - # zfs send -R users@today > /snaps/users-R # zfs destroy -r users # zfs receive -F -d users < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 196K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - |
Im folgenden Beispiel wird der Befehl zfs send -R verwendet, um das Dataset users und seine untergeordneten Objekte zu replizieren und den replizierten Datenstrom an einen anderen Pool, users2, zu senden.
# zfs create users2 mirror c0t1d0 c1t1d0 # zfs receive -F -d users2 < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 224K 33.2G 22K /users users@today 0 - 22K - users/user1 33K 33.2G 18K /users/user1 users/user1@today 15K - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - users2 188K 16.5G 22K /users2 users2@today 0 - 22K - users2/user1 18K 16.5G 18K /users2/user1 users2/user1@today 0 - 18K - users2/user2 18K 16.5G 18K /users2/user2 users2/user2@today 0 - 18K - users2/user3 18K 16.5G 18K /users2/user3 users2/user3@today 0 - 18K - |
Mit den Befehlen zfs send und zfs recv können Sie eine Datenstrominstanz über das Netzwerk von einem System auf ein anderes kopieren. Beispiel:
# zfs send tank/cindy@today | ssh newsys zfs recv sandbox/restfs@today |
Mithilfe des Befehls wird der Snapshot tank/cindy@today gesendet und vom Dateisystem sandbox/restfs empfangen. Außerdem wird ein restfs@today-Snapshot für das System newsys erstellt. In diesem Beispiel wird auf dem entfernten System ssh verwendet.