挂载 ZFS 文件系统
本节介绍了 ZFS 如何挂载文件系统。
管理 ZFS 挂载点
缺省情况下,ZFS 文件系统在创建时自动挂载。可以确定文件系统的特定挂载点行为,如本节所述。
另外,也可以在创建时使用 zpool create 的 -m 选项为池文件系统设置缺省挂载点。有关创建池的更多信息,请参见创建 ZFS 存储池。
所有 ZFS 文件系统都由 ZFS 通过使用服务管理工具 (Service Management Facility, SMF) 的 svc://system/filesystem/local 服务在引导时挂载。文件系统挂载在 /path 下,其中 path 是文件系统的名称。
可以使用 zfs set 命令将 mountpoint 属性设置为特定路径,以覆盖缺省挂载点。ZFS 自动创建指定的挂载点(如果需要),并自动挂载关联的文件系统。
ZFS 文件系统无需您编辑 /etc/vfstab 文件即可在引导时自动挂载。
mountpoint 属性是继承的。例如,如果 pool/home 的 mountpoint 属性设置为 /export/stuff,则 pool/home/user 将继承 /export/stuff/user 的 mountpoint 属性值。
要阻止文件系统被挂载,须将 mountpoint 属性设置为 none。此外,canmount 属性可以用来控制是否能挂载文件系统。有关 canmount 属性的更多信息,请参见canmount 属性。
也可以使用 zfs set 将 mountpoint 属性设置为 legacy,从而通过传统挂载接口显式管理文件系统。这样做可以防止 ZFS 自动挂载和管理文件系统。不过必须改用包括 mount 和 umount 命令在内的传统工具以及 /etc/vfstab 文件。有关传统挂载的更多信息,请参见传统挂载点。
自动挂载点
将 mountpoint 属性从 legacy 或 none 更改为特定路径时,ZFS 会自动挂载文件系统。
如果 ZFS 正在管理文件系统,但该文件系统当前已取消挂载,并且 mountpoint 属性已更改,则文件系统将保持取消挂载状态。
mountpoint 属性不是 legacy 的所有文件系统都由 ZFS 来管理。在以下示例中,创建了一个挂载点由 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 -
另外,也可按以下示例所示,显式设置 mountpoint 属性:
# 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 -
mountpoint 属性更改时,文件系统将自动从旧挂载点取消挂载,并重新挂载到新挂载点。挂载点目录根据需要进行创建。如果 ZFS 由于文件系统正处于活动状态而无法将其取消挂载,则会报告错误,并需要强制进行手动取消挂载。
传统挂载点
通过将 mountpoint 属性设置为 legacy,可以使用传统工具来管理 ZFS 文件系统。传统文件系统必须通过 mount 和 umount 命令以及 /etc/vfstab 文件来管理。ZFS 在引导时不会自动挂载传统文件系统,并且 ZFS mount 和 umount 命令不会对此类型的文件系统执行操作。以下示例展示了如何在传统模式下设置和管理 ZFS 文件系统:
# zfs set mountpoint=legacy tank/home/eric
# mount -F zfs tank/home/eschrock /mnt
要在引导时自动挂载传统文件系统,必须向 /etc/vfstab 文件中添加一项。/etc/vfstab 文件中的项可能看起来如下例所示:
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
tank/home/eric - /mnt zfs - yes -
device to fsck 和 fsck pass 项设置为 -,因为 fsck 命令不适用于 ZFS 文件系统。有关 ZFS 数据完整性的更多信息,请参见 事务性语义。
挂载 ZFS 文件系统
创建文件系统或系统引导时,ZFS 会自动挂载文件系统。仅当需要更改挂载选项,或者显式挂载或取消挂载文件系统时,才有必要使用 zfs mount 命令。
不带任何参数的 zfs mount 命令可以显示 ZFS 管理的当前已挂载的所有文件系统。传统管理的挂载点不会显示。例如:
# zfs mount | grep tank/home
zfs mount | grep tank/home
tank/home /tank/home
tank/home/jeff /tank/home/jeff
可以使用 -a 选项挂载 ZFS 管理的所有文件系统。传统管理的文件系统不会挂载。例如:
# zfs mount -a
缺省情况下,ZFS 不允许在非空目录的顶层进行挂载。例如:
# zfs mount tank/home/lori
cannot mount 'tank/home/lori': filesystem already mounted
传统挂载点必须通过传统工具进行管理。尝试使用 ZFS 工具将产生错误。例如:
# zfs mount tank/home/bill
cannot mount 'tank/home/bill': legacy mountpoint
use mount(1M) to mount this filesystem
# mount -F zfs tank/home/billm
当挂载文件系统时,它根据与文件系统关联的属性值使用一组挂载选项。属性与挂载选项之间的相互关系如下:
表 6-4 ZFS 挂载相关的属性和挂载选项
属性
挂载选项
atime
atime/noatime
devices
devices/nodevices
exec
exec/noexec
nbmand
nbmand/nonbmand
readonly
ro/rw
setuid
setuid/nosetuid
xattr
xattr/noaxttr