This section describes how mount points and shared file systems are managed in ZFS.
By default, all ZFS file systems are mounted by ZFS at boot by using
SMF's svc://system/filesystem/local
service. File systems
are mounted under /path
, where path
is
the name of the file system.
You can override the default mount point by setting the mountpoint property to a specific path by using the zfs set command.
ZFS automatically creates this mount point, if needed, and automatically mounts
this file system when the zfs mount -a command is invoked,
without requiring you to edit the /etc/vfstab
file.
The mountpoint
property is inherited. For example,
if pool/home
has mountpoint set
to /export/stuff
, then pool/home/user
inherits /export/stuff/user
for its mountpoint property.
The mountpoint property can be set to none
to
prevent the file system from being mounted.
If desired, file systems can also be explicitly managed through legacy
mount interfaces by setting the mountpoint property to legacy by using zfs set. Doing so prevents ZFS
from automatically mounting and managing this file system. Legacy tools including
the mount and umount commands, and the /etc/vfstab
file must be used instead. For more information about
legacy mounts, see Legacy Mount Points.
When changing mount point management strategies, the following behaviors apply:
Automatic mount point behavior
Legacy mount point behavior
When changing from legacy
or none
,
ZFS automatically mounts the file system.
If ZFS is currently managing the file system but it is currently unmounted, and the mountpoint property is changed, the file system remains unmounted.
You can also set the default mount point for the root dataset at creation
time by using zpool create's
m
option.
For more information about creating pools, see Creating a ZFS Storage Pool.
Any dataset whose mountpoint property is not legacy
is managed by ZFS. In the following example, a dataset is
created whose mount point is automatically managed by ZFS.
# zfs create pool/filesystem
# zfs get mountpoint pool/filesystem
NAME PROPERTY VALUE SOURCE
pool/filesystem mountpoint /pool/filesystem default
# zfs get mounted pool/filesystem
NAME PROPERTY VALUE SOURCE
pool/filesystem mounted yes -
You can also explicitly set the mountpoint property as shown in the following example:
#zfs set mountpoint=/mnt pool/filesystem
#zfs get mountpoint pool/filesystem
NAME PROPERTY VALUE SOURCE pool/filesystem mountpoint /mnt local #zfs get mounted pool/filesystem
NAME PROPERTY VALUE SOURCE pool/filesystem mounted yes -
When the mountpoint property is changed, the file system is automatically unmounted from the old mount point and remounted to the new mount point. Mount point directories are created as needed. If ZFS is unable to unmount a file system due to it being active, an error is reported and a forced manual unmount is necessary.
You can manage ZFS file systems with legacy tools by setting the mountpoint property to legacy. Legacy file
systems must be managed through the mount and umount commands
and the /etc/vfstab
file. ZFS does not automatically
mount legacy file systems on boot, and the ZFS mount and umount command do not operate on datasets of this type. The following
examples show how to set up and manage a ZFS dataset in legacy mode:
#zfs set mountpoint=legacy tank/home/eschrock
#mount -F zfs tank/home/eschrock /mnt
In particular, if you have set up separate ZFS /usr
or /var
file systems, you must indicate that they are legacy file
systems. In addition, you must mount them by creating entries in the /etc/vfstab
file. Otherwise, the system/filesystem/local
service
enters maintenance mode when the system boots.
To automatically mount a legacy file system on boot, you must add an
entry to the /etc/vfstab
file. The following example
shows what the entry in the /etc/vfstab
file might look
like:
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # tank/home/eschrock - /mnt zfs - yes -
Note that the device to fsck
and fsck pass
entries
are set to -
. This syntax is because the fsck command
is not applicable to ZFS file systems. For more information regarding data
integrity and the lack of need for fsck in ZFS, see Transactional Semantics.
ZFS automatically mounts file systems when file systems are created or when the system boots. Use of the zfs mount command is necessary only when changing mount options or explicitly mounting or unmounting file systems.
The zfs mount command with no arguments shows all currently mounted file systems that are managed by ZFS. Legacy managed mount points are not displayed. For example:
# zfs mount
tank /tank
tank/home /tank/home
tank/home/bonwick /tank/home/bonwick
tank/ws /tank/ws
You can use the
a
option to mount all ZFS managed file
systems. Legacy managed file systems are not mounted. For example:
# zfs mount -a
By default, ZFS does not allow mounting on top of a nonempty directory.
To force a mount on top of a nonempty directory, you must use the
O
option.
For example:
#zfs mount tank/home/lalt
cannot mount '/export/home/lalt': directory is not empty use legacy mountpoint to allow this behavior, or use the -O flag #zfs mount -O tank/home/lalt
Legacy mount points must be managed through legacy tools. An attempt to use ZFS tools results in an error. For example:
#zfs mount pool/home/billm
cannot mount 'pool/home/billm': legacy mountpoint use mount(1M) to mount this filesystem #mount -F zfs tank/home/billm
When a file system is mounted, it uses a set of mount options based on the property values associated with the dataset. The correlation between properties and mount options is as follows:
Mount Options
devices/nodevices
exec/noexec
ro/rw
setuid/nosetuid
The mount option nosuid
is an alias for nodevices,nosetuid
.
If any of the above options are set explicitly by using the
o
option
with the zfs mount command, the associated property value
is temporarily overridden. These property values are reported as temporary
by the zfs get command and revert back to their
original settings when the file system is unmounted. If a property value is
changed while the dataset is mounted, the change takes effect immediately,
overriding any temporary setting.
In the following example, the read-only mount option is temporarily
set on the tank/home/perrin
file system:
# zfs mount -o ro tank/home/perrin
In this example, the file system is assumed to be unmounted. To temporarily
change a property on a file system that is currently mounted, you must use
the special remount
option. In the following example, the atime property is temporarily changed to off
for
a file system that is currently mounted:
#zfs mount -o remount,noatime tank/home/perrin
#zfs get atime tank/home/perrin
NAME PROPERTY VALUE SOURCE tank/home/perrin atime off temporary
For more information about the zfs mount command, see zfs ( 1M ) .
You can unmount file systems by using the zfs unmount subcommand. The unmount command can take either the mount point or the file system name as arguments.
In the following example, a file system is unmounted by file system name:
# zfs unmount tank/home/tabriz
In the following example, the file system is unmounted by mount point:
# zfs unmount /export/home/tabriz
The unmount command fails if the file system is active
or busy. To forceably unmount a file system, you can use the
f
option.
Be cautious when forceably unmounting a file system, if its contents are actively
being used. Unpredictable application behavior can result.
#zfs unmount tank/home/eschrock
cannot unmount '/export/home/eschrock': Device busy #zfs unmount -f tank/home/eschrock
To provide for backwards compatibility, the legacy umount command can be used to unmount ZFS file systems. For example:
# umount /export/home/bob
For more information about the zfs umount command, see zfs ( 1M ) .
Similar to mount points, ZFS can automatically share file systems by
using the sharenfs property. Using this method, you do
not have to modify the /etc/dfs/dfstab
file when a new
file system is added. The sharenfs property is a comma-separated
list of options to pass to the share command. The special
value on
is an alias for the default share options, which
are read/write
permissions for anyone. The special value off
indicates that the file system is not managed by ZFS and can
be shared through traditional means, such as the /etc/dfs/dfstab
file.
All file systems whose sharenfs property is not off
are shared during boot.
By default, all file systems are unshared. To share a new file system, use zfs set syntax similar to the following:
# zfs set sharenfs=on tank/home/eschrock
The property is inherited, and file systems are automatically shared
on creation if their inherited property is not off
. For
example:
#zfs set sharenfs=on tank/home
#zfs create tank/home/bricker
#zfs create tank/home/tabriz
#zfs set sharenfs=ro tank/home/tabriz
Both tank/home/bricker
and tank/home/tabriz
are
initially shared writable because they inherit the sharenfs property
from tank/home
. Once the property is set to ro
(readonly), tank/home/tabriz
is shared read-only regardless of the sharenfs property that is set for tank/home
.
While most file systems are automatically shared and unshared during boot, creation, and destruction, file systems sometimes need to be explicitly unshared. To do so, use the zfs unshare command. For example:
# zfs unshare tank/home/tabriz
This command unshares the tank/home/tabriz
file
system. To unshare all ZFS file systems on the system, you need to use the
a
option.
# zfs unshare -a
Most of the time the automatic behavior of ZFS, sharing on boot and creation, is sufficient for normal operation. If, for some reason, you unshare a file system, you can share it again by using the zfs share command. For example:
# zfs share tank/home/tabriz
You can also share all ZFS file systems on the system by using the
a
option.
# zfs share -a
If the sharenfs property is off
,
then ZFS does not attempt to share or unshare the file system at any time.
This setting enables you to administer through traditional means such as the /etc/dfs/dfstab
file.
Unlike the traditional mount command, the traditional share and unshare commands can still function
on ZFS file systems. As a result, you can manually share a file system with
options that are different from the settings of the sharenfs
property.
This administrative model is discouraged. Choose to either manage NFS shares
completely through ZFS or completely through the /etc/dfs/dfstab
file.
The ZFS administrative model is designed to be simpler and less work than
the traditional model. However, in some cases, you might still want to control
file system sharing behavior through the familiar model.