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:
anderen Mountpunkt innerhalb des ZFS festlegen:
rzt2000# zfs set mountpoint=/mnt sanpool/linux rzt2000# zfs list NAME USED AVAIL REFER MOUNTPOINT sanpool 221G 72.6G 27.5K /sanpool sanpool/linux 24.5K 72.6G 24.5K /mnt
ZFS-Dateisystem nicht mounten:
rzt2000# zfs set mountpoint=none sanpool/linux rzt2000# zfs list NAME USED AVAIL REFER MOUNTPOINT sanpool 221G 72.6G 27.5K /sanpool sanpool/linux 24.5K 72.6G 24.5K none
ZFS-Dateisystem herkömmlich mit dem Kommando
mountbzw. über die Konfigurationsdatei/etc/vfstabmounten:rzt2000# zfs set mountpoint=legacy sanpool/linux rzt2000# zfs list NAME USED AVAIL REFER MOUNTPOINT sanpool 221G 72.6G 27.5K /sanpool sanpool/linux 24.5K 72.6G 24.5K legacy rzt2000# mount -F zfs sanpool/linux /mnt
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:
Loopback-Mounts für Solaris-Zonen freigeben; ggfs. dafür Solaris-Zonen herunterfahren
ZFS-Pool auf dem alten Rechner freigeben. Alle NFS-Freigaben werden automatisch zurückgenommen und alle Dateisysteme dismountet:
rzt2000# zpool export sanpool
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