Ubuntu根目录空间占用过高,通过清理系统日志文件进行清理
Ubuntu根目录空间占用过高,通过清理系统日志文件进行清理
问题发现
今天突然发现 /
目录占用达到了100%,需要清理一下磁盘,进入/
目录一看,发现/var/log
占用了55G磁盘,再进log
中查看,发现syslog
就占用了50G。
处理方法
1.临时清空日志
1 |
|
由于syslog
是系统日志文件,不能直接删除。上述命令可以直接清空文件内容,马上释放空间,而不是删除文件本身。这样文件大小变为 0,但文件仍存在,系统还能继续写入。
2.使用 logrotate 管理日志
Ubuntu 自带 logrotate 来自动清理旧日志。配置文件在 /etc/logrotate.conf
和 /etc/logrotate.d/
下。
手动执行一次轮转:
1
sudo logrotate -f /etc/logrotate.conf
可以设置日志保留时间、压缩策略等(比如只保留 7 天,超出的删除)。
这样/
目录一下清出来几十G空间。
新的问题
在清理完/
目录后过了一小会,系统又警告我/
目录满了,一检查发现确实又满了,说明可能有某个服务在一直写入log。
查看syslog
:
1 |
|
发现日志中在不断刷新一大堆update-notifier-crash相关的日志:
1 |
|
update-notifier-crash
是 Ubuntu 自带的一个程序,用来弹出「系统崩溃报告」或「有更新可用」的通知。- 它调用了 webkit / chromium 内核的组件,而这些组件有 bug(zygote 进程通信失败),于是疯狂刷日志。
- 这就是导致
/var/log/syslog
快速膨胀的“罪魁祸首”。
解决方法
1.直接禁用 update-notifier-crash
如果你不需要自动弹更新通知,可以把它关掉:
1 |
|
或者干脆禁用 service:
1 |
|
2.屏蔽它的日志写入
如果你还想保留它,但不想刷 syslog
,可以用 rsyslog
规则屏蔽:
编辑 /etc/rsyslog.d/ignore-update-notifier.conf
,加入以下内容:
1 |
|
然后重启rsyslog:
1 |
|
写入这个配置之后可能会无法生效,这可能是因为rsyslog
的配置加载顺序导致规则被覆盖。
- rsyslog 会按文件名的字典序依次加载
/etc/rsyslog.d/
下的.conf
文件,然后再加载/etc/rsyslog.conf
中的配置。 - 当多个规则作用于同一个日志消息时,先匹配的规则会生效,如果后面有规则覆盖或把消息重新写入
syslog
,就可能“打回原样”。
总结就是先读取的配置会生效,读取顺序取决于文件名。
所以,可以尝试更改上面的配置文件名:
1 |
|
再重启rsyslog
,这样就能生效了。