在 Oracle® Solaris 11.2 中管理 ZFS 文件系统

退出打印视图

更新时间: 2014 年 12 月
 
 

设置 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 的可用磁盘空间。

可对文件系统设置 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 文件系统的用户和组配额提供以下功能:

  • 在父文件系统上设置的用户配额或组配额不会被后代文件系统自动继承。

  • 但是,基于具有用户或组配额的文件系统创建克隆或快照时,将应用用户或组配额。同样,使用 zfs send 命令(即使不带 –R 选项)创建流时,文件系统将具有用户或组配额。

  • 非特权用户只能访问自己的磁盘空间使用情况。root 用户或被授予 userusedgroupused 特权的用户可以访问所有人的用户或组磁盘空间记帐信息。

  • 不能基于 ZFS 卷、早于文件系统版本 4 的文件系统或早于池版本 15 的池设置 userquotagroupquota 属性。

用户和组配额的实施可能会延迟几秒钟。这种延迟意味着,在系统发现已超出配额并拒绝其他写入操作(同时显示 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           -      -      -      -           -