linux磁盘配额配置需三步:启用配额支持(修改fstab并remount)、初始化数据库(quotacheck)并开启(quotaon)、为用户设限(edquota);可防磁盘写满导致的服务崩溃。

新手配置 Linux 磁盘配额,核心目标是防止个别用户或进程写满磁盘,造成服务崩溃、日志无法记录、Apache/Nginx 拒绝响应等“资源耗尽型 DoS”——这不是网络攻击,但效果类似。关键不在于复杂操作,而在于三步到位:启用配额支持、标记文件系统、分配用户限额。
确认并启用文件系统配额支持
大多数现代 Linux 发行版默认内核已支持配额(quota),但需确保挂载时启用。检查当前根分区是否已启用:
- 运行 mount | grep "$(df . | tail -1 | awk '{print $1}')" ,看输出中是否含 usrquota,grpquota(用户/组配额)或至少 usrquota
- 若没有,需编辑 /etc/fstab,在对应分区行的挂载选项(第四列)末尾添加 usrquota(单用户场景够用)或 usrquota,grpquota(多用户管理)
例如原行为:/dev/sda1 / ext4 defaults 0 1→ 改为:/dev/sda1 / ext4 defaults,usrquota 0 1 - 保存后执行 sudo mount -o remount / 重新挂载,立即生效(无需重启)
初始化配额数据库并扫描现有使用量
配额不是实时拦截机制,它依赖后台数据库记录每个用户的实际占用。首次启用必须初始化:
- 运行 sudo quotacheck -cug /
• -c 创建新数据库(aquota.user / aquota.group)
• -u 针对用户配额
• -g 针对组配额(可选)
• / 表示作用于根文件系统 - 执行后会在 / 目录下生成 aquota.user(可能还有 aquota.group)。该文件由系统自动读写,切勿手动编辑
- 再运行 sudo quotaon -avug 启用所有已配置分区的配额功能
为具体用户设置硬限制与软限制
使用 edquota 交互式设定,比直接改文件更安全直观:
- 运行 sudo edquota -u username(将 username 替换为真实用户名)
- 会打开 vi 编辑器,显示四列:
• blocks:磁盘块数(1块=1KB),用于空间限制
• inodes:文件数量限制(防小文件塞爆 inode)
• 第三列是 soft limit(软限),超限后有宽限期仍可写入
• 第四列是 hard limit(硬限),到此绝对禁止写入 - 例如设用户最多用 2GB 空间、最多建 5000 个文件:
blocks: soft = 2097152, hard = 2097152(2GB = 2×1024×1024 KB)
inodes: soft = 5000, hard = 5000 - 保存退出。如需批量设置,可用 edquota -p template_user user1 user2 复制模板
验证与日常维护
配额启用后不会自动报警,需主动检查和提醒:
- 查看某用户配额状态:quota -u username
- 查看所有启用配额的用户:repquota -a
- 设置宽限期(仅对 soft limit 生效):sudo edquota -t,修改 block grace period(如设为 7days)
- 建议每天用脚本检查关键用户是否接近硬限,例如:
quota -u www-data | awk '$3 > 0.9 * $4 {print "ALERT: "$1" at "$3/$4*100"%"}'
配额本身不防网络攻击,但它堵住了“磁盘写满→服务瘫痪”这条最常见、最易被忽视的 DoS 路径。只要 root 用户保持合理限额、web 服务用户(如 www-data)单独设限、日志轮转正常,系统就很难因空间耗尽而意外宕机。











