磁盘配额¶
本文你会学到:
- 为什么多用户系统必须限制磁盘用量
- 软限制、硬限制、宽限时间三者的关系
- XFS 文件系统的用户/组/项目配额完整操作流程
- ext4 传统 quota 工具的对应用法
- quota 的暂停、恢复与移除管理
为什么需要磁盘配额¶
想象一台共享给 30 人使用的服务器,/home 分区共 10 GB,每人平均应该能用 333 MB。结果某个用户把自己的视频文件全塞进来,占了 8 GB,其他 29 个人挤在剩下的 2 GB 里——这就是没有配额管控的后果。
Quota(磁盘配额) 就是管理员限制每个用户(或组、目录)能使用多少磁盘空间(block 用量)和创建多少文件(inode 用量)的机制,让存储资源分配保持公平。
常见应用场景:
- Web 服务器限制每个用户的网页空间
- 邮件服务器限制每人的邮箱大小
- 共享文件服务器限制各部门目录容量
软限制、硬限制与宽限时间¶
quota 的限制值分为两档:
硬限制(hard limit):用量的绝对上限,到达后系统直接拒绝写入,不管任何情况都不允许超过。
软限制(soft limit):警告线,通常设得比 hard 低。用量介于 soft 和 hard 之间时,系统不会立刻拒绝,而是给出警告并启动一个倒计时——这就是**宽限时间(grace time)**,默认 7 天。
graph LR
A["用量 < soft\n✅ 正常使用"] --> B["soft ≤ 用量 < hard\n⚠️ 警告 + 开始倒计时"]
B --> C["倒计时结束仍未清理\n🔒 soft 值生效为新上限"]
B --> D["用量降回 soft 以下\n⏹ 倒计时重置"]
B --> E["用量 = hard\n❌ 立即拒绝写入"]
classDef ok fill:transparent,stroke:#388e3c,color:#adbac7,stroke-width:2px
classDef warn fill:transparent,stroke:#f57c00,color:#adbac7,stroke-width:2px
classDef err fill:transparent,stroke:#d32f2f,color:#adbac7,stroke-width:2px
class A ok
class B,D warn
class C,E err
宽限时间内用户降回 soft 限制以下,倒计时清零;若宽限时间到期仍未清理,soft 值会"升格"为实际上限,用量无法再增加。
配额的三个维度¶
| 维度 | 说明 | 支持文件系统 |
|---|---|---|
| 用户配额(user quota) | 限制每个用户的总用量 | ext4、XFS |
| 组配额(group quota) | 限制整个组的总用量 | ext4、XFS |
| 项目配额(project quota) | 限制某个**目录**的总用量,不论文件属于谁 | 仅 XFS |
注意
grpquota(组配额)与 prjquota(项目配额)不能同时启用。根据需求二选一。
quota 的限制范围
quota 只对**普通用户**有效,root 不受 quota 限制。另外,quota 是基于整个文件系统(挂载点)的,EXT 家族无法跨挂载点合并统计;XFS 的 project 模式才能针对单一目录限额。
XFS 磁盘配额(推荐方案)¶
CentOS 7+、RHEL 7+、Rocky Linux 等现代发行版默认使用 XFS 文件系统。XFS 将 quota 原生集成到文件系统中,无需额外的配额记录文件,性能比 EXT 家族的外挂方案更好,且统计速度远快于 du。
启用配额挂载参数¶
XFS 的 quota 必须在**挂载时**声明,mount -o remount 无法后期追加,必须写入 /etc/fstab。
| 编辑 /etc/fstab,以 /home 分区为例 | |
|---|---|
挂载选项说明:
uquota/usrquota/quota:启用用户配额gquota/grpquota:启用组配额pquota/prjquota:启用项目配额(不能与 grpquota 共存)
修改完成后重新挂载生效:
查看配额状态¶
xfs_quota 是 XFS 配额管理的唯一工具,所有操作都通过它完成。
report 输出各列含义:
| 列名 | 说明 |
|---|---|
| Used | 当前已使用量 |
| Soft | 软限制值(0 表示不限制) |
| Hard | 硬限制值(0 表示不限制) |
| Warn/Grace | 已触发警告次数 / 宽限时间倒计时 |
设置用户配额¶
设置组配额¶
修改宽限时间¶
项目配额(按目录限额)¶
当多个不同用户共同向同一目录写文件时(例如 Web 服务的 httpd 用户统一管理的目录),用用户配额无法针对目录整体限额,这时需要 project quota。
项目配额通过"项目 ID + 目录路径"的映射来实现,由两个配置文件维护:
/etc/projects:项目 ID → 目录路径的映射/etc/projid:项目 ID → 项目名称的映射
完整设置流程如下:
第一步:修改挂载参数为 prjquota(并重新挂载)
第二步:注册项目 ID 和目录
第三步:初始化项目
第四步:设置限额并验证
项目配额不受文件属主影响
即使是 root 向该目录写文件,也会被项目配额限制住。这是与用户/组配额最大的区别,非常适合 WWW、FTP 等服务场景。
配额的暂停与恢复¶
日常维护中,有时需要临时解除限制(如批量导入数据),完成后再恢复,这时用 disable/enable,而不是卸载重挂:
off 与 remove 的区别
disable:暂停强制执行,用enable可恢复,推荐日常使用off:完全关闭,无法用enable恢复,必须卸载重挂载才能重启配额remove:在off状态下才能使用,会**移除所有限制值设置**(不可撤销)
ext4 传统 quota 工具¶
如果你使用的是 ext4 文件系统,需要使用传统的 quota 软件包提供的工具集。
安装与启用¶
修改 /etc/fstab 添加挂载选项:
| /etc/fstab(ext4 挂载选项) | |
|---|---|
重新挂载并初始化配额数据库文件:
设置与查看配额¶
edquota 打开的配置格式说明:
blocks/inodes:当前已使用量(不要手动修改)soft/hard:软/硬限制(单位 KB,0 表示不限制)
XFS 与 ext4 操作对照¶
| 操作 | XFS | ext4 |
|---|---|---|
| fstab 参数 | usrquota / grpquota / prjquota |
usrquota / grpquota |
| 初始化配额文件 | 不需要 | quotacheck -cugm |
| 设置用户/组限额 | xfs_quota -x -c "limit..." |
edquota 或 setquota |
| 设置宽限时间 | xfs_quota -x -c "timer..." |
edquota -t |
| 目录(project)限额 | xfs_quota -x -c "limit -p..." |
❌ 不支持 |
| 查看报告 | xfs_quota -x -c "report..." |
repquota / quota |
| 启动/停止配额 | xfs_quota -x -c "enable/disable..." |
quotaon / quotaoff |
| 发送警告邮件 | 暂未支持 | warnquota |
配额管理最佳实践¶
限制值的设置原则:硬限制通常设为软限制的 120%~150%,让宽限时间有实际意义。例如软限制 250 MB、硬限制 300 MB,用户有 50 MB 的缓冲空间和 7 天的整理时间。
宽限时间建议:默认 7 天适合大多数场景,生产环境可根据业务周期调整(如按周为单位的工作场景设为 14 天)。
定期报告:通过 cron 定期检查配额使用情况,提前发现接近上限的用户:
跨文件系统的 quota 技巧:如果 /var/spool/mail(邮件目录)与 /home 不在同一分区,无法直接对邮件目录设 quota,可以将邮件目录移入 /home 并创建符号链接:
SELinux 注意事项
启用 SELinux 的系统中,quota 默认只能针对 /home 目录生效。如需对其他目录(如 /var/spool/mail)设置配额,需要调整 SELinux 上下文或规则。