ZFS/MacOS X

Aus UUGRN
< ZFS
Hinweis:

ZFS ist mittlerweile auf einigen Betriebssystemen verfügbar. Das feature set unterscheidet sich allerdings z.T. maßgeblich.
Für konkrete Anwendungen bitte immer die man-Pages des Betriebssystems konsultieren, z.B. für FreeBSD: zfs(8) und zpool(8)


ZFS im Einsatz unter MacOS X 10.5.8[Bearbeiten]

Hinweis:

ZFS befindet sich konstant in der Entwicklung. Es ist noch nicht 100%ig feature complete.
Alle dokumentierte Features sind allerdings in aktuellen Releases von Solaris oder OpenSolaris enthalten.


Installation - Ablauf[Bearbeiten]

  1. Download des binär-Pakets
  2. Backup der mitgelieferten r/o-Komponenten
  3. Installation der r/w-Komponenten
  4. Erstellung eines ZPools

Installation der Patches[Bearbeiten]

mkdir -p ~/patch-ZFS-backup
sudo cp /usr/sbin/zfs ~/patch-ZFS-backup/DIST.zfs
sudo cp /usr/sbin/zpool  ~/patch-ZFS-backup/DIST.zpool
sudo cp /usr/lib/libzfs.dylib  ~/patch-ZFS-backup/DIST.libzfs.dvlib
sudo cp -R /System/Library/Extensions/zfs.kext  ~/patch-ZFS-backup/DIST.zfs.kext
sudo cp -R /System/Library/Extensions/zfs.readonly.kext  ~/patch-ZFS-backup/DIST.zfs.readonly.kext
sudo cp -R /System/Library/Filesystems/zfs.fs ~/patch-ZFS-backup/DIST.zfs.fs

Eine frische Installation von 10.5.x bringt nur /System/Library/Extensions/zfs.readonly.kext mit, ein upgegradetes 10.5.0 allerdings auch /System/Library/Extensions/zfs.kext - bitte entsprechend sichern was da ist.

tar xzvf $downloaded_file.tgz
sudo cp build/Leopard_Release/zfs /usr/sbin/zfs
sudo cp build/Leopard_Release/zpool /usr/sbin/zpool
sudo cp build/Leopard_Release/libzfs.dylib /usr/lib/libzfs.dylib
sudo /bin/rm -rf /System/Library/Filesystems/zfs.fs /System/Library/Extensions/zfs.kext
sudo cp -R build/Leopard_Release/zfs.fs /System/Library/Filesystems/zfs.fs
sudo cp -R build/Leopard_Release/zfs.kext /System/Library/Extensions/zfs.kext

Und zur Sicherheit noch:

sudo chown -R root:wheel /System/Library/Extensions/zfs.kext
sudo chown -R root:wheel /System/Library/Filesystems/zfs.fs
sudo chown -R root:wheel /usr/sbin/zpool
sudo chown -R root:wheel /usr/sbin/zfs
sudo chown -R root:wheel /usr/lib/libzfs.dylib

Warum auch immer, ab jetzt wird sudo den Dienst verweigern und wir brauchen eine echte root-Shell.

sudo su -

Und ab jetzt bitte wirklich nachdenken vor'm Tippen.

Platten-Layout[Bearbeiten]

der Inspector

Per diskutil list die für ZFS vorgesehene(n) Platte(n) suchen und entsprechend mit

diskutil partitiondisk /dev/diskX GPTFormat ZFS %noformat% 100%

formatieren. Die Platten müssen einen GPT-Label haben, APM funktioniert im Moment noch nicht.

Hinweis:

Dies ist der richtige Moment um über sein Backup und die richtige Interpretation von diskutil list nachzudenken!


diskutil partitiondisk /dev/disk2 GPTFormat ZFS %noformat% 100% 
Started partitioning on disk disk2  
Creating partition map 
[ + 0%..10%..20%..30%..40%..50%..60%..70%..80%..90%..100% ]  
Finished partitioning on disk disk2 
/dev/disk2 
   #:                   type name                size     identifier 
   0:  GUID_partition_scheme                    *9.4 GB   disk2 
   1:                    EFI                     200.0 MB disk2s1 
   2:                    ZFS                     9.0 GB   disk2s2 

Dank dem neuen EFI/GPT-Label entstehen zwei Slices auf der Platte. Wir verwenden von nun ab nur das zweite Slice, in diesem Beispiel also disk2s2.

Erstellung eines ZPools zum Test[Bearbeiten]

Das Kommando

zpool create test01 /dev/disk2s2

erstellt einen neuen ZPool bestehend aus einer Platte mit dem Namen test01.

zpool status test01 
  pool: test01 
 state: ONLINE 
 scrub: none requested 
config: 
        NAME        STATE     READ WRITE CKSUM 
        test01      ONLINE       0     0     0 
          disk2s2   ONLINE       0     0     0 
errors: No known data errors 
 

Unter /Volumes findet sich der Pool:

df -hl /Volumes/puddle 
Filesystem   Size   Used Available Capacity  Mounted on  
test01      8.9Gi  19Ki 8.9Gi     1%    /Volumes/test01 

Da wir den Pool aber nur als Beispiel erzeugt haben - und um zu sehen, daß es funktioniert: weg damit.

zpool destroy test01

Jetzt meinen wir's ernst[Bearbeiten]

Rann an's Werk...

diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *465.8 Gi   disk0
   1:                        EFI                         200.0 Mi   disk0s1
   2:                  Apple_HFS Macintosh HD            465.4 Gi   disk0s2
[...]
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.4 Ti     disk3
   1:                        EFI                         200.0 Mi   disk3s1
   2:                        ZFS                         1.4 Ti     disk3s2
/dev/disk4
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.4 Ti     disk4
   1:                        EFI                         200.0 Mi   disk4s1
   2:                        ZFS                         1.4 Ti     disk4s2 

Die Platten disk3 und disk4 sind bereits für ZFS formatiert und bereit für den Einsatz.

zpool create raidz tank disk3s2 disk4s2

Der Pool tank ist erstellt und bereits im System gemountet.

zpool status
  pool: tank
 state: ONLINE
 scrub: none requested
config:
        NAME         STATE     READ WRITE CKSUM
        tank         ONLINE       0     0     0
          raidz1     ONLINE       0     0     0
            disk3s2  ONLINE       0     0     0
            disk4s2  ONLINE       0     0     0
errors: No known data errors

Von nun ab kann der Pool normal über den Finder oder die Konsole genutzt werden. zfs kann verwendet werden um zusätzliche Datasets anzulegen und zu konfigurieren. Siehe hierzu den Leit-Artikel zu ZFS.

Tricky wird nur noch das unmounten des Pools, da hier leider noch Handarbeit nötig ist. Da der Finder den Pool gemountet hat, genügt ein einfaches zpool export tank nicht, wir müssen erst den Pool manuell im Finder ejecten. Immerhin sieht für den MacOS der Pool genauso aus wie eine extern angeschlossene Festplatte. Eject.png

  1. eject im Finder
  2. unmount des Pools mit export
zpool export tank

Sobald alle Platten des Pools am System angekommen sind wird der Pool automatisch imported und gemountet.

Hinweis:

In den Screenshots: story? WTF? Ja - so heißt mein Pool, weil das dick und fett auf den Platten drauf steht. Und den Namen des Pools sollte man sich merken können.


Mehr Infos sowie Beispiele auf der Seite auf maxosforge.org.