--- zfs 2016-10-13 08:19:54.000000000 +0200 +++ zfs 2019-05-21 11:25:16.949181000 +0200 @@ -16,6 +16,11 @@ stop_cmd="zfs_stop" required_modules="zfs" +# Add the following lines to /etc/rc.conf to enable ZFS ordered mount: +# zfs_ordered_mount_enable (bool): Mount ZFS in order (or NO). + +zfs_ordered_mount_enable=${zfs_ordered_mount_enable:-"NO"} + zfs_start_jail() { if [ `$SYSCTL_N security.jail.mount_allowed` -eq 1 ]; then @@ -25,11 +30,38 @@ zfs_start_main() { - zfs mount -va + if checkyesno zfs_ordered_mount_enable; then + local _zroot _zpool + + _zroot=`df -t zfs / | tail -1 | cut -d / -f 1` + + if [ -n "${_zroot}" ]; then + zfs_mount_pool ${_zroot} + fi + + for _zpool in `zpool list -Ho name`; do + if [ "${_zpool}" != "${_zroot}" ]; then + zfs_mount_pool ${_zpool} + fi + done + else + zfs mount -va + fi zfs share -a if [ ! -r /etc/zfs/exports ]; then touch /etc/zfs/exports fi +} + +zfs_mount_pool() +{ + local _fs1 _fs2 + + _fs1=`zfs list -Hro mountpoint,name -t filesystem ${1} | egrep -ve '^legacy|^none' | awk '{print $2}'` + + for _fs2 in `zfs list -Hro canmount,name -t filesystem ${_fs1} | egrep -ve ^off | awk '{print $2}'`; do + zfs mount -v ${_fs2} + done } zfs_start()