As of r364746 (OpenZFS import) existing ZPOOLs are not imported

prior to zvol and mountcritlocal resulting in ZVOLs (swap and
virtual machine UFS filesystems) being unavailable, leading to
boot failures.

We move the zpool import from zfs to a new zpool script, with the
-N option to avoid mounting datasets while making the ZPOOL's
datasets available for "legacy" mount (mountpoint=legacy) and ZVOLs
available for subsequent use for swap (in the zvol rc sript) or
for UFS or other filesystems in fstab(5), mounted by mountcritlocal.

Reviewed by:		freqlabs (previous version)
Differential Revision:	https://reviews.freebsd.org/D26185
This commit is contained in:
Cy Schubert 2020-08-26 13:13:57 +00:00
parent 1e9a0b391d
commit 74e2b24f2c
5 changed files with 34 additions and 9 deletions

View File

@ -318,6 +318,7 @@ CONFGROUPS+= ZFS
ZFS+= zfs
ZFS+= zfsbe
ZFS+= zfsd
ZFS+= zpool
ZFS+= zvol
.endif

View File

@ -4,7 +4,7 @@
#
# PROVIDE: mountcritlocal
# REQUIRE: root hostid_save mdconfig
# REQUIRE: root hostid_save mdconfig zvol
# KEYWORD: nojail shutdown
. /etc/rc.subr

View File

@ -25,13 +25,6 @@ zfs_start_jail()
zfs_start_main()
{
local cachefile
for cachefile in /boot/zfs/zpool.cache /etc/zfs/zpool.cache; do
if [ -r $cachefile ]; then
zpool import -c $cachefile -a
fi
done
zfs mount -va
zfs share -a
if [ ! -r /etc/zfs/exports ]; then

31
libexec/rc/rc.d/zpool Executable file
View File

@ -0,0 +1,31 @@
#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: zpool
# REQUIRE: hostid
# BEFORE: zvol mountcritlocal
# KEYWORD: nojail
. /etc/rc.subr
name="zpool"
desc="Import ZPOOLs"
rcvar="zfs_enable"
start_cmd="zpool_start"
required_modules="zfs"
zpool_start()
{
local cachefile
for cachefile in /boot/zfs/zpool.cache /etc/zfs/zpool.cache; do
if [ -r $cachefile ]; then
zpool import -c $cachefile -a -N
fi
done
}
load_rc_config $name
run_rc_command "$1"

View File

@ -4,7 +4,7 @@
#
# PROVIDE: zvol
# REQUIRE: hostid
# REQUIRE: zpool
# BEFORE: dumpon
# KEYWORD: nojail