Auf FreeBSD gibt es die Möglichkeit, innerhalb einer Jail das ZFS Dateisystem zu administrieren. Dazu muss auf dem Hostsystem ZFS aktiviert werden:
# echo 'zfs_enable="YES"' >> /etc/rc.conf
# /etc/rc.d/zfs start
Nachdem man eine FreeBSD Jail erstellt hat, muss sichergestellt werden, dass die Jail auch auf /dev/zfs zugreifen kann. Dazu kann in der /etc/devfs.rules folgender Eintrag eingefügt werden:
[zfs=10]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path 'zfs' unhide
Nun müssen bei den Jail-Einträgen der /etc/rc.conf folgende Einträge hinzugefügt werden:
jail_<Jailname>_devfs_enable="YES"
jail_<Jailname>_devfs_ruleset="zfs"
Damit innerhalb der Jail ZFS Dateisysteme gemountet werden können, muss die security.jail.mount_allowed auf 1 gesetzt werden. Durch das Setzen von security.jail.enforce_statfs auf 0 werden alle gemounteten Dateisysteme des Hostsystemes in der Jail sichtbar. Das Setzen beider Werte wird für das Verwenden von ZFS innerhalb einer Jail benötigt, können jedoch die Sicherheit des Systemes heruntersetzen.
# sysctl security.jail.mount_allowed=1
# sysctl security.jail.enforce_statfs=0
# echo security.jail.mount_allowed=1 >> /etc/sysctl.conf
# echo security.jail.enforce_statfs=0 >> /etc/sysctl.conf
Danach kann ein ZFS-Pool erstellt werden. In folgendem Beispiel wird der ZFS-Pool /tank aus /dev/ad0s1e erstellt:
# zpool create tank /dev/ad0s1e
WARNING: ZFS is considered to be an experimental feature in FreeBSD.
ZFS filesystem version 6
ZFS storage pool version 6
Nun wird das ZFS-Dateisystem erstellt, welches man danach der Jail zur Verfügung stellt.
# zfs create tank/jail
# zfs set jailed=on tank/jail
Damit das ZFS-Dateisystem der Jail zugewiesen werden kann, muss die Jail-ID der Jail mit jls(8) herausgefunden werden:
# jls
JID IP Address Hostname Path
1 <IP> <Jail-Name> <Pfad zur Jail>
Nun wird tank/jail der Jail mit der ID 1 zugewiesen:
# zfs jail 1 tank/jail
Danach kann das ZFS Dateisystem innerhalb der Jail administriert werden. Im folgenden Beispiel wird innerhalb der Jail das ZFS-Dateisystem tank/jail/beat erstellt und nach /home/beat gemountet:
jail# zfs create tank/jail/beat
jail# zfs set mountpoint=/home/beat tank/jail/beat
Startet man das Hostsystem neu, wird im Moment das ZFS-Dateisystem nicht automatisch wieder der Jail zugewiesen. Dazu muss die Jail-ID der Jail wieder mit jls bestimmt werden:
# zfs jail <JID> tank/jail
Nun können die ZFS-Dateisysteme innerhalb der Jail gemountet werden.
jail# zfs mount -a
Mehr Informationen zu ZFS findet man in der Manpage zfs(8). Eine kleine Einführung in ZFS auf FreeBSD findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html