Changeset View
Changeset View
Standalone View
Standalone View
head/etc/rc.d/zfsbe
Property | Old Value | New Value |
---|---|---|
svn:executable | null | * \ No newline at end of property |
svn:keywords | null | FreeBSD=%H \ No newline at end of property |
#!/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,mounted -s mountpoint -t filesystem $_be | \ | |||||
while read _mp _name _canmount _mounted ; do | |||||
# skip filesystems that must not be mounted | |||||
[ "$_canmount" = "off" ] && continue | |||||
# skip filesystems that are already mounted | |||||
[ "$_mounted" = "yes" ] && continue | |||||
case "$_mp" in | |||||
"none" | "legacy" | "/" | "/$_be") | |||||
# do nothing for filesystems with unset or legacy mountpoint | |||||
# or those that would be mounted over / | |||||
;; | |||||
"/$_be/"*) | |||||
# filesystems with mountpoint relative to BE | |||||
mount -t zfs $_name ${_mp#/$_be} | |||||
;; | |||||
*) | |||||
# filesystems with mountpoint elsewhere | |||||
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" |