Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Apr 2020 14:35:41 -0400
From:      Ryan Moeller <freqlabs@FreeBSD.org>
To:        freebsd-current@freebsd.org, freebsd-stable@freebsd.org
Subject:   OpenZFS port updated
Message-ID:  <A61E33DF-96D0-449D-8665-9089599F0583@FreeBSD.org>

next in thread | raw e-mail | index | archive | help
FreeBSD support has been merged into the master branch of the =
openzfs/zfs repository, and the FreeBSD ports have been switched to this =
branch.

OpenZFS brings many exciting features to FreeBSD, including:
 * native encryption
 * improved TRIM implementation
 * most recently, persistent L2ARC

Of course, avoid upgrading your pools if you want to keep the option to =
go back to the base ZFS.

OpenZFS can be installed alongside the base ZFS. Change your loader.conf =
entry to openzfs_load=3D=E2=80=9CYES=E2=80=9D to load the OpenZFS module =
at boot, and set PATH to find the tools in /usr/local/sbin before /sbin. =
The base zfs tools are still basically functional with the OpenZFS =
module, so changing PATH in rc is not strictly necessary.

The FreeBSD loader can boot from pools with the encryption feature =
enabled, but the root/bootenv datasets must not be encrypted themselves.

The FreeBSD platform support in OpenZFS does not yet include all =
features present in FreeBSD=E2=80=99s ZFS. Some notable changes/missing =
features include:
 * many sysctl names have changed (legacy compat sysctls should be added =
at some point)=20
 * zfs send progress reporting in process title via setproctitle
 * extended 'zfs holds -r' =
(https://svnweb.freebsd.org/base?view=3Drevision&revision=3D290015)
 * vdev ashift optimizations =
(https://svnweb.freebsd.org/base?view=3Drevision&revision=3D254591)
 * pre-mountroot zpool.cache loading (for automatic pool imports)

To the last point, this mainly effects the case where / is on ZFS and =
/boot is not or is on a different pool. OpenZFS cannot handle this case =
yet, but work is in progress to cover that use case. Booting directly =
from ZFS does work.

If there are pools that need to be imported at boot other than the boot =
pool, OpenZFS does not automatically import yet, and it uses =
/etc/zfs/zpool.cache rather than /boot/zfs/zpool.cache to keep track of =
imported pools.  To ensure all pool imports occur automatically, a =
simple edit to /etc/rc.d/zfs will suffice:

diff --git a/libexec/rc/rc.d/zfs b/libexec/rc/rc.d/zfs
index 2d35f9b5464..8e4aef0b1b3 100755
--- a/libexec/rc/rc.d/zfs
+++ b/libexec/rc/rc.d/zfs
@@ -25,6 +25,13 @@ zfs_start_jail()
=20
 zfs_start_main()
 {
+	local cachefile
+
+	for cachefile in /boot/zfs/zpool.cache /etc/zfs/zpool.cache; do
+		if [ -f $cachefile ]; then
+			zpool import -c $cachefile -a
+		fi
+	done
 	zfs mount -va
 	zfs share -a
 	if [ ! -r /etc/zfs/exports ]; then

This will probably not be needed long-term. It is not necessary if the =
boot pool is the only pool.

Happy testing :)

- Ryan=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?A61E33DF-96D0-449D-8665-9089599F0583>