温馨提示×

为何Debian日志占满磁盘

小樊
47
2026-08-23 04:01:09
栏目: 智能运维

Debian 系统日志占满磁盘,通常是因为 日志文件没有被正确轮转(rotate)或清理,或者某个服务在疯狂写日志。下面按常见原因 → 排查 → 解决方法来说明。


一、常见原因

1. 日志轮转未生效(最常见)

Debian 使用 rsyslog / systemd-journald + logrotate 管理日志。

如果:

  • logrotate 没运行
  • 配置文件损坏
  • 磁盘满导致 logrotate 失败

日志就会无限增长。


2. systemd journal 日志无限增长

systemd-journald 默认可能 不限制日志大小

查看:

journalctl --disk-usage

如果显示几个 GB,就说明 journal 占满了。


3. 某个服务疯狂写日志

例如:

  • nginx / apache
  • docker
  • cron
  • 某个脚本死循环

日志文件会迅速变大。


4. 日志文件被删除但仍被占用(经典坑)

你以为删了日志,但空间没释放:

rm /var/log/syslog

如果 rsyslog 仍占用该文件句柄,磁盘空间不会释放。


5. /var/log 分区太小

  • 根分区 //var 分区太小
  • 日志增长快,很快打满

二、快速排查步骤(推荐顺序)

1️⃣ 看磁盘使用情况

df -h

如果 //var 使用率 100%,继续。


2️⃣ 找出最大的日志文件

du -h /var/log | sort -hr | head -20

常见大文件:

  • /var/log/syslog
  • /var/log/kern.log
  • /var/log/messages
  • /var/log/journal/*

3️⃣ 检查 journal 日志大小

journalctl --disk-usage

4️⃣ 检查是否有“已删除但未释放”的文件

lsof +L1

如果看到 /var/log/xxx (deleted),说明问题在这里。


三、解决方案

✅ 1. 清理 journal 日志(安全)

sudo journalctl --vacuum-size=200M

或按时间:

sudo journalctl --vacuum-time=7d

永久限制大小:

sudo nano /etc/systemd/journald.conf

修改:

SystemMaxUse=200M
RuntimeMaxUse=100M

然后:

sudo systemctl restart systemd-journald

✅ 2. 手动清理大日志(临时)

sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log

⚠️ 不要用 rm,用 truncate 更安全。


✅ 3. 修复 logrotate

检查是否运行:

cat /var/lib/logrotate/status

手动执行:

sudo logrotate -vf /etc/logrotate.conf

如果报错,说明配置有问题。


✅ 4. 释放“已删除但仍占用”的日志

找到进程:

lsof +L1

重启对应服务(如 rsyslog):

sudo systemctl restart rsyslog

✅ 5. 限制日志来源(治本)

如果是某个服务疯狂写日志:

journalctl -u 服务名

然后:

  • 修复服务配置
  • 降低日志级别
  • 限制输出

四、推荐的健康配置(Debian 通用)

journald

Storage=persistent
SystemMaxUse=200M
MaxRetentionSec=2week

rsyslog

确保 /etc/logrotate.d/rsyslog 存在并正常。


五、一句话总结

Debian 日志占满磁盘,90% 是因为 journal 或 logrotate 问题,用 journalctl --disk-usage + du -h /var/log 基本能定位。

如果你愿意,可以把下面两条命令的输出贴出来,我可以直接帮你判断是哪一种情况:

df -h
journalctl --disk-usage

0