MIN-Fakultät
Department Informatik
Rechenzentrum

Solaris-ZFS

ZFS ist ein neues Solaris-Dateisystem, das das antiquierte UFS mittelfristig ersetzen wird. Im Informatik-Rechenzentrum wird es probeweise auf dem Fileserver rzt2000 für die früher auf dem Server rzdspc4 im alten KOGS-Plattenturm gelagerten FTP-Dienste und Linux- und Solaris-Archive benutzt.

Anlegen des ZFS-Pools

ZFS-Dateisysteme werden in einem Container (“ZFS-Pool”) angelegt, der aus einer oder mehreren einzelnen Platten oder RAID-Platten bestehen kann. Bei uns nutzen wir den Teil des Sun-SANs, den Marc mir als 300GB-Partition zugewiesen hat. Den ZFS-Pool habe ich mit dem Kommando zpool create mit dem Namen sanpool angelegt:

rzt2000# zpool create -f sanpool c1t200700A0B817E674d3

Den Zustand der ZFS-Pools kann man ebenfalls mit zpool ansehen:

rzt2000# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
sanpool                 298G     79K    298G     0%  ONLINE     -
rzt2000# zpool status
  pool: sanpool
 state: ONLINE
 scrub: none requested
config: 

        NAME                     STATE     READ WRITE CKSUM
        sanpool                  ONLINE       0     0     0
          c1t200700A0B817E674d3  ONLINE       0     0     0

errors: No known data errors

Anlegen von ZFS-Dateisystemen

Innerhalb dieses Containers können dann die einzelnen ZFS-Dateisysteme mit dem Kommando zfs create eingerichtet werden:

rzt2000# zfs create sanpool/audio
rzt2000# zfs create sanpool/linux
rzt2000# zfs create sanpool/zonedata
rzt2000# zfs create sanpool/zonedata/ftp
rzt2000# zfs create sanpool/zonedata/ftp/pub
 ...

Die ZFS-Dateisystem werden automatisch mit dem gleichen Namen gemountet; es sind keine Einträge in der Datei /etc/vfstab nötig. Mit dem Befehl zfs list kann ich mir den Zustand der existierenden und mit df -F zfs den Zustand der gemounteten ZFS-Dateisysteme ansehen:

rzt2000# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
sanpool                223G  70.5G  31.5K  /sanpool
sanpool/audio         9.64G  70.5G  9.64G  /sanpool/audio
sanpool/backuptest     276M  70.5G   276M  legacy
sanpool/linux         93.1G  70.5G  93.1G  /sanpool/linux
sanpool/oracle        4.06G  70.5G  4.06G  /sanpool/oracle
sanpool/solaris       17.0G  70.5G  17.0G  /sanpool/solaris
sanpool/zonedata      98.8G  70.5G  26.5K  /sanpool/zonedata
sanpool/zonedata/ftp  98.8G  70.5G   114M  /sanpool/zonedata/ftp
sanpool/zonedata/ftp/caro  24.5K  70.5G  24.5K  /sanpool/zonedata/ftp/caro
sanpool/zonedata/ftp/incoming  28.5K  70.5G  28.5K  /sanpool/zonedata/ftp/incoming
sanpool/zonedata/ftp/inf1  98.5G  70.5G  98.5G  /sanpool/zonedata/ftp/inf1
sanpool/zonedata/ftp/pub   109M  70.5G   109M  /sanpool/zonedata/ftp/pub
rzt2000# df -F zfs -h
Filesystem             size   used  avail capacity  Mounted on
sanpool                293G    31K    70G     1%    /sanpool
sanpool/audio          293G   9.6G    70G    13%    /sanpool/audio
sanpool/linux          293G    93G    70G    57%    /sanpool/linux
sanpool/oracle         293G   4.1G    70G     6%    /sanpool/oracle
sanpool/solaris        293G    17G    70G    20%    /sanpool/solaris
sanpool/zonedata       293G    26K    70G     1%    /sanpool/zonedata
sanpool/zonedata/ftp   293G   114M    70G     1%    /sanpool/zonedata/ftp
sanpool/zonedata/ftp/caro
                       293G    24K    70G     1%    /sanpool/zonedata/ftp/caro
sanpool/zonedata/ftp/incoming
                       293G    28K    70G     1%    /sanpool/zonedata/ftp/incoming
sanpool/zonedata/ftp/inf1
                       293G    99G    70G    59%    /sanpool/zonedata/ftp/inf1
sanpool/zonedata/ftp/pub
                       293G   109M    70G     1%    /sanpool/zonedata/ftp/pub

Löschen von ZFS-Dateisystemen

Ein ZFS-Dateisystem kann mit dem Befehl zfs destroy wieder gelöscht werden:

rzt2000# zfs destroy sanpool/test

Eigenschaften von ZFS-Dateisystemen

Einem ZFS-Dateisystem sind Eigenschaften (“Properties”) zugeordnet, die mit zfs set gesetzt und mit zfs get bzw. zfs get all angesehen werden können:

rzt2000# zfs get all sanpool/linux
NAME             PROPERTY       VALUE                      SOURCE
sanpool/zonedata  type           filesystem                 -                
sanpool/zonedata  creation       Mon Mar 26 14:51 2007      -                
sanpool/zonedata  used           98.8G                      -                
sanpool/zonedata  available      70.5G                      -                
sanpool/zonedata  referenced     26.5K                      -                
sanpool/zonedata  compressratio  1.00x                      -                
sanpool/zonedata  mounted        yes                        -                
sanpool/zonedata  quota          none                       default          
sanpool/zonedata  reservation    none                       default          
sanpool/zonedata  recordsize     128K                       default          
sanpool/zonedata  mountpoint     /sanpool/zonedata          default          
sanpool/zonedata  sharenfs       off                        default          
sanpool/zonedata  checksum       on                         default          
sanpool/zonedata  compression    off                        default          
sanpool/zonedata  atime          on                         default          
sanpool/zonedata  devices        on                         default          
sanpool/zonedata  exec           on                         default          
sanpool/zonedata  setuid         on                         default          
sanpool/zonedata  readonly       off                        default          
sanpool/zonedata  zoned          off                        default          
sanpool/zonedata  snapdir        hidden                     default          
sanpool/zonedata  aclmode        groupmask                  default          
sanpool/zonedata  aclinherit     secure                     default  

NFS-Freigaben

NFS-Freigaben von ZFS-Dateisystemen werden mit der Eigenschaft sharenfs gesetzt. Die Syntax ist analog zum share-Befehl für UFS-Dateisysteme, aber die entsprechenden Daten werden im ZFS-Dateisystem gespeichert und gelten über einen System-Neustart hinweg. Somit müssen sie nicht wie Freigaben für UFS-Platten in der Datei /etc/dfs/dfstab gespeichert werden:

rzt2000# zfs set sharenfs=ro=.informatik.uni-hamburg.de,root=.informatik.uni-hamburg.de sanpool/audio
rzt2000# zfs set sharenfs=ro=.informatik.uni-hamburg.de,root=.informatik.uni-hamburg.de sanpool/oracle
rzt2000# zfs set sharenfs=ro=.informatik.uni-hamburg.de,root=.informatik.uni-hamburg.de sanpool/linux
rzt2000# zfs set sharenfs=ro=.informatik.uni-hamburg.de,root=.informatik.uni-hamburg.de sanpool/solaris
rzt2000# zfs set sharenfs=ro=.informatik.uni-hamburg.de,root=.informatik.uni-hamburg.de sanpool/zonedata/ftp/inf1
rzt2000# zfs set sharenfs=ro=.informatik.uni-hamburg.de,root=.informatik.uni-hamburg.de sanpool/zonedata/ftp/pub

Einzelne oder alle ZFS-Dateisysteme können mit zfs share bzw. zfs unshare für NFS-Zugriff freigegeben bzw. wieder gesperrt werden:

rzt2000# zfs share sanpool/zonedata/ftp/pub
rzt2000# zfs share -a
rzt2000# zfs unshare sanpool/zonedata/ftp/pub
rzt2000# zfs unshare -a

Alternativen zum normalen Mounten von ZFS-Dateisystemen

Man kann durch Setzen der ZFS-Eigenschaft mountpoint ein anderes Verhalten von ZFS-Mounts erreichen:

Snapshots von ZFS-Dateisystemen

Mit dem Befehl zfs snapshop kann man den augenblicklichen Zustand eines ZFS-Dateisystems unter einem eigenen Namen einfrieren. Hierbei wird der Dateisystemname mit einem @ und dem Namen des Snapshots erweitert, z.B. dem aktuellen Datum:

rzt2000# zfs snapshot sanpool/linux@070402

Der Snapshot belegt zunächst keinen Platz. Erst wenn das originale Dateisystem verändert wird, werden die Unterschiede vom Original zum Snapshop sichergestellt:

rzt2000# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
sanpool/linux         93.1G  70.5G  93.1G  /sanpool/linux
sanpool/linux@070401      0      -  93.1G  -
sanpool/linux@070402      0      -  93.1G  -

Mit dem Befehl zfs rollback kann man das ZFS-Dateisystem auf einen früheren Stand zurückfahren:

rzt2000# zfs rollback sanpool/linux@070401

Auf alte, sichergestellte Versionen kann man via Dateisystem über das Unterverzeichnis .nfs im Wurzelverzeichnis des ZFS-Dateisystems zurückgreifen:

rzt2000# cd /sanpool/linux/.zfs/snapshot/070402/rz/optionalSoftware

Der Snapshop kann wie ein normales ZFS-Dateisystem wieder mit zfs destroy gelöscht werden:

rzt2000# zfs destroy sanpool/linux@070402

Sonstiges

Wartung von ZFS-Pools

Das ZFS-Dateisystem ist noch in Entwicklung. Beim Patchen des Servers wird unter Umständen eine neuere ZFS-Version eingespielt, die eine Aktualisierung des ZFS-Pools erfordert:

rzt2000# zpool status
  pool: sanpool
 state: ONLINE
status: The pool is formatted using an older on-disk format.  The pool can
        still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
        pool will no longer be accessible on older software versions.
 scrub: none requested
config: 

        NAME                     STATE     READ WRITE CKSUM
        sanpool                  ONLINE       0     0     0
          c1t200700A0B817E674d3  ONLINE       0     0     0

errors: No known data errors
rzt2000# zpool upgrade sanpool
This system is currently running ZFS version 3.

Successfully upgraded 'sanpool' from version 2 to version 3
rzt2000# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
sanpool                 298G   45.4G    253G    15%  ONLINE     -

ZFS-Pool auf einen anderen Rechner übertragen

Die Solaris-SAN-Partition ist sowohl am Server rzt2000 als auch an der rzt2001 angeschlossen, aber im laufenden Betrieb nur an der rzt2000 gemountet. Sie kann aber mit wenig adminstrativem Aufwand von einem auf dem anderen Rechner übertragen werden:

  1. Loopback-Mounts für Solaris-Zonen freigeben; ggfs. dafür Solaris-Zonen herunterfahren

  2. ZFS-Pool auf dem alten Rechner freigeben. Alle NFS-Freigaben werden automatisch zurückgenommen und alle Dateisysteme dismountet:

    rzt2000# zpool export sanpool
    
  3. ZFS-Pool auf dem neuen Rechner einbinden. Alle Dateisysteme werden gemäß den gespeicherten ZFS-Eigenschaften automatisch gemountet und zum NFS-Zugriff freigegeben:

    rzt2001# zpool import sanpool