CentOS日志存储空间不足怎么办
小樊
37
2025-12-27 09:51:26
CentOS日志存储空间不足的排查与处置
一、快速定位占用来源
- 查看整体磁盘使用:执行df -h,确认哪个分区(常见为**/或/var**)已满。
- 定位大日志目录与文件:执行du -sh /var/log/* | sort -hr | head,找出占用最大的日志目录与文件。
- 检查 systemd 日志体积:执行journalctl --disk-usage,确认 journal 是否占用异常。
以上命令能迅速判断是传统文本日志(/var/log/*.log)还是 journal 日志导致空间紧张。
二、立即释放空间的应急操作
- 清理 systemd journal(优先):
- 先做一次日志轮转:sudo journalctl --rotate
- 按大小保留:sudo journalctl --vacuum-size=500M
- 按时间保留:sudo journalctl --vacuum-time=7d
- 安全清空正在写入的日志文件(不删文件,避免破坏正在写入的进程):
- 示例:sudo truncate -s 0 /var/log/messages 或 echo -n > /var/log/messages
- 清理旧文本日志(谨慎带条件删除):
- 示例:find /var/log -type f -name “*.log” -mtime +30 -exec rm -f {} ;(删除30天前)
- 清理 rsyslog 轮转的旧文件(已被 logrotate 管理的 .gz 等):
- 示例:find /var/log -type f -name “*.gz” -mtime +7 -delete
- 如磁盘已接近耗尽,可临时将大文件挪走并释放空间,再处理根因。
以上方法可快速回收空间,优先处理 journal 与轮转后归档日志。
三、配置长期自动治理
- 配置 logrotate(系统日志通用示例):编辑**/etc/logrotate.d/rsyslog**或新建规则,示例:
/var/log/messages {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
postrotate
/usr/bin/systemctl reload rsyslog >/dev/null 2>&1 || true
endscript
}
- 调试与强制执行:sudo logrotate -d /etc/logrotate.conf(调试),sudo logrotate -f /etc/logrotate.conf(强制)。
- 限制 journal 日志大小与保留期:编辑**/etc/systemd/journald.conf**,示例:
SystemMaxUse=1G
MaxRetentionSec=1week
修改后重启:sudo systemctl restart systemd-journald。
- 调整 rsyslog 日志级别(减少日志量):在**/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf**中,将
*.info; mail.none; authpriv.none; cron.none /var/log/messages
调整为
*.warning; mail.none; authpriv.none; cron.none /var/log/messages(仅记录 warning 及以上)。
- 更改日志存储路径(/var 分区紧张时):在 rsyslog 配置中将路径改为有足够空间的分区,例如:
. /data/log/messages,然后sudo systemctl restart rsyslog。
- 集中日志到远程服务器(减轻本地压力):在 rsyslog 中添加
*. @192.168.1.100:514*(UDP),或***.* @@192.168.1.100:514**(TCP),并重启 rsyslog。
以上策略覆盖“轮转压缩、级别优化、路径迁移、远程汇聚”的完整闭环。
四、高风险操作与注意事项
- 不要直接删除正在被进程写入的日志文件(可能导致句柄异常或应用异常);如需清理,请使用truncate -s 0或交由 logrotate 处理。
- 清理或迁移日志前,建议先做备份:例如sudo cp -r /var/log /var/log_backup_$(date +%Y%m%d%H%M%S)。
- 清理服务日志(如 httpd、nginx、mysqld)时,优先通过systemctl restart让其按新配置重新创建日志文件,避免直接 rm 后权限或句柄问题。
- 修改 rsyslog、journald 配置后务必重启服务使其生效,并观察journalctl -xe是否有报错。
- 若磁盘长期吃紧,优先扩容**/var**所在分区或挂载更大磁盘,再配合上述策略治理。
以上做法可显著降低因误操作导致的风险,并确保配置变更稳定生效。