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

文档信息

前言

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

2.  Oracle Solaris ZFS 入门

3.  Oracle Solaris ZFS 与传统文件系统之间的差别

4.  管理 Oracle Solaris ZFS 存储池

5.  管理 ZFS 根池组件

6.  管理 Oracle Solaris ZFS 文件系统

管理 ZFS 文件系统(概述)

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

创建 ZFS 文件系统

销毁 ZFS 文件系统

重命名 ZFS 文件系统

ZFS 属性介绍

ZFS 只读本机属性

used 属性

可设置的 ZFS 本机属性

canmount 属性

casesensitivity 属性

copies 属性

dedup 属性

encryption 属性

recordsize 属性

sharesmb 属性

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 文件系统

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

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

9.  Oracle Solaris ZFS 委托管理

10.  Oracle Solaris ZFS 高级主题

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

12.  归档快照和根池恢复

13.  建议的 Oracle Solaris ZFS 做法

A.  Oracle Solaris ZFS 版本说明

索引

设置 ZFS 配额和预留空间

可以使用 quota 属性对文件系统可以使用的磁盘空间量设置限制。此外,还可以使用 reservation 属性来保证一定的磁盘空间量供文件系统使用。这两个属性将应用于设置了它们的文件系统以及该文件系统的所有后代。

也就是说,如果对 tank/home 文件系统设置了配额,则 tank/home 及其所有后代使用的总磁盘空间量不能超过该配额。同样,如果为 tank/home 指定了预留空间,则 tank/home 及其所有后代都会使用该预留空间。文件系统及其所有后代使用的磁盘空间量由 used 属性进行报告。

refquotarefreservation 属性用于管理文件系统空间,但不会将后代(如快照和克隆)占用的磁盘空间计算在内。

在此 Solaris 发行版中,您可以根据属于特定用户或组的文件所占用的磁盘空间量来设置 usergroup 配额。不能基于卷、早于文件系统版本 4 的文件系统或早于池版本 15 的池设置用户和组配额属性。

确定哪个配额和预留空间功能更有利于管理您的文件系统时,请考虑以下几点:

有关设置配额和预留空间的更多信息,请参见设置 ZFS 文件系统的配额设置 ZFS 文件系统的预留空间

设置 ZFS 文件系统的配额

使用 zfs setzfs get 命令可以设置和显示 ZFS 文件系统的配额。在以下示例中,在 tank/home/jeff 上设置了 10 GB 的配额:

# zfs set quota=10G tank/home/jeff
# zfs get quota tank/home/jeff
NAME            PROPERTY  VALUE  SOURCE
tank/home/jeff  quota     10G    local

配额还会影响 zfs listdf 命令的输出。例如:

# zfs list -r tank/home
NAME                USED  AVAIL  REFER  MOUNTPOINT
tank/home          1.45M  66.9G    36K  /tank/home
tank/home/eric      547K  66.9G   547K  /tank/home/eric
tank/home/jeff      322K  10.0G   291K  /tank/home/jeff
tank/home/jeff/ws    31K  10.0G    31K  /tank/home/jeff/ws
tank/home/lori      547K  66.9G   547K  /tank/home/lori
tank/home/mark       31K  66.9G    31K  /tank/home/mark
# df -h /tank/home/jeff
Filesystem            Size  Used Avail Use% Mounted on
tank/home/jeff         10G  306K   10G   1% /tank/home/jeff

请注意,虽然 tank/home 具有 66.9 GB 的可用磁盘空间,但由于 tank/home/jeff 存在配额,tank/home/jefftank/home/jeff/ws 各自仅有 10 GB 的可用磁盘空间。

不能将配额设置为比文件系统当前使用的空间小的数量。例如:

# zfs set quota=10K tank/home/jeff
cannot set property for 'tank/home/jeff': 
size is less than current used or reserved space

可对文件系统设置 refquota,以限制该文件系统可以使用的磁盘空间量。硬限制不包括后代所占用的磁盘空间。例如,快照占用的空间不会影响 studentA 的 10 GB 配额。

# zfs set refquota=10g students/studentA
# zfs list -t all -r students
NAME                          USED  AVAIL  REFER  MOUNTPOINT
students                      150M  66.8G    32K  /students
students/studentA             150M  9.85G   150M  /students/studentA
students/studentA@yesterday      0      -   150M  -
# zfs snapshot students/studentA@today
# zfs list -t all -r students
students                      150M  66.8G    32K  /students
students/studentA             150M  9.90G   100M  /students/studentA
students/studentA@yesterday  50.0M      -   150M  -
students/studentA@today          0      -   100M  -

为了更加方便,可对文件系统设置其他配额,以帮助管理快照使用的磁盘空间。例如:

# zfs set quota=20g students/studentA
# zfs list -t all -r students
NAME                          USED  AVAIL  REFER  MOUNTPOINT
students                      150M  66.8G    32K  /students
students/studentA             150M  9.90G   100M  /students/studentA
students/studentA@yesterday  50.0M      -   150M  -
students/studentA@today          0      -   100M  -

在此情况下,studentA 可能会达到 refquota (10 GB) 硬限制,但studentA可以删除文件进行恢复,即使存在快照也是如此。

在上例中,zfs list 输出显示两个配额中的较小者(10 GB 与 20 GB 相比较小)。要查看两个配额的值,请使用 zfs get 命令。例如:

# zfs get refquota,quota students/studentA
NAME               PROPERTY  VALUE              SOURCE
students/studentA  refquota  10G                local
students/studentA  quota     20G                local

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

可以使用 zfs userquotazfs groupquota 命令分别设置用户配额或组配额:例如:

# zfs create students/compsci
# zfs set userquota@student1=10G students/compsci
# zfs create students/labstaff
# zfs set groupquota@labstaff=20GB students/labstaff

按以下方式显示当前用户配额或组配额:

# zfs get userquota@student1 students/compsci
NAME              PROPERTY            VALUE               SOURCE
students/compsci  userquota@student1  10G                 local
# zfs get groupquota@labstaff students/labstaff
NAME               PROPERTY             VALUE                SOURCE
students/labstaff  groupquota@labstaff  20G                  local

可以通过查询以下属性来显示一般用户或组的磁盘空间使用情况:

# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      350M   none  
POSIX User  student1  426M    10G  
# zfs groupspace students/labstaff
TYPE         NAME      USED  QUOTA  
POSIX Group  labstaff  250M    20G  
POSIX Group  root      350M   none  

要确定个别用户或组的磁盘空间使用情况,可以查询以下属性:

# zfs get userused@student1 students/compsci
NAME              PROPERTY           VALUE              SOURCE
students/compsci  userused@student1  550M               local
# zfs get groupused@labstaff students/labstaff
NAME               PROPERTY            VALUE               SOURCE
students/labstaff  groupused@labstaff  250                 local

使用 zfs get all dataset 命令不会显示用户和组配额属性,它会显示所有其他文件系统属性的列表。

可以按以下方式删除用户配额或组配额:

# zfs set userquota@student1=none students/compsci
# zfs set groupquota@labstaff=none students/labstaff

ZFS 文件系统的用户和组配额提供以下功能:

用户和组配额的实施可能会延迟几秒钟。这种延迟意味着,在系统发现已超出配额并拒绝其他写入操作(同时显示 EDQUOT 错误消息)之前,用户可能已超出其配额。

您可以使用传统 quota 命令查看 NFS 环境(例如,挂载了 ZFS 文件系统)中的用户配额。不带任何选项的 quota 命令仅显示是否超出用户配额的输出信息。例如:

# zfs set userquota@student1=10m students/compsci   
# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      350M   none  
POSIX User  student1  550M    10M  
# quota student1
Block limit reached on /students/compsci

如果重置用户配额,而且不再超出配额限制,则可以使用 quota -v 命令查看用户的配额。例如:

# zfs set userquota@student1=10GB students/compsci 
# zfs userspace students/compsci
TYPE        NAME      USED  QUOTA  
POSIX User  root      350M   none  
POSIX User  student1  550M    10G 
# quota student1
# quota -v student1
Disk quotas for student1 (uid 102):
Filesystem     usage  quota  limit    timeleft  files  quota  limit    timeleft
/students/compsci
              563287 10485760 10485760           -      -      -      -           -

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

ZFS 预留空间是从池中分配的保证可供数据集使用的磁盘空间。因此,如果磁盘空间当前在池中不可用,则不能为数据集预留该空间。所有未占用的预留空间的总量不能超出池中未使用的磁盘空间量。通过使用 zfs setzfs get 命令可以设置和显示 ZFS 预留空间。例如:

# zfs set reservation=5G tank/home/bill
# zfs get reservation tank/home/bill
NAME            PROPERTY     VALUE   SOURCE
tank/home/bill  reservation  5G      local

预留空间可能会影响 zfs list 命令的输出。例如:

# zfs list -r tank/home
NAME                USED  AVAIL  REFER  MOUNTPOINT
tank/home          5.00G  61.9G    37K  /tank/home
tank/home/bill       31K  66.9G    31K  /tank/home/bill
tank/home/jeff      337K  10.0G   306K  /tank/home/jeff
tank/home/lori      547K  61.9G   547K  /tank/home/lori
tank/home/mark       31K  61.9G    31K  /tank/home/mark

请注意,tank/home 使用的磁盘空间为 5 GB,但 tank/home 及其后代引脚的总空间量远远小于 5 GB。已用空间反映了为 tank/home/bill 预留的空间。预留空间计入父文件系统的已用磁盘空间内,并将计入父文件系统的配额或预留空间,或同时计入这两者中。

# zfs set quota=5G pool/filesystem
# zfs set reservation=10G pool/filesystem/user1
cannot set reservation for 'pool/filesystem/user1': size is greater than 
available space

只要池中有未预留的空间可用,并且数据集的当前使用率低于其配额,数据集便能使用比其预留空间更多的磁盘空间。数据集不能占用为其他数据集预留的磁盘空间。

预留空间无法累积。也就是说,第二次调用 zfs set 来设置预留空间时,不会将该数据集的预留空间添加到现有预留空间中,而是使用第二个预留空间替换第一个预留空间。例如:

# zfs set reservation=10G tank/home/bill
# zfs set reservation=5G tank/home/bill
# zfs get reservation tank/home/bill
NAME            PROPERTY     VALUE   SOURCE
tank/home/bill  reservation  5G      local

可通过设置 refreservation 预留空间来保证用于数据集的磁盘空间,该空间不包括快照和克隆使用的磁盘空间。此预留空间计算在父数据集的使用空间内,并会针对父数据集的配额和预留空间进行计数。例如:

# zfs set refreservation=10g profs/prof1
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                    10.0G  23.2G    19K  /profs
profs/prof1                10G  33.2G    18K  /profs/prof1

还可以对同一数据集设置预留空间,以保证数据集空间和快照空间。例如:

# zfs set reservation=20g profs/prof1
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
profs                    20.0G  13.2G    19K  /profs
profs/prof1                10G  33.2G    18K  /profs/prof1

常规的预留空间计算在父级的使用空间内。

在上例中,zfs list 输出显示两个配额中的较小者(10 GB 与 20 GB 相比较小)。要查看两个配额的值,请使用 zfs get 命令。例如:

# zfs get reservation,refreserv profs/prof1
NAME         PROPERTY        VALUE        SOURCE
profs/prof1  reservation     20G          local
profs/prof1  refreservation  10G          local

如果设置了 refreservation,则仅当在此预留空间之外有足够的未预留池空间来容纳数据集中的当前引用字节数时,才允许使用快照。