Nach soviel Theorie widmet sich der restliche Artikel dem praktischen Einsatz von ZFS unter FreeBSD. Zunächst soll ein so genannter Mirrored Pool (Hardware-RAID Typ 1) entstehen. Dabei sind die einzelnen Datenträger so kombiniert, dass die Daten gespiegelt werden. Im folgenden Beispiel sind dies die zweite (»ada1
«
) und dritte (»ada2
«
) Festplatte. Der Befehl hierzu lautet:
zpool create daten mirror ada1 ada2
Der nächste Schritt erstellt das Dateisystem für das Verzeichnis »home
«
und mountet es in »/home
«
:
zfs create daten/home zfs set mountpoint=/home daten/home
Nun lassen sich für die einzelnen Benutzer die Datensätze für die Home-Verzeichnisse erstellen. Die Eigenschaften von »daten/home
«
werden dabei an die neuen Mountpoints weitergegeben.
zfs create daten/home/user_a zfs create daten/home/user_b zfs create daten/home/user_c
Die angelegten Home-Directories lassen sich sofort benutzen, da keine Formatierung notwendig ist. Wenn man nach einer gewissen Zeit feststellt, dass der Platz knapp wird, lassen sich Platten hinzufügen. Der folgende Befehl nimmt die vierte (»ada3
«
) und die fünfte (»ada4
«
) Festplatte in den Pool auf:
zpool add daten mirror ada3 ada4
Diese Aktion lässt sich während des Betriebs durchführen, während die User davon kaum etwas bemerken. Dazu muss die Hardware natürlich den Einbau im laufenden Betrieb unterstützen (Hot Swap).
Freigaben für NFS lassen sich ebenso einfach und unkompliziert erstellen. Zum Beispiel sollen alle Datasets mit den Home Directories im Netzwerk für NFS freigegeben werden:
zfs set sharenfs=rw daten/home
Wie bereits erwähnt, nutzt die FreeBSD-Version von ZFS den vorhandenen NFS-Daemon. Die Informationen über die einzelnen NFS-Shares finden sich in der Datei »/etc/exports
«
. Den NFS-Daemon veranlasst das Signal »SIG_HUP
«
dazu, sie neu einzulesen.
Quotas und Kompression sind interessante Merkmale von ZFS. So läßt sich für den gesamten Pool die Kompression einschalten. Als Algorithmus dient in diesem Beispiel LZJB:
zfs set compression=lzjb daten
Die Kompression lässt sich optional aber auch für ein einzelnes Dataset konfigurieren:
zfs set compression=lzjb daten/user_a
Quotas kann der Administrator ebenso für den gesamten Pool setzen, wie für den einzelnen Datensatz. Der User »user_b
«
bekommt im Beispiel 10 GByte und der User »user_c
«
bekommt 20 GByte Speicherplatz, dessen Kapazität garantiert ist:
zfs set quota=10g daten/home/user_b zfs set reservation=20g daten/home/user_c
Das wohl mit Abstand wichtigste Merkmal sind Snapshots. Die einzelnen Snapshots sind im Verzeichnis »${HOME}/.zfs
«
zu finden, wenn sie für den jeweiligen Benutzer angelegt wurden. Einen Snapshot für den Benutzer »user_a
«
für Donnerstag erzeugt
zfs snapshot daten/home/user_a@donnerstag
Hat der Benutzer »user_a
«
versehentlich wichtige Dateien vom Vortag (Dienstag) gelöscht, lassen sie sich mit einem Rollback schnell wieder herstellen:
zfs rollback daten/home/user_a@dienstag
Wenn in regelmäßigen Abständen Snapshots erzeugt wurden, hat der Anwender auch die Möglichkeit, alte Versionen seiner Dateien einzusehen:
cat ~user_a/.zfs/snapshot/ donnerstag/bild.odg
Alle jemals angelegten Snapshots lassen sich so anzeigen:
zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT daten/home/user_a@donnerstag 0 - 780M - daten/home/user_a@dienstag 0 - 1.01G -
Ein ZPool muss aus dem System ausgehängt werden, bevor er in Form seiner Festplatten in eine andere FreeBSD-Maschine eingebaut wird. Bei einem System-Shutdown wird dieses Kommando auch ausgeführt. Das Aushängen geschieht mit
zpool export daten
Daraufhin werden die Konfiguration, die Puffer und alle Datensätze ausgehängt. Außerdem wird der Pool geschlossen. Um den Pool beispielsweise beim Systemstart wieder für das System verfügbar zu machen, dient folgende Sequenz:
zpool import daten
Wenn man keinen ZPool angibt, listet der Befehl alle Pools auf.