ZFS is auto-mounting in wrong order
Paul Mather
paul at gromit.dlib.vt.edu
Fri Apr 19 14:31:34 UTC 2019
Jim Long <freebsd-questions at umpquanet.com> wrote:
> I have a system that boots from ZFS. I recently upgraded it from
> FreeBSD 11.2-STABLE to 12.0-STABLE:
>
> FreeBSD electron 12.0-STABLE FreeBSD 12.0-STABLE r346293 GENERIC amd64
>
> I'm seeing certain directories as empty, when they should have lots of
> content. The problem can be worked around by unmounting key
> filesystems, and re-mounting them in the proper order.
>
> Troubleshooting leads me to believe that the ZFS system is not mounting
> them in the proper order, but I don't know of any way to either log the
> order that they are mounted in at boot time, nor to inspect on a
> hypothetical "dry-run" basis what ZFS thinks the correct mount order is.
>
> I did not have this problem prior to the 11 -> 12 upgrade, if that
> matters.
I encountered this problem in upgrading from 11-STABLE -> 12-STABLE. Under
11-STABLE and prior, when upgrading in single-user mode I would use "zfs
mount -a" to mount my ZFS file systems. Under 12-STABLE, this resulted in
many "empty directories" as you mention. It caused the subsequent "make
installworld" to fail.
In my case, I discovered it was the way my boot environment had been set up
that was causing this. The file systems under my boot environment "root"
(pool/ROOT) were all marked as "noauto". Under 11-STABLE, "zfs mount -a"
would successfully mount these file systems (even though the man page said
it shouldn't). Under 12-STABLE, "zfs mount -a" acts in accordance with the
man page and does not mount these file systems in response to "zfs mount
-a".
My workaround was now to mount ZFS file systems as the system does: first
execute /etc/rc.d/zfsbe and then /etc/rc.d/zfs, i.e., "/etc/rc.d/zfsbe
start ; /etc/rc.d/zfs start". That correctly mounts the active boot
environment and then the rest of the ZFS file systems on top of it.
I notice you have an "electron/system/ROOT" ZFS file system, so maybe you
are using boot environments, too? Do you have any ZFS file systems marked
"noauto" for the "canmount" property? It doesn't seem so, but I thought I
would double-check.
> This seems like strong evidence that /data/backup is getting mounted
> before /data gets mounted, and ZFS is auto-creating the mountpoint
> directory.
>
> How can I definitively SEE the order in which ZFS will mount
> filesystems, either in a "dry-run" mode, or have it logged in real time
> during the boot process?
The "service -e" command will show you the order in which services will be
started. In my 12-STABLE system, ZFS related startup scripts seem to run
in this order:
% service -e | grep zfs
/etc/rc.d/zfsbe
/etc/rc.d/zfs
/etc/rc.d/zfsd
The zfsbe service handles mounting of the active boot environment. The zfs
service mounts the rest of the ZFS filesystems (the non-"noauto" ones, that
is). (The zfsd service runs the ZFS fault management daemon, driven by
devd events.)
You could run these scripts manually via "/bin/sh -x" to trace what they
are doing.
I hope this helps.
Cheers,
Paul.
More information about the freebsd-questions
mailing list