Howto: ZFS unter Mac OS X

25 Jan 2012

Schon oft sollte ZFS für Mac OS X kommen. Nun hat Ten's Complement tatsächlich Zevo veröffentlicht und unterstützt damit ZFS in Version 28 nativ unter Mac OS X. Grund genug es gleich zu testen.

Zevo gibt es in drei Editionen mit unterschiedlich vielen Features. So wird in der Silver Edition nur das ZFS selbst bereit gestellt, die Gold Edition bietet dann auch Snapshots, Raidfunktionen und Kompression und in der Ultimate Variante bekommt man dann auch Deduplication, RAIDZ und eine GUI zur Verwaltung gestellt.

Die Frage nach der Version stellt sich derzeit allerdings noch nicht, da es derzeit nur die Silver Edition für knapp 20€ zu kaufen gibt. Aber man kann später jederzeit upgraden. Inwieweit dies notwendig ist wird sich zeigen, denn wahrscheinlich sind die Features unter der Haube schon eingebaut aber über die Oberfläche nicht erreichbar.

Der Einkauf ging sehr einfach per PayPal und anschließendem Download und so konnte ich nach 3 Minuten loslegen.

Man benötigt Mac OS X 10.6.6 oder 10.7.2 und neuer, 2GB RAM und 25 MB Plattenplatz auf dem Systemlaufwerk. Besser sind 4GB RAM und eine 64Bit CPU. Aber das wird auch bei anderen Betriebsystemen wie FreeBSD empfohlen. Und man benötigt eine einzelne Fesplatte oder USB-Stick, denn Zevo kann nicht auf der Systemplatte verwendet werden.

Die Installation ist soweit unspektakulär, als das man sie einfach nur durchklickt und anschießend den Mac neu startet.

Und schon kann man auf ZFS-Dateisysteme unter Mac OS X zugreifen. Ich sollte kurz erwähnen, dass sich die Entwickler mit ihrem Support sehr zurück halten und auch keinerlei Garantien für Fehlerfreiheit geben. Im Quick-Start-Guide steht dazu:

To ensure that your data is protected and to prevent any loss of data, we strongly recommend that you keep at least two copies of your data at all times. Keep one copy using your ZEVO storage and a second copy on another storage medium, such as another hard disk or a cloud backup service.

Dies sollte man sicher in einer so frühen Version ernst nehmen. Zum Testen habe ich einen leeren 8GB großen USB-Stick hergenommen und diesen über Zevo mit ZFS formatiert.

Dies geschieht über den neu hinzu gekommenen Menüpunkt in den Systemeinstellungen von Mac OS X. Man wird hierbei nur nach der zu formatierenden Fesplatte gefragt und ob man Groß- und Kleinschreibung bei Datei- und Verzeichnisnamen berücksichtigt werden soll.

Ich habe mich für die Unix-Variante entschieden, da ich den Stick ja auch unter FreeBSD testen möchte. Und aus Gewohnheit.

Und schon hat man ein ZFS-Dateisystem auf seinem Stick.

zfs list
NAME USED AVAIL REFER MOUNTPOINT
Zevo 428Ki 6,95Gi 366Ki /Volumes/Zevo

Dies sind die Standardoptionen des angelegten Dateisystems:

zfs get all Zevo
NAME PROPERTY VALUE SOURCE
Zevo type filesystem -
Zevo creation Di Jan 24 23:00 2012 -
Zevo used 428Ki -
Zevo available 6,95Gi -
Zevo referenced 366Ki -
Zevo compressratio 1.00x -
Zevo mounted yes -
Zevo quota none default
Zevo reservation none default
Zevo recordsize 128Ki default
Zevo mountpoint /Volumes/Zevo default
Zevo checksum on default
Zevo compression off local
Zevo atime on default
Zevo devices on default
Zevo exec on default
Zevo setuid on default
Zevo readonly off default
Zevo snapdir visible local
Zevo aclinherit restricted default
Zevo canmount on default
Zevo copies 1 local
Zevo version 5 -
Zevo utf8only off -
Zevo normalization none -
Zevo casesensitivity sensitive -
Zevo refquota none default
Zevo refreservation none default
Zevo primarycache all default
Zevo secondarycache all default
Zevo usedbysnapshots 0 -
Zevo usedbydataset 366Ki -
Zevo usedbychildren 63Ki -
Zevo usedbyrefreservation 0 -
Zevo logbias latency default
Zevo dedup off default
Zevo sync standard default

Es handelt sich hierbei um ZFS-Version 28:

zpool upgrade -v
This system is currently running ZFS pool version 28.

Und das ganze ist nativ, also ohne Umwege über FUSE gemountet.

mount
/dev/disk1 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
/dev/disk3 on /Volumes/Zevo (zfs, local, journaled)

Beim Trennen und Mounten wird man übrigens per Growl entsprechend informiert.

Nun aber zur Nutzbarkeit. Ich habe den Stick eingesteckt und wollte testweise einmal das Lion-Image von 4 GB Größe auf den Stick kopieren. Das habe ich dann aber abgebrochen, da es ungefähr 3 Stunden gedauert hätte. Hmpf.

OK, backen wir erstmal kleinere Brötchen. Also habe ich für meinen zweiten Anlauf eine ISO-Datei von nur 118 MB Größe hergenommen. Das war immerhin in drei Minuten erledigt.

Nun wollte ich mal Deduplication auf dem Stick testen.

sudo zfs set dedup=on Zevo
cannot set property for 'Zevo': data deduplication property requires a 64-bit kernel and 8 GB RAM

Schade, mein MacBook Air hat leider nur 4 GB.

Nun möchte ich die Daten aber auch unter anderen Bestriebssystemen nutzen. Also den Stick unter Windows angeschlossen - kleiner Scherz. Also den Stick unter FreeBSD angeschlossen und gemountet.

# zpool import -o rw Zevo

Und zum Test die eben auf den Stick kopierte Datei auf die Platte bewegt.

# mv /Zevo/mfsbsd-se-9.0-amd64.iso /usr/home/oliver/mfsbsd.iso

Deduplication hat mich allerdings dann doch nicht losgelassen. Ich wollte es haben. Also unter FreeBSD mal angeschaltet.

# zfs set dedup=on Zevo
# zfs set compression=on Zevo
# mkdir /Zevo/iso{1,2,3}
# time cp /usr/home/oliver/mfsbsd.iso /Zevo/iso1
# 0.000u 0.130s 1:41.97 0.1%
# time cp /usr/home/oliver/mfsbsd.iso /Zevo/iso2
# 0.0006u 0.085s 0:04.87 1.6%
# time cp /usr/home/oliver/mfsbsd.iso /Zevo/iso3
# 0.007u 0.308s 0:00.31 96.7%

Man sieht, dass ZFS sofort registriert, dass die Datei bzw. gleiche Blöcke im Dateisystem vorhanden sind und somit nicht kopiert werden müssen, was wiederum die Dauer des Kopiervorgangs von fast 2 Minuten auf wenige Sekunden drückt. Weil ja auch nichts kopiert wird.
Nun nochmal auf den Speicherverbrauch geschaut:

# df -h | grep Zevo
# Zevo 7.2G 338MB 6.9G 5% /Zevo

Mit df sieht alles noch aus wie immer. Man benötigt ja auch zpool um den wirklich verbrauchten Speicher zu ermitteln. Nähere Informationen dazu kann man bei Jeff Bonwick und bei Jörg Möllenkamp nachlesen.

# zpool list | grep Zevo
# Zevo 7.06G 114M 6.95G 1% 3.00x ONLINE -

Das sieht schon besser aus. Man sieht, dass in Wirklichkeit nur 114MB belegt sind, also das ISO-Image nur einmal auf dem Stick vorhanden ist.

Wieder zurück zum Mac. Also Stick umounten unter FreeBSD:

# zpool export Zevo

Auf dem Mac wird das Dateisystem sofort gemountet und auch richtig behandelt - also auch Deduplication bleibt aktiv.

zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
Zevo 7,06Gi 123Mi 6,94Gi 1% 2.99x ONLINE -

Das ganze lief bei mir auch mit 4GB RAM stabil. Allerdings sind auch nicht wirklich viele Daten, die in diesem kleinen Test verarbeitet werden müssen.

Was aber, wenn doch mal etwas schief geht? Man kann die Daten der ZFS-Dateisysteme mittels dem mitgelieferten Checkup prüfen, welcher ebenfalls unter den Systemeinstellungen zu finden ist. Und siehe da, es hatte auch direkt einen Fehler gefunden, der leider auch nicht korrigiert werden konnte. Ok ich hatte etwas nachgeholfen.

Diesen Check kann man übringens auch in der Konsole mit folgendem Befehl starten.

sudo zpool scrub Zevo

Mehr Informationen liefert auch zpool status:

sudo zpool status -v
pool: Zevo
state: ONLINE
status: One or more devices has experienced an error resulting in data corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the entire pool from backup.
scan: scrub repaired 0 in 0h0m with 1 errors on Wed Jan 25 09:32:33 2012
config:
NAME STATE READ WRITE CKSUM
Zevo ONLINE 0 0 2
GPTE_857D267E-575C-4CF8-A737-B06AC37BFB20 ONLINE 0 0 4 at disk2s2
errors: Permanent errors have been detected in the following files:
Zevo:/mfsbsd-se-9.0-amd64.iso

Soweit ein erster Rundgang durch ZFS unter Mac OS X. Und wie man sieht, sind einige Features unter der Haube vorhanden, welche nur durch die GUIs nicht abgedeckt werden. Die kommenden Editionen sind somit eventuell überflüssig, wenn man mit dem Terminal umgehen kann. Auf jeden Fall eine schöne Sache, dass es endlich eine ordentliche Unterstützung unter Mac OS X für ZFS gibt. Wie sind eure Erfahrungen und Eindrücke mit Zevo?

apple deduplication dev freebsd howto mac osx shell unix zevo zfs
comments powered by Disqus