zfs_enable vs zfs_load in loader.conf (but neither works)

Freddie Cash fjwcash at gmail.com
Mon Sep 9 17:23:26 UTC 2013


On Mon, Sep 9, 2013 at 10:15 AM, J David <j.david.lists at gmail.com> wrote:

> On Mon, Sep 9, 2013 at 8:55 AM, krad <kraduk at gmail.com> wrote:
> > you will find without 'zfs_enable="YES" ' set a lot of the zfs datasets
> > might not get mounted
>
> Matthew has the same understanding of this that I do: zfs_load goes in
> loader.conf and zfs_enable goes in rc.conf.
>
> zfs_load causes the loader to load zfs.ko and opensolaris.ko so that
> the kernel can access the zpool (e.g. to mount the root filesystem)
> after /boot/zfsloader finishes.
>
> zfs_enable in rc.conf activates the /etc/rc.d/zfs and /etc/rc.d/zvol
> scripts.  (And tweaks mountd on nfs servers.)
>
> There are several online ZFS-root recipies that say differently
> (mainly that using zfs_load has been replaced by zfs_enable in
> loader.conf), but I haven't found any authoritative references that
> support that.  Have you?  (Also, it doesn't work in testing; the two
> .ko's aren't loaded if zfs_load is not present.)
>
> In the absence of new info, that seems like the right way to do it.
>
> Things get sticky when it comes to establishing the ZFS root
> filesystem.  There are at least four ways to go about it:
>
> 1) Set vfs.root.mountfrom="zfs:data/root" in loader.conf.
> 2) Run "zpool set bootfs=data/root data" on the pool.
> 3) Run "zfs set mountpoint=/ data/root" on the root filesystem.
> 4) Run "zfs set mountpoint=legacy data/root" on the root filesystem
> and an /etc/fstab entry.
>
> Unfortunately, some of these are not sufficient by themselves, or they
> don't work at all.  So the question is, for 9.2, which (combination
> of?) these is the authoritatively correct way to identify the ZFS root
> filesystem?
>
> And, for the sake of release engineering, how does 9.2 differ from 9.1
> in this regard?
>

The following works on my 9.2-STABLE system (upgraded from 9.1 without any
changes):

/boot/loader.conf:
zfs_load="YES"
vfs.root.mountfrom="zfs:pool/ROOT/default"

/etc/rc.conf:
zfs_enable="YES"

zpool get bootfs pool:
NAME  PROPERTY  VALUE              SOURCE
pool  bootfs    pool/ROOT/default  local

zfs get mountpoint pool/ROOT/default:
NAME               PROPERTY    VALUE       SOURCE
pool/ROOT/default  mountpoint  legacy      local

/etc/fstab is completely empty.  The above works with or without beadm
installed from ports, but is fully supported by beadm making upgrades much
simpler.

With gptzfsloader installed as the boot loader, due to using GPT to
partition the disks in the pool.  There are 4x harddrives in the pool,
configured as two mirror vdevs (no log or cache devices).

-- 
Freddie Cash
fjwcash at gmail.com


More information about the freebsd-fs mailing list