Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Apr 2019 12:38:55 -0700
From:      Jim Long <freebsd-questions@umpquanet.com>
To:        Paul Mather <paul@gromit.dlib.vt.edu>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: ZFS is auto-mounting in wrong order
Message-ID:  <20190419193855.GA10389@g5.umpquanet.com>
In-Reply-To: <145D9F3E-A3F8-4153-A7CB-950F1A62F958@gromit.dlib.vt.edu>
References:  <mailman.89.1555675202.62584.freebsd-questions@freebsd.org> <145D9F3E-A3F8-4153-A7CB-950F1A62F958@gromit.dlib.vt.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
Thank you for taking the time to respond, Paul.

On Fri, Apr 19, 2019 at 10:31:26AM -0400, Paul Mather wrote:
> 
> 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.

No, I'm not using any 'noauto'.  My original post shows all filesystems
that are not 'canmount=off'.  Also, my root FS electron/system/ROOT/default 
has no child filesystems, which seems to be what /etc/rc.d/zfsbe
handles.

> > 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

I don't use zfsd, and the core of what /etc/rc.d/zfs does is 'zfs mount -va', 
so I still have no visibility into how 'zfs mount' is ordering the
filesystem mounts.

But it is definitely 'zfs mount -va' that is doing the wrong thing.

I've fashioned this test script to highlight the observable differences
between a correct, manual mounting, and the incorrect mount order used
by zfs mount -a:

--snip--
#!/usr/bin/env bash

# correct mount ordering:
MANUAL="
        zfs mount electron/data
        zfs mount electron/data/backup
        zfs mount electron/data/backup/jimsdesk
"

# automatic mount ordering:
AUTO="
        zfs mount -va
"


case $1
in
   manual)
        MOUNT="$MANUAL"
        ;;

   auto)
        MOUNT="$AUTO"
        ;;
   *)
        exit
esac


cat << EOF | sh -v
        zfs mount | grep '/data'
        mkdir /data
        find  /data
$MOUNT
        zfs mount | grep '/data'
        find /data | head -3000000 | wc -l
        zfs umount /data/backup/jimsdesk
        zfs umount /data/backup
        zfs umount /data
        rmdir /data
        find  /data
EOF
--snip--

Here's a run of that script using the manual mounting order.  The
mountpoint /data is created fresh at the start.  When the filesystems
are correctly mounted, there are over 3 million files under /data.
After unmounting, /data is empty, and can be rmdir'ed.

--snip--
electron : 12:26:00 /root# ./zfs-mount-test.sh manual
        zfs mount | grep '/data'
        mkdir /data
        find  /data
/data

        zfs mount electron/data
        zfs mount electron/data/backup
        zfs mount electron/data/backup/jimsdesk

        zfs mount | grep '/data'
electron/data                   /data
electron/data/backup            /data/backup
electron/data/backup/jimsdesk   /data/backup/jimsdesk
        find /data | head -3000000 | wc -l
 3000000
        zfs umount /data/backup/jimsdesk
        zfs umount /data/backup
        zfs umount /data
        rmdir /data
        find  /data
find: /data: No such file or directory
--snip--

Here's a run of that script using the automatic mounting order.  When
the filesystems are automatically mounted, fewer than 1.5 million files
are present under /data.  After unmounting everything, /data is not
clean, and rmdir returns an error.

--snip--
electron : 12:26:17 /root# ./zfs-mount-test.sh auto
        zfs mount | grep '/data'
        mkdir /data
        find  /data
/data

        zfs mount -va

        zfs mount | grep '/data'
electron/data                   /data
electron/data/backup            /data/backup
electron/data/backup/jimsdesk   /data/backup/jimsdesk
        find /data | head -3000000 | wc -l
 1481445
        zfs umount /data/backup/jimsdesk
        zfs umount /data/backup
cannot unmount '/data/backup': not a mountpoint
        zfs umount /data
        rmdir /data
rmdir: /data: Directory not empty
        find  /data
/data
/data/backup
--snip--

Is this a known issue?  Should I submit a PR?


Thank you!

Jim



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20190419193855.GA10389>