19.5 UFS 磁盘配额
磁盘配额可用于限制用户或用户组在每个 UFS 文件系统中可分配的磁盘空间或文件数量,从而防止某个用户或用户组消耗所有可用的磁盘空间。
19.5.1 验证内核支持
FreeBSD 默认内核提供了对磁盘配额的支持,可运行以下命令验证:
$ sysctl kern.features.ufs_quota
kern.features.ufs_quota: 1如果输出为 0,表示当前可能正在使用自定义内核,且该内核不支持磁盘配额模块。应在内核配置文件中加入内核选项 options QUOTA,随后重新编译内核。
19.5.2 启用磁盘配额
设置开机启用磁盘配额:
# service quota enable立即启用磁盘配额:
# service quota start系统在启动时会通过 quotacheck(8) 检查每个文件系统的配额完整性。此程序确保配额数据库中的数据正确反映文件系统中的数据。此过程耗时较长,会显著影响系统的启动时间。要跳过此步骤,可在 /etc/rc.conf 中添加以下变量:
check_quotas="NO"必须在 /etc/fstab 中加入配额选项,以启用每个用户或每个用户组的磁盘配额。如果要启用每个用户的配额,可在文件系统的 /etc/fstab 配置行的选项字段中添加 userquota。例如:
/dev/nda0p2 / ufs rw,userquota 1 1如果要启用组配额,可使用 groupquota 替代。如果同时启用用户和组配额,可用逗号分隔选项:
/dev/nda0p2 / ufs rw,userquota,groupquota 1 1配置完成后,重新启动系统,/etc/rc 将自动运行相应的命令,为 /etc/fstab 中启用的所有配额创建初始配额文件。
默认情况下,配额文件存储在文件系统的根目录中,名为 quota.user 和 quota.group。
-rw-r----- 1 root operator - 64192 May 1 02:34 quota.group
-rw-r----- 1 root operator - 64192 May 1 02:34 quota.user19.5.3 设置配额限制
要验证配额是否已启用,可运行以下命令:
$ quota -v
Disk quotas for user ykla (uid 1001):
Filesystem usage quota limit grace files quota limit grace
/ 32 0 0 9 0 0至此,系统已可使用 edquota 设置配额限制。
配额限制可基于磁盘空间(块配额)、文件数量(inode 配额)或两者的组合设定。每种限制进一步细分为两个类别:硬限制和软限制。
硬限制不得超出。用户达到硬限制时,便无法再向该文件系统分配任何空间。例如,用户的文件系统硬限制为 500 KB,并且当前使用了 490 KB,则该用户只能分配额外的 10 KB。尝试分配额外的 11 KB 将失败。
软限制可在一定时间内超出,该时间段称为宽限期,默认为一周。如果用户超出软限制且宽限期已过,软限制将转变为硬限制,不再允许进一步分配空间。用户降至软限制以下时,宽限期将重置。
在以下示例中,编辑 ykla 账户的配额。调用 edquota 时,将打开由环境变量 EDITOR 指定的编辑器编辑配额限制,默认编辑器为 vi(1)。
# edquota -u ykla
Quotas for user ykla:
/: in use: 32k, limits (soft = 0k, hard = 0k) # 块配额限制
inodes in use: 9, limits (soft = 0, hard = 0) # inode 配额限制可更改块配额和 inode 配额以配置配额限制。例如,将 / 的块限制提高到软限制 100 和硬限制 120,将该行的值更改为:
/: in use: 32k, limits (soft = 100k, hard = 120k)退出编辑器后,新配额限制将生效。用户只能检查自己的配额和自己所属组的配额。只有超级用户才能查看所有用户和组的配额。
# quota -v ykla
Disk quotas for user ykla (uid 1001):
Filesystem usage quota limit grace files quota limit grace
/ 32 100 120 9 0 0通常,如果用户在某文件系统中未使用任何磁盘空间,即使对该文件系统设置了配额,该文件系统也不会出现在 quota(1) 的输出中。
某些场景下需要为一批用户设置相同的配额限制。可先为某个用户分配所需的配额限制,再使用 -p 选项将该配额复制给指定 UID 范围的用户。以下命令将配额限制复制给 UID 为 10000 至 19999 的用户:
# edquota -p ykla 10000-19999