ZFS 文件系统

挂载 ZFS 文件系统

本节介绍了 ZFS 如何挂载文件系统。

  • 管理 ZFS 挂载点

  • 挂载 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

挂载选项 nosuid 是 nodevices,nosetuid 的别名。

可以使用 NFSv4 镜像挂载功能来帮助您更好地管理已挂载 NFS 的 ZFS 起始目录。

在 NFS 服务器上创建文件系统后,NFS 客户机可以在这些新创建的文件系统的现有父文件系统挂载内自动对其进行搜索。

例如,如果服务器 neo 已共享了 tank 文件系统并且客户机 zee 已将其挂载,则在该服务器上创建 /tank/baz 后,它会在该客户机上自动可见。

zee# mount neo:/tank /mnt
zee# ls /mnt
baa    bar

neo# zfs create tank/baz

zee% ls /mnt
baa    bar    baz
zee% ls /mnt/baz
file1    file2 

使用临时挂载属性

如果使用带有 -o 选项的 zfs mount 命令显式设置了前一部分所述的任何挂载选项,则会临时覆盖关联的属性值。zfs get 命令将这些属性值报告为 temporary,并在文件系统取消挂载时恢复为其初始值。如果在挂载文件系统时更改了某个属性值,更改将立即生效,并覆盖所有临时设置。

在以下示例中,对 tank/home/neil 文件系统临时设置了只读挂载选项。假设要取消挂载文件系统。

# zfs mount -o ro users/home/neil

要临时更改当前已挂载的文件系统的属性值,必须使用特殊的 remount 选项。在以下示例中,对于当前挂载的文件系统,atime 属性暂时更改为 off:

# zfs mount -o remount,noatime users/home/neil
NAME             PROPERTY  VALUE  SOURCE
users/home/neil  atime     off    temporary
# zfs get atime users/home/perrin

有关 zfs mount 命令的更多信息,请参见 zfs(1M)。

取消挂载 ZFS 文件系统

通过使用 zfs unmount 子命令可以取消挂载 ZFS 文件系统。unmount 命令可以采用挂载点或文件系统名称作为参数。

在以下示例中,按文件系统名称取消挂载一个文件系统:

# zfs unmount users/home/mark

在以下示例中,按挂载点取消挂载一个文件系统:

# zfs unmount /users/home/mark

如果文件系统处于繁忙状态,则 unmount 命令将失败。要强行取消挂载文件系统,可以使用 -f 选项。如果文件系统内容正处于使用状态,强行取消挂载该文件系统时请务必小心。否则,会产生不可预测的应用程序行为。

# zfs unmount tank/home/eric
cannot unmount '/tank/home/eric': Device busy
# zfs unmount -f tank/home/eric

要提供向后兼容性,可以使用传统的 umount 命令来取消挂载 ZFS 文件系统。例如:

# umount /tank/home/bob

你可能感兴趣的:(系统)