Linux日志清理磁盘爆满:从排查到根治的完整步骤

Linux日志清理磁盘爆满:从排查到根治的完整步骤

日志文件不知不觉吃掉大量磁盘空间,是服务器运维中最常见的问题之一。
本文针对零基础用户,带您安全且高效地清理Linux日志,并设置自动机制避免再次爆满。

1. 快速找出是哪些日志撑满了磁盘

先用 df -h 查看磁盘整体使用率,确定哪个分区满了(通常是 //var)。
再使用 du 命令逐层定位大目录:

# 查看 /var 下各目录大小,排序显示前10
sudo du -sh /var/* | sort -rh | head -10

常见日志路径:

  • /var/log/syslog/var/log/messages
  • /var/log/nginx//var/log/httpd/(Web服务日志)
  • /var/log/journal/(systemd日志)
  • /var/log/btmp/var/log/wtmp(登录日志)

如果发现某个日志文件体积异常大(比如几个GB),说明它就是罪魁祸首。

2. 安全清理日志并释放空间

不要直接删除日志文件! 正确的做法是清空内容:

# 清空指定日志文件(保留文件本身,不影响正在写入的进程)
sudo truncate -s 0 /var/log/syslog

如果日志被进程占用,rm 后空间可能不会立即释放,而 truncate 是更安全的方案。
对于 systemd 日志(journal),可以按时间或大小清理:

# 只保留最近3天的日志
sudo journalctl --vacuum-time=3d

# 限制日志总大小不超过200M
sudo journalctl --vacuum-size=200M

清理后立即用 df -h 验证空间是否释放。
若释放不明显,重启日志服务(如 sudo systemctl restart rsyslog)可释放已删除日志占用的文件句柄。

3. 设置日志轮转,防止再次爆满

Linux 自带的 logrotate 可以自动压缩、切割和清理日志。
配置文件在 /etc/logrotate.conf/etc/logrotate.d/ 目录下。
以 Nginx 为例,修改 /etc/logrotate.d/nginx

/var/log/nginx/*.log {
    daily          # 每天轮转一次
    rotate 7       # 保留最近7个归档
    compress       # 启用压缩
    delaycompress  # 延迟压缩(下次轮转时压缩上一次的)
    missingok      # 日志文件丢失不报错
    notifempty     # 日志为空则不轮转
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

修改后可以用 sudo logrotate -d /etc/logrotate.d/nginx 模拟执行。/etc/logrotate.conf 中的全局参数(如 rotate 4weekly)会作为默认值。
建议针对大型日志(如 /var/log/syslog)单独配置轮转策略。

4. 三个常见避坑指南

  • 不要随意删除 /var/log/*.gz.1 等旧归档:这些是 logrotate 产生的压缩历史,删除后无法追查。如果空间紧张,应通过调 rotate 数量控制保留份数。
  • 不要用 rm 删除正在被写入的日志:即使 rm 了,空间也要等进程关闭文件才会释放。始终优先用 truncate -s 0
  • journald 日志默认无限制:强烈建议在 /etc/systemd/journald.conf 中设置 SystemMaxUse=500M 限制总大小,然后执行 sudo systemctl restart systemd-journald

5. 验证清理效果并养成日常检查习惯

清理后执行 df -h 确认空间回升。
可以写一个简单监控脚本:

#!/bin/bash
THRESHOLD=80
USE=$(df / | awk 'NR==2{print $5}' | sed 's/%//')
if [ $USE -gt $THRESHOLD ]; then
    echo "磁盘使用率 $USE% 超过 $THRESHOLD%,建议检查日志" | mail -s "磁盘告警" admin@example.com
fi

配合 cron 定时执行(如每天8点)。
长远来看,建议定期用 du -sh /var/log/* 观察增长趋势,并结合 logrotate 和 journald 限制,让 Linux日志清理磁盘爆满 不再成为突发问题。

如果你也遇到类似情况,按照上述步骤操作即可快速恢复。
遇到异常时可以回溯每个步骤的输出,大部分问题都能定位到未正确轮转或误删日志导致的残留文件句柄。

分享到:
上一篇
一文搞懂WordPress用户权限管理:角色分配与安全设置
下一篇
Docker部署Jenkins持续集成
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意