ZFS auf externer Festplatte

Lange ist es her als Apple ankündigte, dass ZFS in Mac OS X Einzug halten sollten.  Leider ist die Einbindung immer noch recht rudimentär. Nicht besser, eher schlechter, sieht es unter Linux aus. Da die von Sun für ZFS gewählte CDDL Lizenz, nicht kompatibel zur GPL ist, gibt es keine Kernelunterstützung für ZFS in Linux (im Gegensatz zu BSD). Dafür ist das Filesystem im Userland mittels FUSE jetzt angesiedelt.

Auch wenn die Unterstützung noch zu wünschen übrig lässt, sind dennoch die bestehenden Implementierungen stabil genug um einen ernsthaften Test zu wagen, der auch – ums vorweg zu nehmen – erfolgreich war.

Hintergrund ist, dass man unterhalb der verschiedenen UNIX Systeme immer noch kein gemeinsames Filesystem hat mit dem man portable Datenträger versehen könnte. FAT32 ist denkbar ungeignet, da es

  • das POSIX Rechtesystem nicht kennt
  • weder softlinks beherscht, noch case-sensitiv ist
  • äussert unperformant ist

Somit kann bspw. rsync Operationen auf solchen Datenträgern vergessen.

ZFS bringt sehr viele neue Ansätze mit, bestechend ist aber dass sich verschiedene ZFS Filesysteme –  sog. data sets – auf pools arbeiten die online jederzeit neue Datenträger aufnehmen können. Alle Grenzen sind online beliebig verschiebbar, die klassische Trennung Filesystem-Volume-Datenträger wird also aufgehoben.

Nach diesen warmen einleitenden Worten nun die Vorgehensweise beim erzeugen eines ZFS sets auf einem externen Datenträger – dazu müssen auf Linux die Pakete fuse und  zfs-fuse installiert sein.

1. Nach dem Anschließen der Festplatte, meldet sich diese als /dev/sde

2. mit fdisk eine Partitionstabelle  auf /dev/sde erstellen

3. zpool create -o version=8 testpool /dev/sde

Hintergrund:  Die Spezifikation der ZFS pools wird laufend weiterentwickelt. Dabei wird die Versionsnummer der ZFS pool Beschreibung hochgezählt. Unter Linux werden mit zfs-fuse 0.5 Pools bis zur Version 13 unterstützt. Die letzte ZFS Implementierung unter Mac OS X kann aber nur Version 8. Auf einem solchem System könnte auf kein ZFS pool > Version 8 zugegriffen werden, daher wird unter Linux der Pool explizit mit Version 8 erstellt.

Die unterstützten Versionen können jederzeit mit

zpool upgrade -v

angezeigt werden.

4. Nach der Erstellung des Pools „testpool“ ist dieser sofort als data-set benutzbar, was ok ist – man braucht bei einer externen FP nicht unbedingt ein zweites Dataset (welches mit

zfs create /testpool/subdirectory

angelegt werden könnte).

Der Mountpoint wird ebenfalls sofort ungefragt auf /testpool gelegt, man kann ihn ändern mit

zfs set mountpoint=/mnt/externalZFSdisk testpool

5. Nach solch einer Operation muss man ihn einmal wieder mounten

zfs mount testpool

6. Ein ZFS data set auf einer externen Festplatte wird normalerweise nicht ge- und unmounted sondern im- und exportiert.

zpool export testpool

damit wird implizit auf ungemounted.

7.  Auf einem anderem Rechner wird nun die FP angeschlossen:

zpool import

zeigt einem die verfügbaren Pools sofort an (in dem Fall testpool, inkl. den Informationen welcher Datenträger sich dahinter verbirgt)

zpool import testpool

macht ihn dem System zugänglich, indem er das dazugehörige dataset mounted (Unter Mac OS X wird es standardmässig dann unter

/Volumes/testpool

eingehängt.

Danach kann man problemlos darauf zugreifen. Normalerweise sollte nach der Session ein

zpool export testpool

ausreichen – unter Mac OS X – muss man aber trotzdem dass Volume mit den bekannten Methoden vorher auswerfen.

Der Datenaustausch mit allen oben erwähnten Annehmlichkeiten unter den UNIX Systemen steht nichts mehr im Wege.

Noch ein paar Hinweise..

zpool list

listet alle verfügbaren Pools auf, während

zpool status testpool

deren Status (v.a. im Fehlerfall hilfreich) anzeigt.

zpool iostat -v testpool

zeigt die I/O Transaktionen an

zpool add testpool /dev/sdf

würde dem Pool noch einen weiteren Datenträger zuweisen, was in diesem Bsp. keinen Sinn machen würde.

Unter Mac OS X wird mit dem ls Befehl schon angedeutet, dass die POSIX Rechte durch ACL’s erweitert sind. Tatsächlich unterstützt ZFS die neuen NFSv4 ACL’s die unter UNIX defacto ACL Standard darstellen und ziemlich an die Windows NT ACL’s angelehnt sind. Unter Linux werden diese leider noch nicht angezeigt. Sun’s eigene Solaris Umgebung verhält sich hier natürlich vorbildlich.

Ein Gedanke zu „ZFS auf externer Festplatte“

  1. Jetzt hat’s leider doch noch Probleme gegeben.

    Mac OS X kann keine Dateinamen die UTF-8 (Form D, aber höchstwahrscheinlich auch Form C) kodiert sind und auf einem ZFS dataset liegen verarbeiten. Es scheint ein Fehler zu sein, der in ZFS Referenzimplemenationen schon gefixt ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.