
| ACL Access Control List. Eine über die übliche Unix-Berechtigung hinausgehende Spezifizierung von Zugriffsrechten auf Dateiobjekte. |
| Clone Duplikat eines Filesystems. Kann lesend und schreibend geöffnet werden. |
| Volume Manager Software, die eine logische Sicht auf physikalische Speicherbereiche ermöglicht. |
| Stripes Unter Striping versteht man die zyklische Verteilung von Daten auf mehreren Platten. Die Einheiten, mit denen die Daten abgelegt werden, werden als Stripe-Größe oder kurz Stripes bezeichnet. |
| Snapshot Abbild eines Dateisystems zu einem bestimmten Zeitpunkt. Kann nur lesend verwendet werden. |
| Spare-Platten Platten, die bei Ausfall von Komponenten als Ersatz vorgesehen sind und dann automatisch einkonfiguriert werden. |
| Tmpfs Ein Dateisystem das auf virtuellem Speicher basiert und damit besonders performant ist. Bei anderen Betriebssystemen ist dies auch als RAM-Disk bekannt. |
| RAM-Disk Virtueller und temporärer Datenträger im Arbeitsspeicher eines Computers. Bei Solaris wird das zugrunde liegende Dateisystem als tmpfs bezeichnet. |
Das neue Dateisystem ist in vielerlei Hinsicht außergewöhnlich. Zunächst einmal ist der Dimensionsvorstoß zu nennen. ZFS soll ein Symbol für bisher unerreichte Größenordnungen sein. Der Name ZFS leitet sich von der Vorsilbe Zetta (1021) ab; dies entspricht ca. 270 Byte und markiert damit noch keineswegs das "Ende der Fahnenstange" dieses 128-Bit Dateisystems.
ZFS arbeitet, wie andere moderne Dateisysteme, transaktionsorientiert. Bereits beim UFS wurde im Laufe der Zeit ein Logging-Mechanismus implementiert, der anfangs durch die Mount-Option "logging" aktiviert wurde.
Bei Solaris 10 ist der Logging-Mechanismus standardmäßig aktiviert und muss somit nicht mehr explizit angegeben werden. Bei einem Systemabsturz wird damit eine ansonsten zeitaufwändige Konsistenzprüfung überflüssig.
Die Bezeichnung des beim ZFS verwendeten Transaktionsmodells von Sun Solaris lautet "copy-on-write" (COW). Das COW-Prinzip soll darüber hinaus auch deutliche Performance-Gewinne gegenüber herkömmlichen Unix-Dateisystemen bringen. Hierzu gibt es bisher aber noch zu wenig Praxiserfahrungen, als dass genaue, zuverlässige Aussagen getroffen werden könnten.
Mit dem neuen ZFS soll der administrative Aufwand bezüglich der Arbeit mit Plattenspeichern verringert werden. Zum einen ist der Aspekt der Dateisysteme zu nennen. Waren bisher eine Reihe von Arbeitsschritten und entsprechend viele Kommandos nötig, um den Benutzern Plattenplatz zur Verfügung zu stellen (format(1m), mkfs(1m), newfs(1m), mount(1m), quota(1m), chkfs(1m) etc.), so genügen bei ZFS zwei Befehle: zfs(1m) und zpool(1m).
Dieser Vorteil bei der Übersichtlichkeit wird allerdings durch die Vielzahl der Subkommandos, die verwendet werden können/müssen, wieder wettgemacht.
Als echter Vorteil kann aber gewertet werden, dass man die ZFS-Dateisysteme nicht mehr in klassischen Konfigurationsdateien, wie z. B. /etc/vfstab pflegen muss. Allerdings kann man auf diese dennoch nicht ganz verzichten, da bisher noch nicht von ZFS gebootet werden kann.
Des Weiteren beinhaltet ZFS einen Volume Manager, mit dem sehr flexibel und auf einfache Weise die Verwaltung des Plattenplatzes gehandhabt werden kann. Als Redundanzlevel werden Mirroring und RAID-Z angeboten. RAID-Z ist dem klassischen RAID-5 ähnlich, arbeitet aber mit variablen Stripe-Größen.
Am Beispiel in Abbildung 1 wird die Administration von ZFS kurz angedeutet: Zunächst wird definiert, welcher Plattenplatz für ZFS zur Verfügung gestellt werden soll. Dies kann entweder eine ganze Platte, eine Partition, oder – nur zu Testzwecken zu empfehlen – eine Datei sein (a). Mit dem list-Kommando kann man sich das Ergebnis ansehen (b).
(a) root@sol11:/# zpool create bollog /dev/dsk/c0d0s7
(b) root@sol11:/# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
bollog 1.18G 51.5K 1.18G 0% ONLINE -
(c) root@sol11:/# df -h /bollog
Filesystem size used avail capacity Mounted on
bollog 1.1G 24K 1.1G 1% /bollog
(d) root@sol11:/# zfs create bollog/otto
(e) root@sol11:/# zfs set mountpoint=/export/home/otto bollog/otto
(f) root@sol11:/# zfs destroy bollog |
| Abb. 1: Mit einem Kommando wird ein Storage-Pool erzeugt, ein Filesystem angelegt und eingehängt. |
Gleichzeitig wird implizit ein Dateisystem auf diesem Pool angelegt und dieses ohne weitere Aktionen auch direkt (standardmäßig mit gleichem Namen) im Root-Verzeichnis eingehängt (c). In diesem Pool können weitere Dateisysteme erzeugt werden (d), die aber auch an anderer Stelle eingehängt werden können (e).
Enthält ein Verzeichnisbaum Z-FileSysteme, lassen sie sich wie gewohnt mit dem Kommando df(1M) darstellen (Abbildung 2).
root@sol11:/# df -hF zfs Filesystem size used avail capacity Mounted on bollog 4,2G 28K 4,2G 1% /bollog bollog/fs1 4,2G 24K 4,2G 1% /bollog/fs1 bollog/fs2 4,2G 24K 4,2G 1% /bollog/fs2 bollog/fs3 4,2G 24K 4,2G 1% /bollog/fs3 |
| Abb. 2: Die Summe des verfügbaren Speicherplatzes ist nicht gleich der Summe der Einzelteile. |
Interessant ist hierbei aber Folgendes: Ähnlich wie beim tmpfs, wo die einzelnen RAM-Disks den gesamten freien Speicher "sehen", sind bei den Dateisystemen aus dem Z-Pool die Obergrenzen des Plattenplatzes zunächst nur durch das Gesamtvolumen des gemeinsamen Pools vorgegeben.
Ebenso muss man beim RAID-Z auf der Hut sein: Ein unbenutzter Pool zeigt als Kapazität die Summe der darunter liegenden Platten an. Aber erst, wenn tatsächlich Platz verbraucht wird, sieht man den für RAID5 typischen – und auch beim RAID-Z zu Buche schlagenden – Verschnitt von 1/n Plattenanteilen (siehe Abbildung 3).
root@sol11:/# zpool create -f bollogz raidz c0d0s3 c0d0s4 c0d0s5 root@sol11:/# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT bollogz 1.16G 141K 1.16G 0% ONLINE - root@sol11:/# mkfile 200m /bollogz/200mfile root@sol11:/# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT bollogz 1.16G 300M 884M 25% ONLINE - |
| Abb. 3: Ein Z-Pool wird aus drei Slices à 400 MB erzeugt. Erst wenn Daten im Pool abgelegt werden, wird der Redundanz Tribut gezollt; der Platzverbrauch ist 50 Prozent höher als erwartet! |
Achtung: Durch Auflösen des zugrunde liegenden Pools werden ohne weitere Nachfrage (!) alle darauf aufbauenden Strukturen zerstört (f). Bleibt zu hoffen, dass hier in Zukunft ein Sicherheitsmechanismus eingebaut wird, der arglos abgesetzte Kommandos nicht zur Katastrophe ausarten lässt.
Mit den gleichen Kommandos lässt sich auch ein Spiegel einrichten (siehe Abbildung 4).
# zpool create bollog mirror c1t1d0 c2t1d0 spare c1t2d0 c2t2d0 # zpool status bollog pool: bollog state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM bollog ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 c2t1d0 ONLINE 0 0 0 spares c1t2d0 AVAIL c2t2d0 AVAIL |
| Abb. 4: Anlegen eines Spiegels mit zwei zusätzlichen Spare-Platten. |
Neben den oben genannten Eigenschaften ist auch die Snapshot- und Clone-Funktionalität hervorzuheben. Dadurch wird es nun sehr leicht möglich, in kurzer Zeit Dateisysteme zu duplizieren und read-only zu öffnen oder als Clone read-write bereitzustellen.
Ein Snapshot belegt zum Zeitpunkt des Anlegens keinen Plattenplatz, sondern wächst erst dann, wenn Änderungen an dem zugrunde liegenden Dateisystem vorgenommen werden. Ebenso können Snapshots dazu verwendet werden, ein Dateisystem zu bestimmten Zeitpunkten zurückzusetzen. Auch in diesem Punkt übersteigen die Möglichkeiten von Solaris 10 deutlich die Möglichkeiten, die bisher zur Verfügung standen (fssnap(1m)).
Natürlich werden auch klassische Eigenschaften wie Quota unterstützt, um den Verbrauch an Plattenplatz nach oben zu beschränken, aber auch andere Eigenschaften, wie z. B. die Zusicherung von Mindestplatz in einem Dateisystem, sind hier vorhanden.
Auch die Handhabung von NFS-Freigaben sind nun direkt im ZFS integriert. Außerdem ist eine Erweiterung der ACLs für NFS und ZFS vorgenommen worden. Und statt, wie bisher, mit Spezialkommandos zu arbeiten (getfacl(1), setfacl(1)), ist die Funktionalität der generischen Kommandos ls(1) und chmod(1) zu diesem Zweck erweitert worden. Sehr praktisch!
Ein Web-basiertes Management Tool kann bei der Administration unterstützend eingesetzt werden und rundet das Gesamtbild einer zentralen und einfachen Administration ab. Erwähnenswert ist an dieser Stelle die Tatsache, dass bei der Verwendung der GUI auch gleich immer das entsprechende CLI-Kommando mit ausgegeben wird, das dann direkt als Skript abgespeichert werden kann.
Mit dem ZFS ist Sun Microsystems ein großer Wurf gelungen. Viele Ansätze sind sehr vielversprechend, müssen aber in der Tat noch weiter vorangetrieben werden, um wirklich produktiv eingesetzt werden zu können.
Die etwas gewöhnungsbedürftige, aber einfache und dem Solaris10-Stil konsequent angepasste Handhabung von ZFS überzeugt ebenso wie die erweiterte Snapshot-Funktionalität und die Integration eines Volume Managers in einem Werkzeug.
Der schöne Ansatz wird aber leider noch durch einige ungelöste, technische Hürden getrübt: Zum einen kann das Solaris-System bisher nicht von ZFS gebootet werden. Dadurch ist man momentan noch gezwungen, zweigleisig zu fahren und auch weiterhin mit klassischen Dateisystemen zu arbeiten.
Andererseits ist auch das Zusammenspiel von ZFS mit Zonen noch sehr unbefriedigend, so dass man abwarten muss, was das nächste Release an Verbesserungen bringen wird.
Roger Niemeyer (info@ordix.de).