Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 Aug 2007 12:07:08 -0500
From:      "Scot Hetzel" <swhetzel@gmail.com>
To:        pjd@freebsd.org
Cc:        FreeBSD-CURRENT@freebsd.org
Subject:   mount gets into a state where it won't set/unset ZFS properties (atime, exec, setuid)
Message-ID:  <790a9fff0708091007h48cb5133t16638a24076795f8@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
While checking out a problem with mount unsetting noatime on a UFS
system, I tested mount with both a UFS and ZFS filesystems.  The ZFS
filesystem had several problems:

hp010# uname -a
FreeBSD hp010.hetzel.org 7.0-CURRENT FreeBSD 7.0-CURRENT #0: Wed Aug
8 10:38:34 CDT 2007
root@hp010.hetzel.org:/usr/src/7x/sys/amd64/compile/GENERIC.debug
amd64

hp010# umount /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default

hp010# zfs mount -a
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)

hp010# mount -u -o noexec,nosuid /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      off                           temporary
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local,
noexec, nosuid)

Why doesn't the setuid property change to 'temporary' for
rootpool/usr/ports/distfiles?

hp010# mount -u -o exec,suid /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      off                           temporary
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local,
noexec, nosuid)

mount can't get rid of these options.

hp010# mount -u -o noatime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     off                           temporary
rootpool/usr/ports/distfiles  exec      off                           temporary
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local,
noatime, noexec, nosuid)

hp010# mount -u -o atime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     off                           temporary
rootpool/usr/ports/distfiles  exec      off                           temporary
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local,
noatime, noexec, nosuid)

Same problem with getting rid of noatime.  I would have expected mount
to be able to be able to change the zfs properties of atime, exec back
to on.

hp010# zfs inherit -r atime rootpool/usr/ports/distfiles
hp010# zfs inherit -r exec rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid)


hp010# zfs set setuid=off rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    off                           local
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid)

hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)

We have now set everything back to the default mount options using 'zfs inherit'

hp010# mount -u -o noatime,noexec,nosuid /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid)

Now mount can't set noatime or noexec.

hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)

Back to the defaults again.

This last part gets a bit strange, without umounting
/usr/ports/distfiles, I tried the following:

hp010# mount -u -o nosuid /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid)
hp010# zfs set setuid=off rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    off                           local
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid)
hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)
hp010# mount -u -o noatime,noexec,nosuid /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      off                           temporary
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local,
noexec, nosuid)
hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles
hp010# zfs inherit -r exec rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)
hp010# mount -u -o noatime,noexec,nosuid /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      off                           temporary
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local,
noexec, nosuid)

It won't set noatime when noexec and nosuid are specified.

hp010# mount -u -o noatime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid)

Now it removed noexec, and didn't set noatime.

hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)

Lets try setting noatime again:

hp010# mount -u -o noatime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid)

mount shows nosuid.  Lets unset if with zfs inherit:

hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)

nosuid is gone, lets see if we can now set noatime:

hp010# mount -u -o noatime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid)

Again mount is showing nosuid:

hp010# mount -u -o nonoatime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid)
hp010# mount -u -o nonosuid /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, nosuid)

Try nonoatime and nonosuid, but mount still showing nosuid.  Using zfs
inherit gets rid of nosuid:

hp010# zfs inherit -r setuid rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)

Give up, and umount the filesystem:

hp010# umount /usr/ports/distfiles
hp010# zfs mount -a
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)
hp010# mount -u -o noatime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     off                           temporary
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noatime)

We can now set noatime, try nonoatime to unset it:

hp010# mount -u -o nonoatime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     off                           temporary
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noatime)

That didn't work, does atime work:

hp010# mount -u -o atime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     off                           temporary
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local, noatime)

Reset atime to defaults with zfs inherit:

hp010# zfs inherit -r atime rootpool/usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)

Does nonoatime have any side efects now:

hp010# mount -u -o nonoatime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)

No side effect, lets try setting noatime:

hp010# mount -u -o noatime /usr/ports/distfiles
hp010# zfs get atime,exec,setuid rootpool/usr/ports/distfiles ; mount
| grep distfiles
NAME                          PROPERTY  VALUE                         SOURCE
rootpool/usr/ports/distfiles  atime     on                            default
rootpool/usr/ports/distfiles  exec      on                            default
rootpool/usr/ports/distfiles  setuid    on                            default
rootpool/usr/ports/distfiles on /usr/ports/distfiles (zfs, local)
hp010#

Now mount can't set noatime.

Scot
-- 
DISCLAIMER:
No electrons were mamed while sending this message. Only slightly bruised.



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