ZFS on OSX, nutzt das jemand außer mir)?

  • Mittlerweile hat Apple mit APFS ja einen eigenen Klon von ZFS entwickelt.Nutzt (außer mir) hier eigentlich noch jemand das "Original", nämlich ZFS on OSX?
    Mit OpenZFSonOSX gibt es das OpenSource und kostenlos.
    Bietet ja ein paar Features die APFS nicht hat, wie Checksummen, Komprimierung, sowas wie "Fusion-Drive" (SSD als Cache), vernünftige (Reparatur)Tools, kompatibel (lesen/schreiben) mit Linux und *BSD und noch einiges mehr.
    Hab hier mittlerweile einen gespiegelten und verschlüsselten 8-TB-Pool mit Cache und bin mehr als zufrieden.
    Falls es jemanden interessiert, ich kann auch eine kleines How-To schreiben.
    https://openzfsonosx.org

  • Ein paar nähere Erläuterungen wären schon interessant. Bis jetzt habe ich ZFS bloß auf meinen FreeNas-Server in Nutzung. Aber eine Alternative zu FreeNas wäre auch nicht schlecht.

  • Also dann los, ich beschreibe hier mal kurz und knackig wie ich ein verschlüsseltes Raid (Mirror) mit Cache eingerichtet hab.
    Also ein verschlüsseltes, komprimierendes, gespiegeltes "Fusion-Drive".
    Fetter Text bedeutet Eingabe im Terminal.
    WARNUNG: Backup ist wichtig! Wir formatieren hier Festplatten, das heißt, alle Daten darauf sind dann weg!
    Als erstes installieren wir uns ZFS von hier:
    https://openzfsonosx.org
    Dann brauchen wir noch einen Key, mit dem der Pool entschlüsselt wird.
    Option ist die Eingabe eines Passworts im Terminal bei jedem Start oder ein Keyfile.
    Aus Bequemlichkeit habe ich ein Keyfile genommen, daß auf die per FileVault verschlüsselte OSX-SSD gelegt wird.
    Das heißt, man loggt sich beim Systemstart normal ein und erst dann ist das Keyfile lesbar.
    Ich habe eins mit Zufallsdaten erstellt:


    sudo head -c 32 /dev/urandom > /sbin/enc4zfs

    Dann schauen wir uns an wie die Festplatten heißen


    diskutil list


    Hier im Beispiel sind das:
    disk0 -> Boot-SSD mit High Sierra
    disk1 -> 1. 4TB-HD
    disk2 -> 2. 4TB-HD
    disk3 -> 3. 4TB-HD
    disk4 -> 4. 4TB-HD
    disk5 -> 120 GB-SSD


    Nun legen mir den Pool an. Dabei sind vorhandene Partitionen auf den Platten egal, wir nutzen die kompletten Laufwerke.


    sudo zpool create -f -o ashift=9 -O casesensitivity=insensitive -O normalization=formD -O encryption=on -O keylocation=file:///sbin/enc4zfs -O keyformat=raw Daten disk1 disk2 mirror disk3 disk4 cache disk5

    Damit haben wir den Pool angelegt (der Name ist dann "Daten") incl. der Cache-SSD
    Nun konfigurieren wir noch Kompression, Checksummen etc.


    sudo zfs set checksum=fletcher4 atime=off compression=lz4 Daten


    Dann die Berechtigungen setzen:

    sudo chown -R username:admin /Volumes/Daten


    Bei 'username' dann den eigenen Login-Name einsetzen.
    Damit der Pool beim Start automatisch gemountet wird muss ein wenig getrickst werden. Ist nicht sehr elegant, aber funktioniert.
    Wir legen ein Script /sbin/mount-ZFS.sh an:

    sudo nano /sbin/mount-ZFS.sh


    Inhalt wie folgt:

    #!/bin/bash
    sleep 2
    /usr/local/bin/zfs load-key Daten
    sleep 2
    /usr/local/bin/zfs mount Daten


    Mit Strg-X speichern wir das Script und machen es startfähig:

    sudo chmod +x /sbin/mount-ZFS.sh

    Dieses Skript lädt den Key und bindet den Pool ein.
    Aufgerufen wird es über ein Applescript welches in die Anmeldeojekte gepackt wird.
    Hier das Script:


    delay 35
    do shell script "sudo /sbin/mount-ZFS.sh"


    Den Delay hab ich eingesetzt, damit OSX nach öffnen des Desktops genug Zeit hat die nötigen Treiber zu laden.
    Da wir das Script aber mit 'sudo' aufrufen müssten wir nun bei jedem Start das Admin-Passwort eingeben.
    Das können wir ändern wenn wir unserem User für das Mount-Script dauerhaft root-Rechte geben:


    sudo visudo


    Damit öffnen wir die sudoers-Datei und fügen folgende Zeile ein:


    username ALL=NOPASSWD: /sbin/mount-ZFS.sh


    wobei 'username' wieder unser Login-Name ist.
    Wichtig ist, daß unser Script in /sbin liegt wo nur root Zugriff hat!
    Liegt sie woanders könnte irgendwer der Zugriff auf den Mac hat die Datei ändern und somit beim Systemstart irgendwas mit Root-Rechten starten!


    Das wars eigentlich schon...
    Klingt ziemlich kompliziert, ist es aber nicht wenn man mal verstanden hat was da passiert.Auf Openzfs.org gibt es auch ein Wiki welches das auch nochmal beschreibt.

    3 Mal editiert, zuletzt von Superjeff ()

  • Super Anleitung, vielen Dank dafür. Das wird mein nächstes Projekt werden. Besonders interessant finde ich das mit der Cache SSD. Wieviel Performance-Gewinn bringt das?

  • Danke dir!


    Habe gerade meinen Linux-Server - bzw mein Docker on ZFS on Luks durch Frankenstein-ZFS-Upgrade teil-zerschossen. Halb so wild, Pools müssen nur manuell gemountet werden nach Upgrade auf ZOL 0.7.


    Bin halt am überlegen, ob ein encrypted APFS übernehmen kann.


    Ein NVMe-Pool in meinem HP Micro Gen8 wäre überlegenswert, da PCIe nicht benützt wird. Nun ja, kaum. Sata6-Karte.


    Für IO-lastige Geschichten wäre halt so oder so NVMe interessant. Wobei ich unter macOS auf meinem PowerMacG5 meine Samsung Evo 960 eher darben sehe.


    Spiele schön und gut, aber nicht das Mass der Dinge und nicht der Zweck.

  • Besonders interessant finde ich das mit der Cache SSD. Wieviel Performance-Gewinn bringt das?


    Zu Anfang, also bei neuem Pool erstmal recht wenig. Aber wenn der Cache sich füllt (häufig genutzte Daten, z.B. Parallels-VMs) hat man wie beim Fusiondrive native SSD-Geschwindigkeit.
    Quasi ab dem 2. Zugriff auf die Daten.
    Kann man auch nochmal beschleunigen indem man 2 SSDs als Raid-0-Cache einbindet. ;-)
    Also einfach mit zpool create .... cache diskX diskY 2 SSDs angeben.
    Hier gibt es auch interessante "Abend-Lektüre",
    Ist zwar für Solaris, aber bis auf die unterschiedlichen Disk-Namen (c0t0d0 statt disk0s0) auch für OSX und OpenZFS nutzbar.

    Admin-Handbuch

    4 Mal editiert, zuletzt von Superjeff ()