#!/bin/sh # # $FreeBSD$ # # PROVIDE: zfsbe # REQUIRE: mountcritlocal # Handle boot environment subordinate filesystems # that may have canmount property set to noauto. # For these filesystems mountpoint relative to / # must be the same as their dataset name relative # to BE root dataset. . /etc/rc.subr name="zfsbe" rcvar="zfs_enable" start_cmd="be_start" stop_cmd="be_stop" required_modules="zfs" mount_subordinate() { local _be _be=$1 zfs list -rH -o mountpoint,name,canmount -s mountpoint -t filesystem $_be | \ while read _mp _name _canmount ; do [ "$_canmount" = "off" ] && continue case "$_mp" in "") ;; "legacy") ;; "/") ;; "/$_be") ;; "/$_be/"*) mount -t zfs $_name ${_mp#/$_be} ;; *) zfs mount $_name ;; esac done } be_start() { if [ `$SYSCTL_N security.jail.jailed` -eq 1 ]; then : else mount -p | while read _dev _mp _type _rest; do [ $_mp = "/" ] || continue if [ $_type = "zfs" ] ; then mount_subordinate $_dev fi break done fi } be_stop() { } load_rc_config $name run_rc_command "$1"