Setting Quotas on ZFS File Systems
Quotas on ZFS file systems can be set and displayed by using the zfs
set and zfs get commands. In the following example,
a quota of 10GB is set on tank/home/sueb:
$ zfs set quota=10G tank/home/sueb $ zfs get quota tank/home/sueb NAME PROPERTY VALUE SOURCE tank/home/sueb quota 10G local
Quotas also affect the output of the zfs list and df commands. For example:
$ zfs list -r tank/home NAME USED AVAIL REFER MOUNTPOINT tank/home 1.45M 66.9G 36K /tank/home tank/home/glori 547K 66.9G 547K /tank/home/glori tank/home/sueb 322K 10.0G 291K /tank/home/sueb tank/home/sueb/ws 31K 10.0G 31K /tank/home/sueb/ws tank/home/mork 31K 66.9G 31K /tank/home/mork $ df -h /tank/home/sueb Filesystem Size Used Avail Use% Mounted on tank/home/sueb 10G 306K 10G 1% /tank/home/sueb
Note that although tank/home has 66.9GB of disk space
available, tank/home/sueb and
tank/home/sueb/ws each have only 10GB of disk space
available, due to the quota on tank/home/sueb.
You can set a refquota on a file system that limits the amount of disk space that the file system can consume. This limit does not include disk space that is consumed by descendents. For example, studentA's 10GB quota is not impacted by space that is consumed by snapshots.
$ 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 -
For additional convenience, you can set another quota on a file system to help manage the disk space that is consumed by snapshots. For example:
$ 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 -
In this scenario, studentA might reach the refquota (10GB) hard limit, but studentA can remove files to recover, even if snapshots exist.
In the preceding example, the smaller of the two quotas (10GB as compared to 20GB) is displayed in the zfs list output. To view the value of both quotas, use the zfs get command. For example:
$ zfs get refquota,quota students/studentA
NAME PROPERTY VALUE SOURCE
students/studentA refquota 10G local
students/studentA quota 20G localEnforcement of a file system quota might be delayed by several seconds. This delay means that a user might exceed the file system quota before the system notices that the file system is over quota and refuses additional writes with the EDQUOT error message.