使用 zfs set 和 zfs 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 list 和 df 命令的输出。例如:
# 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/jeff 和 tank/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 userquota 或 zfs 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 用户或被授予 userused 或 groupused 特权的用户可以访问所有人的用户或组磁盘空间记帐信息。
不能基于 ZFS 卷、早于文件系统版本 4 的文件系统或早于池版本 15 的池设置 userquota 和 groupquota 属性。
用户和组配额的实施可能会延迟几秒钟。这种延迟意味着,在系统发现已超出配额并拒绝其他写入操作(同时显示 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 - - - - -