背景
最近业务那边有套系统反馈服务器磁盘根分区使用率到96%,每天还在不断增大,但并没找到是哪个文件所占用。当听到这个问题描述第一想到的是不是某个还被进程占用的文件被人为删除了。因为之前自己也遇到过相同场景,为验证这个猜想,给用户要了服务器账号密码登录查看。
问题排查
可以看到df查看“/”根分区已使用57GB,而du查看根分区只占用了5.7GB,没看到根分区有哪个一级目录占用太多空间,中间有50多GB差异找不到,查看已被删除的文件信息。
可以看到/var/log/auth.log-20260214这个已被删除的文件还在被rsyslogd程序占用,通过计算这个文件大小有50GB,跟上面查询差异的50GB对得起来。看到这就找到磁盘空间被占满的原因——人为删除了一个还在被程序占用的文件。
解决处理
通知用户重启rsyslog服务释放程序占用的进程磁盘空间后,df查看根分区所占空间恢复正常
systemctl restart rsyslog
后续处理
运维过程中经常也会遇到某个日志文件占用磁盘空间需要清理,这个时候不要着急直接rm,如果这个文件较大,并且还在被某个程序占用,可以把该文件内容清空全部丢弃到/dev/null,正确操作是echo > file.log
