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
8. Schützen von Oracle Solaris ZFS-Dateien mit Zugriffskontrolllisten und Attributen
9. Delegierte Oracle Solaris ZFS-Administration
10. Fortgeschrittene Oracle Solaris ZFS-Themen
Verwendung von ZFS-Volumes als Swap- bzw. Dump-Gerät
Verwendung von ZFS-Volumes als Solaris-iSCSI-Zielgerät
Verwendung von ZFS in einem Solaris-System mit installierten Zonen
Hinzufügen von ZFS-Dateisystemen zu einer nicht globalen Zone
Delegieren von Datasets in eine nicht globale Zone
Hinzufügen von ZFS-Volumes zu einer nicht globalen Zone
Verwenden von ZFS-Speicher-Pools innerhalb einer Zone
Verwenden von ZFS-Speicher-Pools mit alternativem Root-Verzeichnis
Erstellen von ZFS-Speicher-Pools mit alternativem Root-Verzeichnis
Importieren von Speicher-Pools mit alternativem Root-Verzeichnis
11. Problembehebung und Pool-Wiederherstellung in Oracle Solaris ZFS
In den folgenden Abschnitten wird die Verwendung von ZFS auf Systemen mit Oracle Solaris-Zonen beschrieben:
Informationen zum Konfigurieren eines Systems mit einem ZFS-Root-Dateisystem, das mithilfe von Live Upgrade migriert oder gepatcht werden soll, finden Sie unter Verwenden von Live Upgrade zum Migrieren oder Aktualisieren eines Systems mit Zonen (Solaris 10 10/08) oder Verwenden des Oracle Solaris Live Upgrade zum Migrieren oder Aktualisieren eines Systems mit Zonen (ab Solaris 10 5/09).
Für die Zusammenarbeit von ZFS-Datasets mit Zonen sollten Sie folgende Aspekte berücksichtigen:
Sie können ein ZFS-Dateisystem bzw. einen ZFS-Klon mit oder ohne Delegierung der Verwaltungssteuerung zu einer nicht globalen Zone hinzufügen.
ZFS-Volumes können als Gerät zu nicht globalen Zonen hinzugefügt werden.
Derzeit können ZFS-Schnappschüsse nicht in Zonen erstellt werden.
In den folgenden Abschnitten wird mit dem Begriff "ZFS-Dataset" ein Dateisystem bzw. Klon bezeichnet.
Durch Hinzufügen eines Datasets kann sich eine nicht globale Zone Festplattenkapazität mit der globalen Zone teilen, obwohl der Zonen-Administrator in der zugrunde liegenden Dateisystemhierarchie keine Eigenschaften einstellen bzw. keine neuen Dateisysteme erstellen kann. Dieser Vorgang ist mit dem Hinzufügen anderer Dateisystemtypen zu einer Zone identisch und sollte dann verwendet werden, wenn das Hauptziel in der gemeinsamen Nutzung von Festplattenkapazität besteht.
In ZFS können Datasets auch an eine nicht globale Zone delegiert werden. Dadurch erlangt der Zonen-Administrator vollständige Kontrolle über diese Datasets und alle seine untergeordneten Objekte. Der Zonen-Administrator kann Dateisysteme bzw. Klone in diesem Dataset erstellen oder löschen sowie Dataset-Eigenschaften ändern. Der Zonen-Administrator hat jedoch keine Kontrolle über Datasets, die nicht zur betreffenden Zone hinzugefügt wurden, und darf die für die oberste Hierarchieebene des delegierten Datasets gesetzten Kontingente nicht überschreiten.
Bei der Verwendung von ZFS auf Systemen mit installierten Oracle Solaris-Zonen sollten Sie Folgendes berücksichtigen:
Die Eigenschaft mountpoint eines zu einer nicht globalen Zone hinzugefügten ZFS-Dateisystems muss auf "legacy" gesetzt sein.
Sehen Sie aufgrund von CR 6449301 davon ab, einer nicht globalen Zone bei der Konfiguration ein ZFS-Dataset hinzuzufügen. Sie können das·ZFS-Dataset hinzufügen, nachdem die Zone installiert wurde.
Befinden sich der zonepath der Quelle und der zonepath des Ziels in einem ZFS-Dateisystem und im gleichen Pool, so verwendet der Befehl zoneadm clone nun automatisch die ZFS-Klonfunktion, um die Zone zu klonen. Mit dem Befehl zoneadm clone wird ein ZFS-Schnappschuss des zonepath-Quellverzeichnisses erstellt und das zonepath-Zielverzeichnis eingerichtet. Das Klonen einer Zone mit dem Befehl zfs clone ist nicht möglich. Weitere Informationen finden Sie in Teil II, Zonen in Systemverwaltungshandbuch: Oracle Solaris Container – Ressourcenverwaltung und Solaris Zones.
Wenn Sie ein ZFS-Dateisystem an eine nicht globale Zone delegieren, müssen Sie dieses Dateisystem vor der Verwendung des Oracle Solaris Live Upgrade aus der nicht globalen Zone entfernen. Andernfalls kann das Oracle Live Upgrade nicht ausgeführt werden, was auf einen Fehler im Zusammenhang mit dem Schreibschutz des Dateisystems zurückzuführen ist.
Wenn das Hauptziel ausschließlich in der gemeinsamen Nutzung von Speicherplatz mit der globalen Zone besteht, können Sie ein ZFS-Dateisystem zu einer nicht globalen Zone als generisches Dateisystem hinzufügen. Die Eigenschaft mountpoint eines zu einer nicht globalen Zone hinzugefügten ZFS-Dateisystems muss auf "legacy" gesetzt sein. Stellen Sie beispielsweise beim Hinzufügen des Dateisystems tank/zone/zion zu einer nicht globalen Zone die Eigenschaft mountpoint in der globalen Zone wie folgt ein:
# zfs set mountpoint=legacy tank/zone/zion
Sie können ein ZFS-Dateisystem mit dem Unterbefehl add fs des Befehls zonecfg zu einer nicht globalen Zone hinzufügen.
Im folgenden Beispiel wird ein ZFS-Dateisystem durch den Administrator der globalen Zone aus der globalen Zone zu einer nicht globalen Zone hinzugefügt:
# zonecfg -z zion zonecfg:zion> add fs zonecfg:zion:fs> set type=zfs zonecfg:zion:fs> set special=tank/zone/zion zonecfg:zion:fs> set dir=/export/shared zonecfg:zion:fs> end
Diese Syntax fügt das ZFS-Dateisystem tank/zone/zion zur bereits konfigurierten und unter /export/shared eingehängten Zone zion hinzu. Die Eigenschaft mountpoint des Dateisystems muss auf legacy gesetzt sein, und das Dateisystem darf nicht schon irgendwo anders eingehängt sein. Der Zonenadministrator kann Dateien im Dateisystem erstellen und löschen. Das Dateisystem kann nicht an einer anderen Stelle eingehängt werden, und der Zonenadministrator kann keine Dateisystemeigenschaften wie z. B. atime, readonly, compression usw. ändern. Der Administrator der globalen Zone ist für das Einstellen und Steuern von Dateisystemeigenschaften verantwortlich.
Weitere Informationen zum Befehl zonecfg sowie zur Konfiguration von Ressourcentypen mithilfe von zonecfg finden Sie unter Teil II, Zonen in Systemverwaltungshandbuch: Oracle Solaris Container – Ressourcenverwaltung und Solaris Zones.
Wenn das Hauptziel in der Delegierung der Speicherplatzverwaltung an eine Zone besteht, können Datasets mit dem Unterbefehl add dataset des Befehls zonecfg zu einer nicht globalen Zone hinzugefügt werden.
Im folgenden Beispiel wird ein ZFS-Dateisystem durch den Administrator der globalen Zone aus der globalen Zone an eine nicht globale Zone delegiert:
# zonecfg -z zion zonecfg:zion> add dataset zonecfg:zion:dataset> set name=tank/zone/zion zonecfg:zion:dataset> end
Im Gegensatz zum Hinzufügen von Dateisystemen wird durch diese Syntax das ZFS-Dateisystem tank/zone/zion in der bereits konfigurierten Zone zion sichtbar. Der Zonenadministrator kann Dateisystemeigenschaften einstellen und untergeordnete Dateisysteme erstellen. Darüber hinaus kann der Zonenadministrator Schnappschüsse sowie Klone erstellen und die Dateisystemhierarchie auch anderweitig steuern.
Wenn Sie Oracle Solaris Live Upgrade zur Aktualisierung der ZFS-BU mit nicht globalen Zonen verwenden, sollten Sie vorher jegliche delegierte Datasets entfernen. Andernfalls kann das Oracle Solaris Live Upgrade nicht ausgeführt werden, was auf einen Fehler im Zusammenhang mit dem Schreibschutz des Dateisystems zurückzuführen ist. Beispiel:
zonecfg:zion> zonecfg:zion> remove dataset name=tank/zone/zion zonecfg:zion1> exit
Weitere Informationen zu zulässigen Aktionen innerhalb von Zonen finden Sie unter Verwalten von ZFS-Eigenschaften innerhalb einer Zone.
ZFS-Volumes können nicht mit dem Unterbefehl add dataset des Befehls zonecfg zu einer nicht globalen Zone hinzugefügt werden. Mithilfe des Unterbefehls add device des Befehls zonecfg können Zonen jedoch Volumes hinzugefügt werden.
Im folgenden Beispiel wird ein ZFS-Volume durch den Administrator der globalen Zone aus der globalen Zone zu einer nicht globalen Zone hinzugefügt:
# zonecfg -z zion zion: No such zone configured Use 'create' to begin configuring a new zone. zonecfg:zion> create zonecfg:zion> add device zonecfg:zion:device> set match=/dev/zvol/dsk/tank/vol zonecfg:zion:device> end
Mit dieser Syntax wird das Volume tank/vol zur Zonezion hinzugefügt.
Bitte beachten Sie, dass das Hinzufügen eines Volumes im Raw-Modus auch dann Sicherheitsrisiken in sich birgt, wenn das Volume keinem physischen Datenspeichergerät entspricht. Der Zonenadministrator könnte dadurch insbesondere fehlerhafte Dateisysteme erstellen, die beim Einhängen einen Systemabsturz verursachen. Weitere Informationen zum Hinzufügen von Geräten zu Zonen und den damit verbundenen Sicherheitsrisiken finden Sie unter Informationen zur Eigenschaft zoned.
Weitere Informationen zum Hinzufügen von Geräten zu Zonen finden Sie unter Teil II, Zonen in Systemverwaltungshandbuch: Oracle Solaris Container – Ressourcenverwaltung und Solaris Zones.
ZFS-Speicher-Pools können in Zonen werder erstellt noch geändert werden. Das Modell der delegierten Administration zentralisiert die Verwaltung physischer Datenspeichergeräte in der globalen Zone und die Verwaltung von virtuellem Speicherplatz in den nicht globalen Zonen. Obwohl Datasets auf Pool-Ebene zu einer Zone hinzugefügt werden können, sind Befehle, die die physischen Eigenschaften eines Pools ändern (z. B. Erstellen, Hinzufügen oder Entfernen von Datenspeichergeräten) innerhalb einer Zone nicht zulässig. Auch wenn physische Datenspeichergeräte mit dem Unterbefehl add device des Befehls zonecfg zu einer Zone hinzugefügt oder Dateien verwendet werden, erlaubt der Befehl zpool kein Erstellen neuer Pools innerhalb der Zone.
Nach dem Delegieren eines Datasets an eine Zone kann der Zonenadministrator bestimmte Dataset-Eigenschaften einstellen. Wenn ein Dataset an eine Zone delegiert wird, sind alle seine übergeordneten Datasets als schreibgeschützte Datasets sichtbar. Das Dataset selbst sowie alle seine untergeordneten Datasets besitzen diesen Schreibschutz jedoch nicht. Betrachten wir zum Beispiel die folgende Konfiguration:
global# zfs list -Ho name tank tank/home tank/data tank/data/matrix tank/data/zion tank/data/zion/home
Würde tank/data/zion zu einer Zone hinzugefügt, besäße jedes Dataset folgende Eigenschaften.
|
Bitte beachten Sie, dass übergeordnete Datasets von tank/zone/zion schreibgeschützt sichtbar, alle untergeordneten Datasets beschreibbar und nicht zur übergeordneten Hierarchie gehörende Datasets nicht sichtbar sind. Der Zonenadministrator kann die Eigenschaft sharenfs nicht ändern, da nicht globale Zonen nicht als NFS-Server fungieren können. Der Zonenadministrator kann nicht die Eigenschaft zoned ändern, da dies ein Sicherheitsrisiko (siehe nächster Abschnitt) darstellen würde.
Privilegierte Benutzer in der Zone können jede andere einstellbare Eigenschaft ändern, ausgenommen die Eigenschaften quota und reservation. Durch dieses Verhalten kann der globale Zonenadministrator den Verbrauch von Festplattenkapazität aller Datasets in den nicht globalen Zonen überwachen.
Außerdem können nach dem Delegieren eines Datasets an eine nicht globale Zone die Eigenschaften sharenfs und mountpoint vom globalen Zonenadministrator nicht geändert werden.
Beim Delegieren eines Datasets an eine nicht globale Zone muss dieses Dataset entsprechend gekennzeichnet werden, sodass bestimmte Eigenschaften nicht im Kontext der globalen Zone interpretiert werden. Nachdem ein Dataset an eine nicht globale Zone delegiert wurde und unter der Kontrolle eines Zonenadministrators ist, ist dessen Inhalt nicht mehr vertrauenswürdig. Wie bei anderen Dateisystemen auch können setuid-Binärdateien, symbolische Verknüpfungen oder andere fragwürdige Inhalte auftreten, die sich negativ auf die Sicherheit der globalen Zone auswirken. Darüber hinaus kann die Eigenschaft mountpoint nicht im Kontext der globalen Zone interpretiert werden, da der Zonenadministrator andernfalls den Namensplatz der globalen Zone ändern kann. Zur Lösung des letzteren Problems nutzt ZFS die Eigenschaft zoned, die anzeigt, dass ein Dataset zu einem bestimmten Zeitpunkt an eine nicht globale Zone delegiert wurde.
Die Eigenschaft zoned ist ein boolescher Wert, der beim Booten einer Zone, die ein ZFS-Dataset enthält, automatisch auf "true" gesetzt wird. Diese Eigenschaft muss vom Zonenadministrator nicht manuell gesetzt werden. Wenn die Eigenschaft zoned gesetzt ist, kann das Dataset in der globalen Zone nicht eingehängt bzw. für den Netzwerkzugriff freigegeben werden. Im folgenden Beispiel wurde tank/zone/zion an eine Zone delegiert und tank/zone/global nicht:
# zfs list -o name,zoned,mountpoint -r tank/zone NAME ZONED MOUNTPOINT tank/zone/global off /tank/zone/global tank/zone/zion on /tank/zone/zion # zfs mount tank/zone/global /tank/zone/global tank/zone/zion /export/zone/zion/root/tank/zone/zion
Bitte beachten Sie den Unterschied zwischen der Eigenschaft mountpoint und dem Verzeichnis, in das das Dataset tank/zone/zion gegenwärtig eingehängt ist. Die Eigenschaft mountpoint zeigt an, wo das Dataset auf dem Datenträger gespeichert ist, und nicht, wo es gegenwärtig eingehängt ist.
Beim Entfernen eines Datasets aus einer Zone bzw. Löschen einer Zone wird die Eigenschaft zoned nicht automatisch auf "false" zurückgesetzt. Dieses Verhalten resultiert aus den diesen Aufgaben innewohnenden Sicherheitsrisiken. Da ein nicht vertrauenswürdiger Benutzer vollständigen Zugriff auf das Dataset und seine untergeordneten Datasets hatte, kann die Eigenschaft mountpoint auf ungültige Werte gesetzt worden sein oder es können in den Dateisystemen setuid-Binärdateien vorhanden sein.
Zum Vermeiden versehentlicher Sicherheitsrisiken muss die Eigenschaft zoned vom Administrator der globalen Zone manuell zurückgesetzt werden, wenn das betreffende Dataset wiederverwendet werden soll. Bevor Sie die Eigenschaft zoned auf off setzen, müssen Sie sich vergewissern, dass die Eigenschaft mountpoint des Datasets und aller seiner untergeordneten Datasets auf zulässige Werte gesetzt ist und keine setuid-Binärdateien vorhanden sind, oder die Eigenschaft setuid deaktivieren.
Nachdem Sie sich überzeugt haben, dass keine Sicherheitslücken vorhanden sind, können Sie die Eigenschaft zoned mithilfe des Befehls zfs set oder zfs inherit deaktivieren. Wenn die Eigenschaft zoned deaktiviert wird, wenn das betreffende Dataset innerhalb einer Zone verwendet wird, kann das System unvorhersehbar reagieren. Deswegen sollten Sie den Wert dieser Eigenschaft nur dann ändern, wenn Sie sich sicher sind, dass das Dataset nicht mehr von einer nicht globalen Zone verwendet wird.