Die folgenden drei Verzeichnisse kommen ebenfalls ohne Kompression aus, weil die abgelegten Daten größtenteils Binärdaten oder wie »/var/run
«
Unix-Sockets enthalten:
zfs create -o exec=off -o setuid=off fbsd/var/db zfs create -o exec=off -o setuid=off fbsd/var/run
Wenn alle Datensätze angelegt sind, verlässt man die Shell mit »exit
«
oder [Strg]+[D] und setzt die Installation mit Hilfe von BSDInstall fort. Am Ende der Installation wechselt man ein weiteres Mal in die Shell, um einige wichtige Einstellungen vorzunehmen: Damit die ZFS-Module beim Booten geladen werden, trägt man sie in »/boot/loader.conf
«
ein. Während der Installationsphase ist diese Datei im Verzeichnis »/mnt/boot/loader.conf
«
zu finden:
echo 'zfs_load="YES"' >> /mnt/boot/loader.conf echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
Ein Eintrag in »/mnt/etc/rc.conf
«
sorgt für das Laden der ZFS-Module:
echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
Damit der Kernel weiß, von welchem Laufwerk er booten soll, muss der Administrator in »/mnt/boot/loader.conf
«
diese Zeile eintragen:
echo 'vfs.root.mountfrom="zfs:fbsd"' >>/mnt/boot/loader.conf
Bei einer normalen Installation trägt BSDInstall die Laufwerke mit der Swap-Partition automatisch in »/etc/fstab
«
ein. Bei dem hier beschrittenen Weg ist das nicht der Fall. Diese Zeilen sind notwendig:
/dev/gpt/swap0 none swap sw 0 0 /dev/gpt/swap1 none swap sw 0 0
Abschließend teilt man der ZFS-Verwaltung die Mountpoints mit, wie Listing 2 zeigt.
Listing 2
Mountpoints melden
Die folgenden Kommandos schreiben alle Tabellen in den ZPool und bringen ZFS in einen ordnungsgemäßen Zustand:
cd / zfs export fbsd zpool import -o altroot=/tmp/fbsd -o cachefile=/tmp/zpool.cache fbsd cd /tmp/fbsd/boot/zfs cp /tmp/zpool.cache . cd /
Nach einem Reboot startet FreeBSD vom ZPool und der weiteren Administration steht nichts mehr im Wege. Wenn man sich das System wie gewünscht eingerichtet hat, hat man die Möglichkeit von den relevanten Verzeichnissen Snapshots zu erzeugen.
Eines der bekanntesten Features von FreeBSD sind die Jails. Sie sind ein Sicherheitskonzept, welches das Konzept von »chroot()
«
erheblich erweitert. Programme, die in einer Jail gestartet werden, haben keine Möglichkeit, auf Resourcen des Hosts zuzugreifen. Es gibt aber auch Ausnahmen. Wenn beispielsweise einem Kunden eine Jail unter der Maßgabe zur Verfügung gestellt werden soll, dass er Datasets innerhalb der Jail selber anlegen darf. Hierfür bietet die ZFS-Implementierung in FreeBSD eine Lösung an.
Nachdem man eine FreeBSD-Jail erstellt hat, muss sichergestellt sein, dass sie auf »/dev/zfs
«
zugreifen kann. Über dieses Device läuft die Kommunikation mit ZFS. Dies ermöglicht in der Konfiguration des Device-Managers »/etc/devfs.rules
«
der folgende Eintrag:
[zfs=10] add include $devfsrules_hide_all add include $devfsrules_unhide_basic add include $devfsrules_unhide_login add path 'zfs' unhide
In der Systemkonfiguration des Hosts »/etc/rc.conf
«
ändert man für die gewünschte Jail die Einträge nach folgendem Muster:
jail_Jailname_devfs_enable="YES" jail_Jailname_devfs_ruleset="zfs"
Um das Mounten von ZFS-Datasets in der Jail zu erlauben, trägt man in »/etc/sysctl.conf
«
diese beiden Zeilen ein:
security.jail.mount_allowed=1 security.jail.enforce_statfs=0
Der SysCtl-MIB »security.jail.mount_allowed
«
bewirkt, dass der Anwender innerhalb der Jail Mount-Operationen durchführen darf. Der zweite SysCtl-MIB »security.jail.enforce_statfs
«
lässt alle gemounteten Dateisysteme sichtbar werden. Das Setzen beider Werte ist für das Funktionieren von ZFS innerhalb einer Jail nötig, reduziert allerdings die Sicherheit des Hostsystems. Danach erstellt man ein ZFS-Dataset:
zfs create fbsd/jail zfs set jailed=on fbsd/jail
Das ZFS-Dataset muss anschließend der gewünschten Jail zugeordnet werden. Dazu ermittelt man mit »jls
«
die Identifikationsnummer der Jail (JID) und übergibt sie ZFS:
jls JID IP Address Hostname Path 1 IP-Adresse Jail-Name Jail-Pfad zfs jail 1 fbsd/jail
Danach hat man die Möglichkeit, das ZFS-Dataset innerhalb der Jail zu administrieren. Allerdings sollte man beachten, dass nach jedem Systemstart das Dataset wieder der Jail zugeordnet werden muss. Mit einem kleinen Skript ist das schnell erledigt.