Für die Administration von ZFS Dateisystemen werden lediglich zwei Befehle benötigt.
Mit dem Befehl "zpool" können die genutzten Datenträger konfiguriert werden. So können Verbünde von Festplatten abgelegt, erweitert oder gelöscht werden
Mit "zfs" kann das Dateisystem konfiguriert werden. Dies umfasst z.B. das Erstellen von Backups, das Mounten von ZFS Volumes usw. Im Folgenden werden einige wichtige Befehle und Abläufe anhand von Beispielen näher erläutert. Der Storage Pool wird in den Beispielen fhw genannt.
Die meisten Dinge können ebenfalls über die grafische Oberfläche per Webbrowser konfiguriert werden. Dies wird hier jedoch nicht näher betrachtet.
Das Anlegen eines Storage Pools gestaltet sich relativ einfach.
Die verfügbaren Datenträger lassen sich mit "rmformat" anzeigen
Mit dem Befehl
zpool create fhw c6t0d0p0
wird ein neues Volume innerhalb weniger Sekunden angelegt. Das neue Dateisystem wird automatisch in /fhw gemountet und ist sofort nutzbar. Ein formatieren o.ä. ist nicht notwendig.
Mit der Option "-m" lässt sich auch ein anderer Mountpoint einrichten. Bsp:
zpool create -m /mymount fhw c6t0d0p0
Sollte der Speicherplatz eines Datenträgers nicht ausreichen, kann man das Volume auf sehr einfache Weise erweitern. Der Befehl:
zpool add fhw c7t0d0p0
erweitert das Filesystem um einen Datenträger. Dies entspricht dem bereits bekannten RAID 0. Die Daten werden auf alle Datenträger verteilt, so dass die Transferrate zunimmt. Allerdings erhöht sich hierdurch auch die Wahrscheinlichkeit von Datenverlust, da der Ausfall von nur einem Datenträger aus dem Pool ausreicht sämtliche Daten unbrauchbar zu machen.
In den meisten Fällen wünschen die Anwender jedoch keinen Pool, der nur auf Größe ausgelegt ist, sondern auch eine gewisse Ausfallsicherheit bietet. Bei anderen Dateisystemen ist das Erstellen eines Software RAIDs oder eines Mirrors meisten recht kompliziert. Mit ZFS kann solch ein redundanter Verbund jedoch mit nur einem Befehl erstellt werden.
Gespiegelte Platten lassen sich folgendermaßen erstellen.
zpool create fhw mirror c6t0d0p0 c7t0d0p0
Es können auch problemlos Verbunde mit mehreren Mirrors hinzugefügt werden, indem einfach ein weiterer Mirror an den Befehl gehängt wird. Über die "add" Option lässt sich dies auch im Nachhinein erledigen.
RAID Verbunde können ähnlich einfach erstellt werden.
zpool create fhw raidz c6t0d0p0 c7t0d0p0 c8t0d0p0 c9t0d0p0
Der Befehl erstellt einen RAID Verbund mit 4 Datenträgern. Dabei darf maximal ein Datenträger ausfallen. Wird statt raidz die Option raidz2 verwendet, können bis zu 2 Datenträger ausfallen
Bei der Erstellung muss darauf geachtet werden, dass alle genutzten Datenträger exakt die selbe Größe haben. Sollte dies nicht der Fall sein, kann mit der Option -f dennoch ein Verbund hinzugefügt werden, indem die kleinste Größe als Größe für alle Datenträger angenommen wird.
Es gibt zusätzlich die Möglichkeit "Reserveplatten", die sogenannten Hot Spares, in einen Verbund einzubinden. Im Normalzustand werden sie nicht genutzt und erst dann aktiviert, wenn eine aktive Platte ausfällt. Bei einem Problem wird automatisch ein resilver Vorgang gestartet. Nach Abschluss des Vorgangs ist die Redundanz der Datenträger wieder gegeben.
zpool add fhw spare c9t0d0p0
Das Kommando fügt einen Spare in den fhw pool ein. Sollte ein Problem auftreten und der Spare benutzt werden, bleibt der Pool trotzdem im Status Degrated.
Im Gegensatz zu normalen Datenträgern, können Spares auch wieder entfernt werden. Dies geschieht mit der Option remove.
Mit "zpool list" werden sämtliche Pools inklusive Größe, aktueller Kapazität sowie dem "Health" Status aufgelistet.
# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT fhw 20.0G 9.3G 10.7G 51% ONLINE -
Für den Health Status eines Storage Pools gibt es fünf verschiedene Meldungen
ONLINE: Der normale Arbeitsstatus. Es liegen keine größeren Problem vor.
OFFLINE: Der Pool wurde vom Administrator deaktiviert
DEGRADED: Es ist ein Fehler aufgetreten, jedoch kann noch problemlos weitergearbeitet werden. Dies tritt beispielsweise auf, wenn ein Datenträger aus einem redundanten Verbund ausgefallen ist.
FAULTED: Zugriff auf den Pool ist nicht mehr möglich, da ein schwerwiegendes Problem vorliegt.
UNAVAILABLE: Zugriff auf den physischen Pool ist nicht mehr möglich.
Mit dem Befehl "zpool iostat" kann die IO Statistik ausgegeben werden. Sie enthält neben der Kapazität des Pools die Anzahl aller Lese- und Schreiboperationen, sowie deren aktuelle Bandbreite. Mit der Option "-v" können die Daten auch für jeden einzelnen Datenträger abgerufen werden. Auf diese Weise können problematische Geräte erkannt und evtl. ausgetauscht werden.
Mit dem Kommando "zpool status" können Informationen über sämtliche Storage Pools abgerufen werden. Es wird unter anderem angezeigt, in welchem Status sich der Pool befindet
Sollte im laufenden Betrieb ein Datenträger ausfallen kann dieser problemlos ersetzt werden. Nachdem er mit "zpool status" identifiziert wurde kann er mit dem Befehl "zpool replace poolname Datenträgerbezeichnung" neu hinzugefügt werden. Daraufhin wird der neue Datenträger eingebunden und ein resilvering automatisch durchgeführt.
Der Befehl der Befehl "zpool export fhw" migriert einen Pool von einem Rechner auf einen neuen. Durch den Export werden alle offenen Schreibaktionen abgeschlossen und der Storagepool vom aktuellen System entfernt. Dies kann jedoch nur durchgeführt werden, wenn keine Anwendungen mehr auf ein Volume des Pools zugreifen.
Mit "zpool import fhw" wird der Pool auf dem neuen System wieder eingebunden und gemountet.
Sollte ein ZFS Pool nicht mehr benötigt werden, kann er mit
zpool destroy fhw
entfernt werden. Die genutzten Datenträger können danach wieder für neue Dateisysteme genutzt werden.
In einen Storage Pool können beliebige Dateisysteme eingefügt werden. Sie können in einer Hierarchie angeordnet werden und so Eigenschaften des Vorgängers erben.
zfs create fhw/home
Erzeugt ein neues Dateisystem. Dieses soll jedoch beispielsweise nur als Container für spätere Userverzeichnisse dienen. Dabei sollen alle User bestimmte Parameter von diesem Container erben.
Für das erstellte Dateisystem sollen nun einige Eigenschaften gesetzt werden, die alle später folgenden Userverzeichnisse übernehmen. Hier für gibt es eine große Auswahl an Optionen. Hier werden nur einige wichtige aufgeführt. Weitere Optionen finden sich in den man pages. Die Optionen werden folgendermaßen festgelegt.
zfs set property=Wert fhw/home
atime: Die Einstellung kann das Schreiben des letzten Zugriffs auf die Dateien verwalten. Dies erhöht die Performance, da nicht bei jedem lesenden Zugriff geschrieben werden muss. Allerdings funktionieren einige Mail Programme und ähnliche Tools bei Deaktivierung nicht mehr richtig.
checksum: Mit dieser Einstellung lässt sich der verwendete Checksummen Algorithmus auswählen, bzw. ganz abschalten. Zur Auswahl stehen fletcher2, fletcher4 und sha256. Das Ausschalten der Integritätsprüfung wird nicht empfohlen. Der default Wert ist fletcher2
compression: Für jedes Dateisystem kann die Art der Kompression gewählt werden. Zur Auswahl stehen lzjb, gzip und gzip-N. Per default ist die Option ausgeschaltet. Bei Aktivierung werden nur neue Daten auf dem Datenträger komprimiert. Alte Daten bleiben unverändert.
copies: Mit dieser Option wird die Anzahl der Ditto Blöcke festgelegt. Diese erhöht die Ausfallsicherheit insbesondere auf Pools, die nur auf einem physischen Datenträger liegen. Per default ist diese Option auf 1 gesetzt bzw. deaktiviert. Weitere mögliche Werte sind 2 und 3 Kopien. Bestehende Daten auf dem Dateisystem sind von der Option nicht betroffen. Deshalb sollte sie schon während der Erstellung des Dateisystems aktiviert werden.
mountpoint: Legt den Mountpoint des Filesystems und seiner Kinder fest.
quota: Setzt eine maximale Größe für das Dateisystem inklusive aller Snapshots und Clones.
readonly: Verbietet den schreibenden Zugriff auf das Dateisystem. Die Option ist per default ausgeschaltet.
recordsize: Legt die vorgeschlagene Blockgröße für das Dateisystem fest. Der default Wert ist 128K.
reservation: Reserviert eine bestimmte Größe im Stoarage Pool.
sharenfs: Legt die Verfügbarkeit per NFS fest. Sollte die Einstellung ausgeschaltet sein, kann das Verzeichnis auch über die systeminternen Funktionen per NFS geshared werden.
sharesmb: Ähnlich wie sharenfs. In diesem Fall wird jedoch per SMB bzw. CIFS freigegeben.
Zusätzlich können mit "zfs get all poolname" sämtliche Einstellungen ausgelesen werden. Einige weitere Parameter wie die Erstellungszeit und das geerbte Dateisystem sind ebenfalls als read-only Parameter zugreifbar.
Im Folgenden sollen die Dateisystemproperties anhand eines Beispieles näher erläutert werden. Häufig möchte man einem User eine bestimmte Kapazität in seinem Home Verzeichnis zusichern, jedoch auch sicherstellen, dass er nicht den gesamten Storage Pool belegt.
zfs set quota=10G fhw/home/user zfs set reservation=1G fhw/home/user
Nun stehen für dieses Dateisystem und all seine Kinder maximal 10 GB zur Verfügung und mindestens 1 GB wurde reserviert.
"zfs list" zeigt alle Dateisysteme und Snapshots inklusive ihrer Größe und dem verbrauchten Speicherplatz an.
Die Anzeige kann dabei mit der "-r" Option auch auf bestimmte Pfade in der Dateisystem Hierarchie eingeschränkt werden .
Snapshots werden mit folgendem Befehl erstellt:
zfs snapshot FS_Name@snapshotname
Er befindet sich in dem auch per "ls -a" nicht sichtbaren Verzeichnis " .zfs" und kann von dort aus gelesen werden.
Das zurückspielen eines Snapshots funktioniert mit dem Befehl:
zfs rollback FS_Name@snapshotname
Sollte es neuere Snapshots als den angegebenen geben, ist es notwendig zusätzlich die Option -r zu nutzen. Dies löscht jedoch sämtliche späteren Snapshots.
Die Snapshots können mit
zfs clone snapshotname FS_Name
in beschreibbare Dateisysteme umgewandelt werden.