Ubuntu 20.04系统syslog与kern.log过大致磁盘告警问题咨询
Ubuntu 20.04下/var/log中syslog和kern.log暴增的原因及安全处理方案
嘿,碰到过好几次这种日志爆盘的情况,来给你理清楚前因后果和安全的处理方式~
一、日志文件疯长的常见原因
- 进程/服务持续报错循环:这是最常见的情况——比如某个系统服务(像network-manager、systemd的子进程)或者自定义脚本出了问题,反复抛出错误、警告信息,syslog会一直记录这些内容。举个例子,网卡驱动兼容性差,每次网络重连就刷几百行日志;或者某个定时脚本逻辑错误,每分钟输出几十条报错,日积月累就会撑满磁盘。
- 内核级硬件/模块异常:kern.log是内核的日志输出,如果你的硬件(磁盘、内存、显卡之类)有故障,或者内核模块加载失败、频繁触发调试逻辑,内核会不断打印日志。比如磁盘出现坏道导致I/O错误,内核会反复记录这个异常;或者某个内核版本和你的硬件不兼容,启动后一直输出调试信息。
- 日志轮转工具罢工:Ubuntu默认用
logrotate自动切割、压缩旧日志,如果/etc/logrotate.d/rsyslog这个配置文件被修改过,或者logrotate进程权限不足、运行失败,日志就会一直写入同一个文件,不会自动归档,时间久了自然就涨到几十上百G。
二、直接删除日志文件是否安全?
直接删不推荐!原因有两个:
- 如果rsyslogd(负责写日志的进程)还在持有这个文件的句柄,你删除文件后磁盘空间不会立刻释放——系统会认为这个文件还被进程占用,直到你重启rsyslog服务或者服务器。
- 直接删除可能导致rsyslog进程无法继续写入日志,甚至崩溃,影响系统日志的正常记录。
安全的处理方式
- 清空日志内容而非删除文件:用这个命令直接把文件大小置为0,既释放空间又不打断进程写入:
sudo truncate -s 0 /var/log/syslog sudo truncate -s 0 /var/log/kern.log - 重启日志服务确保正常写入:清空后可以重启rsyslog让它重新关联文件:
sudo systemctl restart rsyslog - 修复日志轮转配置:检查
/etc/logrotate.d/rsyslog的配置,确保里面有类似这样的规则(比如每天轮转、保留7份旧日志、压缩旧文件):
然后手动执行一次轮转测试,确保工具正常工作:/var/log/syslog /var/log/kern.log { rotate 7 daily missingok notifempty delaycompress compress postrotate /usr/lib/rsyslog/rsyslog-rotate endscript }sudo logrotate -f /etc/logrotate.d/rsyslog
三、后续排查建议(从根源解决问题)
- 先看日志找报错源头:用
tail -n 2000 /var/log/syslog或者dmesg | tail -n 1000看看最近的日志内容,找那些重复出现的错误信息,定位是哪个服务或硬件出了问题。 - 检查硬件健康状态:如果kern.log暴增,优先排查硬件——用
smartctl -a /dev/sda(替换成你的磁盘设备名)检查磁盘SMART信息,排除坏道;用memtest86+测试内存,看是否有内存故障。 - 优化日志级别减少冗余:如果是某些服务日志太啰嗦,可以修改rsyslog的配置,把不必要的日志级别(比如debug级)过滤掉,减少日志写入量。
内容的提问来源于stack exchange,提问作者chai_and_kaapi
相关产品推荐
相关产品推荐

