跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 管理:ZFS 文件系统 Oracle Solaris 11 Information Library (简体中文) |
1. Oracle Solaris ZFS 文件系统(介绍)
3. Oracle Solaris ZFS 与传统文件系统之间的差别
7. 使用 Oracle Solaris ZFS 快照和克隆
8. 使用 ACL 和属性保护 Oracle Solaris ZFS 文件
在此 Solaris 发行版中,您可以按以下方式创建 ZFS 文件系统共享并发布该共享:
通过使用 zfs share 命令,创建文件系统共享并定义 NFS 或 SMB 共享属性。
使用单独的命令创建共享将提供以下功能:
定义用来共享文件系统中的特定路径的选项。
可以按文件系统定义多个共享,但是使用共享名称来唯一标识每个共享。
一个共享可以同时定义针对 NFS 共享和 SMB 共享的选项。
可以为单个目录路径定义多个 SMB 路径。
共享存储在 .zfs/share 目录下的一个文件中,以共享名称作为文件名。
已定义的共享与 sharenfs 和 sharesmb 属性之间的交互如下所示:
现有的 sharenfs 属性控制是否通过 NFS 发布文件系统。值为 on 或 off。此属性可由后代文件系统继承。
现有的 sharesmb 属性控制是否通过 SMB 发布文件系统。值为 on 或 off。此属性可由后代文件系统继承。
当 sharenfs 或 sharesmb 属性设置为 on 时,将为相应的协议发布文件系统(和继承该属性的所有后代文件系统)的所有已定义共享。在发出 zfs share 命令时,也会发布所有的已定义的共享。
如果未定义共享,则不会共享文件系统。
如果为文件系统定义了共享,则仅发布这些共享。仅当存在一个显式共享文件系统的挂载点的共享时,才会共享该挂载点。
当 sharenfs 或 sharesmb 属性设置为 off 时,将为相应的协议取消发布文件系统(和继承该属性的所有后代文件系统)的所有已发布共享。在 sharenfs 或 sharesmb 属性设置为 on 之前,这些共享将保持独享状态。
当属性设置为 off 时,已定义的共享不会被删除,当下次 sharenfs 或 sharesmb 属性设置为 on 时会重新共享它们。
当发出 zfs unshare 命令时,文件系统的所有已发布共享将被取消发布。在对文件系统发出 zfs share 命令之前,这些共享将保持独享状态。
当发出 zfs unshare 命令时,已定义的共享不会被删除,下次发出 zfs share 命令时会重新共享它们。
本节详细介绍了新共享语法和传统共享语法之间的差异。
新共享的主要差异如下:
zfs set share 命令替换了用于共享 ZFS 文件系统的 sharemgr 接口。
sharemgr 接口不再可用。传统的 share 命令和 sharenfs 属性仍然可用。请参见下面的示例。
/etc/dfs/dfstab 文件仍存在,但修改被忽略。SMF 管理 ZFS 或 UFS 共享信息,以便在重新引导系统时自动共享文件系统,这与管理 ZFS 挂载和共享信息的方式类似。
share -a 命令类似于 share -ap 命令,因此文件系统共享是持久性的。
后代文件系统不继承共享属性。如果某个后代文件系统是在继承的 sharenfs 属性设置为 on 时创建的,则会为新的后代文件系统创建一个共享。
传统的共享语法仍受支持。
可以使用 share 命令共享文件系统。
例如,要共享某个 ZFS 文件系统:
# share -F nfs /tank/zfsfs # cat /etc/dfs/sharetab /tank/zfsfs - nfs rw
上面的语法与共享 UFS 文件系统的语法完全一致:
# share -F nfs /ufsfs # cat /etc/dfs/sharetab /ufsfs - nfs rw /tank/zfsfs - nfs rw
在设置 sharenfs 属性之前,无法使用 zfs shar 命令初始共享某个文件系统。
# zfs share rpool/data cannot share 'rpool/data': legacy share use share(1M) to share this filesystem, or set the 'share' property and set [sharenfs|sharesmb] property on # zfs set sharenfs=on rpool/data # cat /etc/dfs/sharetab /rpool/data - nfs rw
所有方法都会立即发布文件系统共享。
新的 zfs set share 命令用于通过 NFS 或 SMB 协议共享 ZFS 文件系统。除非在文件系统上也设置了 sharenfs 属性,否则不会发布共享。
使用 zfs set share 命令可创建 ZFS 文件系统的 NFS 或 SMB 共享,还可以设置 sharenfs 属性。
# zfs create rpool/fs1 # zfs set share=name=fs1,path=/rpool/fs1,prot=nfs rpool/fs1 name=fs1,path=/rpool/fs1,prot=nfs
在 sharenfs 或 sharesmb 属性设置为 on 之前,不会发布共享。例如:
# zfs set sharenfs=on rpool/fs1 # cat /etc/dfs/sharetab /rpool/fs1 fs1 nfs sec=sys,rw
可以按以下方式创建公共 NFS 共享:
# zfs set share=name=pp,path=/pub,prot=nfs,sec=sys,rw=*,public rpool/public name=pp,path=/pub,prot=nfs,public=true,sec=sys,rw=* # zfs set sharenfs=on rpool/public # cat /etc/dfs/sharetab /pub pp nfs public,sec=sys,rw
通过使用类似以下内容的语法,还可以创建新创建的 ZFS 文件系统的共享:
# zfs create -o mountpoint=/ds -o sharenfs=on rpool/ds
在创建 ZFS 文件系统的 NFS 共享时,必须提供以下共享组件:
标识您的共享的名称。最大共享名称为 80 个字符。
标识在要共享的文件系统或目录中必须存在的 NFS 共享的路径。
将协议标识为 NFS 或 SMB。
标识要共享的 ZFS 文件系统。
其他共享选项如下:
提供可以帮助识别共享的文本。说明中的空格或逗号必须括在引号 (" ") 中。
标识共享将以读/写还是只读形式提供给所有客户机。您也可以指定包含主机名、IP 地址或网络组的逗号分隔列表。
标识某个指定主机的超级用户或具有超级用户权限的主机的列表。缺省情况下,没有主机拥有根访问权限。
标识 NFS 服务器安全模式,例如 sys、dh、krb5,等等。有关支持的安全模式信息,请参见 nfssec(5)。
以下 NFS 属性必须在 prot=nfs 之后但在任何 sec= 属性之前指定。
anon=user-name| uid
nosub=true|false
nosuid=true|false
aclok=true|false
public=true|false
index=filename
log=TYPE_LOGTAG
cksum=TYPE_STRINGSET
以下可选的 SMB 属性必须在 prot=smb 属性之后指定:
ad-container=string
abe=[true|false]
csc=[disabled|manual|auto|vdo]
catia=[true|false]
guestok=[true|false]
ro=access-list
rw=access-list
none=access-list
有关 NFS 和 SMB 共享属性的详细说明,请参见 share_nfs(1M) 和 share_smb(1M)。
与以前的发行版一样,可通过使用 zfs get sharenfs 属性或使用 zfs get all 命令语法来显示 sharenfs 属性的值。
# zfs get sharenfs rpool/fs1 NAME PROPERTY VALUE SOURCE rpool/fs1 sharenfs on local
可通过使用 zfs get share 命令获取新共享信息。
# zfs get share rpool/fs1 NAME PROPERTY VALUE SOURCE rpool/fs1 share name=rpool_fs1,path=/rpool/fs1,prot=nfs local
zfs get all 命令语法不能获取新共享信息。
如果要创建新创建的 ZFS 文件系统的共享,请使用 zfs get share 命令标识 share-name 名称或 share-path 名称。例如:
# zfs create -o mountpoint=/data -o sharenfs=on rpool/data # zfs get share rpool/data NAME PROPERTY VALUE SOURCE rpool/data share name=data,path=/data,prot=nfs local
对于 zfs share 属性以及 sharenfs 或 sharesmb 属性的继承,其作用方式如下:
zfs share 属性不会从父文件系统继承到后代文件系统。此外,zfs set share 命令不支持使用 -r 选项在后代文件系统上设置 ZFS 属性。
如果在父文件系统上设置了 sharenfs 或 sharesmb 属性,则也会在后代文件系统上设置 sharenfs 或 sharesmb 属性。例如:
# zfs create -o mountpoint=/ds rpool/ds # zfs set share=name=ds,path=/ds,prot=nfs rpool/ds name=ds,path=/ds,prot=nfs # zfs set sharenfs=on rpool/ds # cat /etc/dfs/sharetab /ds rpool_ds nfs sec=sys,rw # zfs create rpool/ds/ds1 # zfs get sharenfs rpool/ds/ds1 NAME PROPERTY VALUE SOURCE rpool/ds/ds1 sharenfs on inherited from rpool/ds
任何现有的子文件系统还会继承父级的 sharenfs 或 sharesmb 属性值。
如果 sharenfs 或 sharesmb 属性在父文件系统上设置为 off,则 sharenfs 属性或 sharesmb 属性在后代文件系统上也将设置为 off。例如:
# zfs set sharenfs=off rpool/ds $ zfs get -r sharenfs rpool/ds NAME PROPERTY VALUE SOURCE rpool/ds sharenfs off local rpool/ds/ds1 sharenfs off inherited from rpool/ds rpool/ds/ds2 sharenfs off inherited from rpool/ds rpool/ds/ds3 sharenfs off inherited from rpool/ds
在更改共享属性值时,必须指定名称和协议属性。
例如,可按如下方式创建一个 NFS 共享:
# zfs create -o mountpoint=/ds -o sharenfs=on rpool/ds # zfs set share=name=ds,path=/ds,prot=nfs rpool/ds name=ds,path=/ds,prot=nfs
然后,添加 SMB 协议:
# zfs set share=name=ds,prot=nfs,prot=smb rpool/ds name=ds,path=/ds,prot=nfs,prot=smb
删除 SMB 协议:
# zfs set -c share=name=ds,prot=smb rpool/ds name=ds,path=/ds,prot=nfs
可以使用 zfs set -c 命令删除现有的共享。例如,标识共享名称。
# zfs get share NAME PROPERTY VALUE SOURCE rpool/ds share name=ds,path=/ds,prot=nfs local
然后,通过标识 share-name 名称删除共享。例如:
# zfs set -c share=name=ds rpool/ds share 'ds' was removed.
如果某个共享是在创建文件系统时通过创建缺省共享来建立的,则可以通过 share-name 名称或 share-path 名称删除该共享。例如,为此共享提供了缺省的 share-name 名称 data 和缺省的 share-path 名称 /data。
# zfs create -o mountpoint=/data -o sharenfs=on rpool/data # zfs get share rpool/data NAME PROPERTY VALUE SOURCE rpool/data share name=data,path=/data,prot=nfs local
通过标识 share-name 名称删除共享。例如:
# zfs set -c share=name=data rpool/data share 'data' was removed.
通过标识 share-path 名称删除共享。例如:
# zfs set -c share=path=/data rpool/data share 'data' was removed.
在以前的 Solaris 发行版中,无法在 Oracle Solaris 非全局区域中创建和发布 NFS 或 SMB 共享。在此 Solaris 发行版中,通过将 zfs set share 命令和传统的 share 命令用于非全局区域,可以创建和发布 NFS 共享。
如果挂载了某个 ZFS 文件系统且它在非全局区域中可用,则可以在该区域中共享它。
如果文件系统不是在非全局区域中挂载的或者未共享到非全局区域,则可以在全局区域中共享该文件系统。
如果 ZFS 文件系统的 mountpoint 属性设置为 legacy,则可以通过使用传统的 share 命令共享该文件系统。
例如,/export/home/data 和 /export/home/data1 文件系统在 zfszone 中可用。
zfszone# share -F nfs /export/home/data zfszone# cat /etc/dfs/sharetab /export/home/data export_home_data nfs sec=sys,rw
zfszone# zfs set share=name=data1,path=/export/home/data1,prot=nfs tank/zones/export/home/data1 zfszone# zfs set sharenfs=on tank/zones/export/home/data1 zfszone# cat /etc/dfs/sharetab /export/home/data1 data1 nfs sec=sys,rw
此表介绍了新的 ZFS 文件系统共享语法和传统的共享语法。
表 6-5 ZFS 共享和传统共享命令摘要
|
如果已共享了某个子目录或后代文件系统,则无法共享父文件系统。
# share -F nfs /rpool/fs2/dir1 # share -F nfs /rpool/fs2/dir2 # share -F nfs /rpool/fs2 share: NFS: descendant of path is shared: /rpool/fs2/dir1 in rpool_fs2_dir2
不支持对使用 zfs set share 命令创建的共享进行重命名。
可以使用 zfs set share 命令创建同时采用 NFS 协议和 SMB 协议的文件系统共享。例如:
# zfs set share=name=ds,path=/ds,prot=nfs,prot=smb rpool/ds name=ds,path=/ds,prot=nfs,prot=smb
如果要使用传统的 share 命令创建同时采用 NFS 协议和 SMB 协议的文件系统共享,则必须将该命令指定两次。例如:
# share -F nfs /rpool/ds # share -F smb /rpool/ds # zfs get share rpool/df name=rpool_ds,path=/rpool/ds,prot=nfs,prot=smb
包含逗号 (,) 的共享路径或说明必须用双引号括起来。
在本节中识别任何转换问题。
升级系统-如果因该发行版中的属性更改而导致引导回早期的 BE,则 ZFS 共享将是不正确的。非 ZFS 共享不受影响。如果您打算引导回较旧的 BE,则在 pkg update 操作之前应该首先保存现有共享配置的副本,以便能够在 ZFS 文件系统上恢复共享配置。
在较旧的 BE 中,使用 sharemgr show -vp 命令可列出所有共享及其配置。
使用 zfs get sharenfs filesystem 命令和 zfs sharesmb filesystem 命令可获取共享属性的值。
如果返回到较旧的 BE,请将 sharenfs 和 sharesmb 属性重置为其原始值。
传统的取消共享行为-使用 unshare -a 命令或 unshareall 命令可取消发布共享,但是不会更新 SMF 共享系统信息库。如果尝试重新共享现有的共享,则会检查到共享系统信息库中的冲突,并显示一个错误。