跳过导航链接 | |
退出打印视图 | |
Oracle Solaris ZFS 管理指南 Oracle Solaris 10 1/13 Information Library (简体中文) |
1. Oracle Solaris ZFS 文件系统(介绍)
4. 安装和引导 Oracle Solaris ZFS 根文件系统
6. 使用 Oracle Solaris ZFS 快照和克隆
7. 使用 ACL 和属性保护 Oracle Solaris 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 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 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
当挂载文件系统时,它根据与文件系统关联的属性值使用一组挂载选项。属性与挂载选项之间的相互关系如下:
表 5-4 ZFS 挂载相关的属性和挂载选项
|
挂载选项 nosuid 是 nodevices,nosetuid 的别名。
如果使用带有 -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 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
有关 zfs umount 命令的更多信息,请参见 zfs(1M)。
只要设置 sharenfs 属性,ZFS 便能自动共享文件系统。使用此属性时,不必在共享新文件系统时修改 /etc/dfs/dfstab 文件。sharenfs 属性是要传递给 share 命令的选项的逗号分隔列表。值 on 是缺省的共享选项的别名,它向所有用户提供 read/write 权限。值 off 指明文件系统不是由 ZFS 进行管理,但可通过传统方法(如 /etc/dfs/dfstab 文件)来共享。在引导过程中将会共享 sharenfs 属性不为 off 的所有文件系统。
缺省情况下,所有文件系统都不共享。要共享新文件系统,请使用类似如下的 zfs set 语法:
# zfs set sharenfs=on tank/home/eric
sharenfs属性是继承的,如果文件系统继承的属性不为 off,则这些文件系统在创建时会自动进行共享。例如:
# zfs set sharenfs=on tank/home # zfs create tank/home/bill # zfs create tank/home/mark # zfs set sharenfs=ro tank/home/bob
tank/home/bill 和 tank/home/mark 最初以可写方式共享,因为它们从 tank/home 继承了 sharenfs 属性。将该属性设置为 ro(只读)后,无论为 tank/home 设置的 sharenfs 属性为何值,都会以只读方式共享 tank/home/mark。
尽管大多数文件系统都可在引导、创建和销毁过程中自动共享或取消共享,但文件系统有时候需要显式取消共享。为此,请使用 zfs unshare 命令。例如:
# zfs unshare tank/home/mark
此命令会取消共享 tank/home/mark 文件系统。要取消共享系统中的所有 ZFS 文件系统,需要使用 -a 选项。
# zfs unshare -a
通常而言,ZFS 在引导和创建时共享文件系统的自动行为足以满足一般操作的需要。如果由于某些原因取消共享了某个文件系统,则可使用 zfs share 命令再次将其共享。例如:
# zfs share tank/home/mark
另外,还可以通过使用 -a 选项共享系统中的所有 ZFS 文件系统。
# zfs share -a
如果 sharenfs 属性设置为 off,则 ZFS 在任何时候都不会尝试共享或取消共享文件系统。借助此值,可以通过传统方法(如 /etc/dfs/dfstab 文件)来管理文件系统共享。
与传统的 mount 命令不同,传统的 share 和 unshare 命令在 ZFS 文件系统中仍然可以运行。因此,可以使用与 sharenfs 属性的选项不同的选项来手动共享文件系统。不鼓励使用这种管理模型。请选择完全通过 ZFS 或完全通过 /etc/dfs/dfstab 文件来管理 NFS 共享内容。ZFS 管理模型与传统模型相比,设计更为简单,所需进行的工作越少。