Linux磁盘配额防日志爆满的核心是限制/var/log分区中日志生成者(如syslog、www-data等用户)的写入能力,需独立挂载、fstab加usrquota,grpquota、quotacheck初始化、quotaon启用,并配合logrotate形成双重防护。

新手配置Linux磁盘配额防日志爆满停机,核心不是“堵住所有写入”,而是把日志生成者(用户、服务)的写入能力限制在可控范围内——尤其针对/var/log这类高风险分区。日志本身不会主动耗尽空间,但失控的用户进程(如调试脚本反复打日志)、未轮转的应用日志、或被攻陷账户恶意刷日志,会快速填满磁盘。配额是最后一道硬闸,比单纯依赖logrotate更底层、更可靠。
优先给 /var/log 所在分区启用配额
很多新手误以为配额只该用在/home,其实/var/log才是日志风暴的主战场。先确认它是否独立挂载:
- 运行 df -h /var/log,如果显示挂载点是/var/log(而非/),说明它是独立分区,可直接配额
- 若和根分区共用,建议重新规划:将/var/log迁移到单独的ext4分区(如/dev/sdb1),再配置。不推荐对/直接设限,易引发系统异常
- 编辑/etc/fstab,在对应行挂载选项中加入usrquota,grpquota,例如:
UUID=abc123 /var/log ext4 defaults,usrquota,grpquota 0 2 - 执行 sudo mount -o remount /var/log,再用 mount | grep log 确认输出含usrquota
初始化配额数据库并立即启用
配额功能不会自动生效,必须显式创建跟踪文件并开启内核钩子:
- 运行 sudo quotacheck -cugm /var/log:
–c 创建新文件,–u 处理用户,–g 处理组,–m 忽略“未挂载”警告(因已重挂载) - 检查是否生成关键文件:ls -l /var/log/aquota.* 应看到两个非空文件
- 启用配额:sudo quotaon /var/log
- 验证状态:sudo quotaon -p 显示/var/log为“on”即成功
给日志相关用户和组设硬限制
日志写入本质是用户行为。syslog、nginx、mysql等服务通常以专用用户(如syslog、www-data、mysql)身份运行,这些才是配额目标:
- 用 sudo edquota -u syslog 编辑其限额(单位KB):
第二列(soft)和第三列(hard)填相同值,例如524288(512MB),即纯硬限,超即拒写 - 同时限制文件数(防小文件塞爆inode):
第四列(inodes soft)填5000,第五列(inodes hard)填5500 - 对常用服务用户重复操作:sudo edquota -u www-data、sudo edquota -u mysql
- 测试效果:切换到syslog用户,执行 dd if=/dev/zero of=/var/log/test bs=1M count=600,应报Disc quota exceeded
配合日志轮转形成双重防线
配额是兜底,logrotate是日常治理。二者必须共存:
- 确保/etc/logrotate.d/下各服务配置已启用,并设置size参数(如size 100M),而非仅依赖daily
- 对自定义应用日志,在logrotate配置中加入maxsize和rotate 5,防止单个日志滚大
- 定期用 sudo logrotate -d /etc/logrotate.conf 模拟调试,确认轮转逻辑无误
- 配额生效后,仍需监控:sudo repquota -a | grep -E "(syslog|www-data)" 查看实际使用量,避免长期接近硬限


















