JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 管理:ZFS 文件系统     Oracle Solaris 11.1 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  Oracle Solaris ZFS 文件系统(介绍)

2.  Oracle Solaris ZFS 入门

3.  管理 Oracle Solaris ZFS 存储池

4.  管理 ZFS 根池组件

5.  管理 Oracle Solaris ZFS 文件系统

管理 ZFS 文件系统(概述)

创建、销毁和重命名 ZFS 文件系统

创建 ZFS 文件系统

销毁 ZFS 文件系统

重命名 ZFS 文件系统

ZFS 属性介绍

ZFS 只读本机属性

used 属性

可设置的 ZFS 本机属性

canmount 属性

casesensitivity 属性

copies 属性

dedup 属性

encryption 属性

recordsize 属性

share.smb 属性

volsize 属性

ZFS 用户属性

查询 ZFS 文件系统信息

列出基本 ZFS 信息

创建复杂的 ZFS 查询

管理 ZFS 属性

设置 ZFS 属性

继承 ZFS 属性

查询 ZFS 属性

查询用于编写脚本的 ZFS 属性

挂载 ZFS 文件系统

管理 ZFS 挂载点

自动挂载点

传统挂载点

挂载 ZFS 文件系统

使用临时挂载属性

取消挂载 ZFS 文件系统

共享和取消共享 ZFS 文件系统

传统的 ZFS 共享语法

新的 ZFS 共享语法

包含每属性继承的 ZFS 共享

旧池中的 ZFS 共享继承

ZFS 命名共享

ZFS 自动共享

显示 ZFS 共享信息

更改 ZFS 共享属性值

发布和取消发布 ZFS 共享

删除 ZFS 共享

非全局区域中的 ZFS 文件共享

ZFS 共享迁移/转换问题

对 ZFS 文件系统共享问题进行故障排除

设置 ZFS 配额和预留空间

设置 ZFS 文件系统的配额

在 ZFS 文件系统中设置用户和组配额

设置 ZFS 文件系统的预留空间

加密 ZFS 文件系统

更改加密 ZFS 文件系统的密钥

管理 ZFS 加密密钥

委托 ZFS 密钥操作权限

挂载加密的 ZFS 文件系统

升级加密的 ZFS 文件系统

ZFS 压缩、重复数据删除和加密属性之间的交互

加密 ZFS 文件系统的示例

迁移 ZFS 文件系统

如何将文件系统迁移到 ZFS 文件系统

ZFS 文件系统迁移故障排除

升级 ZFS 文件系统

6.  使用 Oracle Solaris ZFS 快照和克隆

7.  使用 ACL 和属性保护 Oracle Solaris ZFS 文件

8.  Oracle Solaris ZFS 委托管理

9.  Oracle Solaris ZFS 高级主题

10.  Oracle Solaris ZFS 故障排除和池恢复

11.  归档快照和根池恢复

12.  建议的 Oracle Solaris ZFS 做法

A.  Oracle Solaris ZFS 版本说明

索引

共享和取消共享 ZFS 文件系统

Oracle Solaris 11.1 发行版通过利用 ZFS 属性继承来简化 ZFS 共享管理。在运行池版本 34 的池中启用了新的共享语法。

每个文件系统可定义多个共享。一个共享名可唯一标识一个共享。您可以定义用来共享文件系统中的特定路径的属性。缺省情况下,所有文件系统都不共享。通常,在创建共享之前,NFS 服务器服务不会启动。如果创建了有效的共享,NFS 服务将自动启动。如果 ZFS 文件系统的 mountpoint 属性设置为 legacy,则只能通过使用传统的 share 命令共享该文件系统。

例如,如果要共享 tank/home 文件系统,请使用如下语法:

# zfs set share.nfs=on tank/home

您还可以在现有文件系统共享上指定其他属性值,也可以修改现有属性值。例如:

# zfs set share.nfs.nosuid=on tank/home/userA

在上一示例中,对 tank/home 文件系统设置了 share.nfs 属性,share.nfs 属性值将继承到任何后代文件系统。例如:

# zfs create tank/home/userA
# zfs create tank/home/userB

传统的 ZFS 共享语法

Oracle Solaris 11 语法仍受支持,因此,您可以分两步共享文件系统。此语法在所有池版本中均受支持。

可以使用传统的 zfs get share 命令显示文件系统共享。

# zfs get share rpool/fs1
NAME       PROPERTY  VALUE  SOURCE
rpool/fs1  share     name=fs1,path=/rpool/fs1,prot=nfs  local

此外,用于共享文件系统的 share 命令仍受支持,以共享文件系统中的任何目录,其语法与 Oracle Solaris 10 发行版中的语法类似。例如,要共享某个 ZFS 文件系统:

# share -F nfs /tank/zfsfs
# grep zfsfs /etc/dfs/sharetab
/tank/zfsfs    tank_zfsfs     nfs     sec=sys,rw

上面的语法与共享 UFS 文件系统的语法完全一致:

# share -F nfs /ufsfs
# grep ufsfs /etc/dfs/sharetab
/ufsfs          -               nfs     rw      
/tank/zfsfs     tank_zfsfs      nfs     rw      

新的 ZFS 共享语法

zfs set 命令用于通过 NFS 或 SMB 协议共享和发布 ZFS 文件系统。或者,您可以在创建文件系统时设置 share.nfsshare.smb 属性。

例如,创建和共享 tank/sales 文件系统。对于每个用户,缺省共享权限均为读写权限。后代 tank/sales/logs 文件也将自动共享,因为 share.nfs 属性会继承到后代文件系统且 tank/sales/log 文件系统会设置为只读访问权限。

# zfs create -o share.nfs=on tank/sales
# zfs create -o share.nfs.ro=\* tank/sales/logs
# zfs get -r share.nfs tank/sales
NAME             PROPERTY   VALUE  SOURCE
tank/sales       share.nfs  on     local
tank/sales%      share.nfs  on     inherited from tank/sales
tank/sales/log   share.nfs  on     inherited from tank/sales
tank/sales/log%  share.nfs  on     inherited from tank/sales

您可以按照以下方式为共享文件系统提供特定系统的 root 访问权限:

# zfs set share.nfs=on tank/home/data
# zfs set share.nfs.sec.default.root=neo tank/home/data

包含每属性继承的 ZFS 共享

在已升级到最新池版本 34 的池中,提供了新的共享语法,可利用 ZFS 属性继承,从而更轻松地进行共享维护。每个共享特征将成为单独的 share 属性。share 属性由以 share. 前缀开头的名称标识。share 属性示例包括 share.descshare.nfs.nosuidshare.smb.guestok

share.nfs 属性控制是否启用 NFS 共享。share.smb 属性控制是否启用 SMB 共享。传统的 sharenfssharesmb 属性名称仍可用,因为在新池中,sharenfsshare.nfs 的别名,sharesmbshare.smb 的别名。如果要共享 tank/home 文件系统,请使用类似如下的语法:

# zfs set share.nfs=on tank/home

在此示例中,share.nfs 属性值会继承到任何后代文件系统。例如:

# zfs create tank/home/userA 
# zfs create tank/home/userB
# grep tank/home /etc/dfs/sharetab
/tank/home      tank_home       nfs     sec=sys,rw      
/tank/home/userA        tank_home_userA nfs     sec=sys,rw      
/tank/home/userB        tank_home_userB nfs     sec=sys,rw   
旧池中的 ZFS 共享继承

在旧池中,只有 sharenfssharesmb 属性由后代文件系统继承。其他共享特征均存储在每个共享的 .zfs/shares 文件中,不会被继承。

一个特殊规则就是创建一个新的文件系统,以从其父项继承 sharenfssharesmb,从 sharenfssharesmb 值中为此文件系统创建缺省共享。请注意,如果直接将 sharenfs 设置为 on,则在后代文件系统中创建的缺省共享只具有缺省 NFS 特征。例如:

# zpool get version tank
NAME  PROPERTY  VALUE  SOURCE
tank  version   33     default
# zfs create -o sharenfs=on tank/home
# zfs create tank/home/userA
# grep tank/home /etc/dfs/sharetab
/tank/home      tank_home       nfs     sec=sys,rw      
/tank/home/userA        tank_home_userA nfs     sec=sys,r

ZFS 命名共享

您可以创建命名共享,它可以在 SMB 环境中设置权限和属性时提供更多的灵活性。例如:

# zfs share -o share.smb=on tank/workspace%myshare

在上一示例中,zfs share 命令为 tank/workspace 文件系统创建了名为 myshare 的 SMB 共享。您可以通过此文件系统的 .zfs/shares 目录访问 SMB 共享以及显示或设置特定权限或 ACL。每个 SMB 共享均由单独的 .zfs/shares 文件表示。例如:

# ls -lv /tank/workspace/.zfs/shares
-rwxrwxrwx+  1 root     root           0 May 15 10:31 myshare
     0:everyone@:read_data/write_data/append_data/read_xattr/write_xattr
         /execute/delete_child/read_attributes/write_attributes/delete
         /read_acl/write_acl/write_owner/synchronize:allow

命名共享从父文件系统继承共享属性。如果在上一示例中将 share.smb.guestok 属性添加到父文件系统,此属性将继承到命名共享。例如:

# zfs get -r share.smb.guestok tank/workspace
NAME                    PROPERTY           VALUE  SOURCE
tank/workspace          share.smb.guestok  on     inherited from tank
tank/workspace%myshare  share.smb.guestok  on     inherited from tank

在为文件系统的子目录定义共享时,命名服务在 NFS 环境中可能会很有帮助。例如:

# zfs create -o share.nfs=on -o share.nfs.anon=99 -o share.auto=off tank/home
# mkdir /tank/home/userA
# mkdir /tank/home/userB
# zfs share -o share.path=/tank/home/userA tank/home%userA
# zfs share -o share.path=/tank/home/userB tank/home%userB
# grep tank/home /etc/dfs/sharetab
/tank/home/userA        userA   nfs     anon=99,sec=sys,rw      
/tank/home/userB        userB   nfs     anon=99,sec=sys,rw  

上一示例还说明了,在保持所有其他属性继承不变的情况下,将文件系统的 share.auto 设置为 off 将禁用该文件系统的自动共享。与大多数其他共享属性不同,share.auto 属性不可继承。

创建公共 NFS 共享时还可以使用命名共享。只能在命名 NFS 共享上创建公共共享。例如:

# zfs create -o mountpoint=/pub tank/public
# zfs share -o share.nfs=on -o share.nfs.public=on tank/public%pubshare
# grep pub /etc/dfs/sharetab
/pub    pubshare        nfs     public,sec=sys,rw

有关 NFS 和 SMB 共享属性的详细说明,请参见 share_nfs(1M)share_smb(1M)

ZFS 自动共享

创建自动共享时,会从文件系统名称中构建唯一资源名称。构建的名称是文件系统名称的副本,但是,对于文件系统名称中的字符,如果在资源名称中不合法,将被替换为下划线字符 (_)。例如,data/home/john 的资源名称是 data_home_john

通过设置 share.autoname 属性名称,可以在创建自动共享时将文件系统名称替换为特定名称。在继承时还会使用该特定名称替换前缀文件系统名称。例如:

# zfs create -o share.smb=on -o share.autoname=john data/home/john
# zfs create data/home/john/backups
# grep john /etc/dfs/sharetab
/data/home/john john    smb     
/data/home/john/backups john_backups    smb

如果在尚未处于共享状态的文件系统上使用传统的 share 命令或 zfs set share 命令,其 share.auto 值将自动设置为 off。传统的命令始终会创建命名共享。此特殊规则可防止自动共享干扰要创建的命名共享。

显示 ZFS 共享信息

通过使用 zfs get 命令显示文件共享属性的值。以下示例显示了如何显示一个文件系统的 share.nfs 属性:

# zfs get share.nfs tank/sales
NAME        PROPERTY   VALUE  SOURCE
tank/sales  share.nfs  on     local

以下示例显示了如何显示后代文件系统的 share.nfs 属性:

# zfs get -r share.nfs tank/sales
NAME             PROPERTY   VALUE  SOURCE
tank/sales       share.nfs  on     local
tank/sales%      share.nfs  on     inherited from tank/sales
tank/sales/log   share.nfs  on     inherited from tank/sales
tank/sales/log%  share.nfs  on     inherited from tank/sales

zfs get all 命令语法不能获取扩展共享属性信息。

可以通过使用以下语法显示有关 NFS 或 SMB 共享信息的特定详细信息:

# zfs get share.nfs.all tank/sales
NAME        PROPERTY             VALUE  SOURCE
tank/sales  share.nfs.aclok      off    default
tank/sales  share.nfs.anon              default
tank/sales  share.nfs.charset.*  ...    default
tank/sales  share.nfs.cksum             default
tank/sales  share.nfs.index             default
tank/sales  share.nfs.log               default
tank/sales  share.nfs.noaclfab   off    default
tank/sales  share.nfs.nosub      off    default
tank/sales  share.nfs.nosuid     off    default
tank/sales  share.nfs.public     -      -
tank/sales  share.nfs.sec               default
tank/sales  share.nfs.sec.*      ...    default

因为存在多个共享属性,请考虑使用非缺省值显示属性。例如:

# zfs get -e -s local,received,inherited share.all tank/home
NAME       PROPERTY           VALUE  SOURCE
tank/home  share.auto         off    local
tank/home  share.nfs          on     local
tank/home  share.nfs.anon     99     local
tank/home  share.protocols    nfs    local
tank/home  share.smb.guestok  on     inherited from tank

更改 ZFS 共享属性值

可以通过在文件系统共享上指定新属性或修改的属性来更改共享属性值。例如,如果在创建文件系统时设置只读属性,则可将此属性设置为 off。

# zfs create -o share.nfs.ro=\* tank/data
# zfs get share.nfs.ro tank/data
NAME       PROPERTY              VALUE  SOURCE
tank/data  share.nfs.sec.sys.ro  on     local
# zfs set share.nfs.ro=none tank/data
# zfs get share.nfs.ro tank/data
NAME       PROPERTY              VALUE  SOURCE
tank/data  share.nfs.sec.sys.ro  off    local

如果创建 SMB 共享,还可以添加 NFS 共享协议。例如:

# zfs set share.smb=on tank/multifs
# zfs set share.nfs=on tank/multifs
# grep multifs /etc/dfs/sharetab
/tank/multifs   tank_multifs    nfs     sec=sys,rw      
/tank/multifs   tank_multifs    smb     -       

删除 SMB 协议:

# zfs set share.smb=off tank/multifs
# grep multifs /etc/dfs/sharetab
/tank/multifs   tank_multifs    nfs     sec=sys,rw

您可以重命名已命名的共享。例如:

# zfs share -o share.smb=on tank/home/abc%abcshare
# grep abc /etc/dfs/sharetab
/tank/home/abc  abcshare        smb     -   
# zfs rename tank/home/abc%abcshare tank/home/abc%a1share
# grep abc /etc/dfs/sharetab
/tank/home/abc  a1share        smb     -   

发布和取消发布 ZFS 共享

您可以通过使用 zfs unshare 命令临时取消共享命名共享而不将其销毁。例如:

# zfs unshare tank/home/abc%a1share
# grep abc /etc/dfs/sharetab
#
# zfs share tank/home/abc%a1share
# grep abc /etc/dfs/sharetab
/tank/home/abc  a1share smb     -

发出 zfs unshare 命令时,会取消共享所有文件系统共享。在对文件系统发出 zfs share 命令之前或为文件系统设置 share.nfsshare.smb 属性之前,这些共享将保持独享状态。

在发出 zfs unshare 命令时不会删除已定义的共享,在下次对文件系统发出 zfs share 命令时或为文件系统设置 share.nfsshare.smb 属性时,它们会重新处于共享状态。

删除 ZFS 共享

您可以通过将 share.nfsshare.smb 属性设置为 off 来取消文件系统共享。例如:

# zfs set share.nfs=off tank/multifs
# grep multifs /etc/dfs/sharetab
# 

您可以使用 zfs destroy 命令永久删除命名共享。例如:

# zfs destroy tank/home/abc%a1share

非全局区域中的 ZFS 文件共享

从 Oracle Solaris 11 开始,您可以在 Oracle Solaris 非全局区域创建和发布 NFS 共享。

例如,/export/home/data/export/home/data1 文件系统在 zfszone 中可用。

zfszone# share -F nfs /export/home/data
zfszone#  cat /etc/dfs/sharetab
zfszone# zfs set share.nfs=on tank/zones/export/home/data1
zfszone# cat /etc/dfs/sharetab

ZFS 共享迁移/转换问题

在本节中识别任何转换问题。

对 ZFS 文件系统共享问题进行故障排除

查看以下共享行为方案和注意事项:

下表列出了已知共享状态以及解决它们的方式(如果需要)。

共享状态
说明
解决方案
INVALID
共享无效,因为它内部不一致或者与其他共享冲突。
尝试使用以下命令重新共享无效共享:
# zfs share FS%share

使用以下命令会显示有关共享的哪个部分未通过验证的错误消息。先更正此错误,然后重试此共享。

SHARED
共享处于共享状态。
无需执行任何操作。
UNSHARED
共享有效但已取消共享。
使用 zfs share 命令重新共享单个共享或父文件系统。
UNVALIDATED
共享尚无效。包含此共享的文件系统可能未处于可共享状态。例如,它未挂载或已委托给当前区域之外的某个区域。或者,表示所需共享的 ZFS 属性已创建,但尚未证实为合法共享。
使用 zfs share 命令重新共享单个共享或父文件系统。如果文件系统本身可共享,则尝试重新共享要么成功共享(并将状态转换为 "SHARED"(已共享)),要么不能共享(并将状态转换为 "INVALID"(无效))。或者,您可以使用 share -A 命令列出所有已挂载文件系统的所有共享。这将导致将已挂载文件系统中的所有共享解析为 "UNSHARED"(独享)(有效但尚未共享)或 "INVALID"(无效)。